Sk_API for SkImageGenerator and SkInstallDiscardablePixelRef
Added SK_API to SkImageGenerator (already in include/). Moved SkDiscardablePixelRef::Install to SkInstallDiscardablePixelRef, added SK_API to that function, and moved declaration to SkImageGenerator.h This keeps the SkDiscardablePixelRef internal to Skia, but exposes a method to install it into a bitmap. Modifed tests that rely on this functio to use new version. BUG= R=mtklein@google.com, reed@google.com Review URL: https://codereview.chromium.org/111713002 git-svn-id: http://skia.googlecode.com/svn/trunk@12612 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
a3b84d41ef
commit
edd370f949
@ -8,15 +8,43 @@
|
||||
#ifndef SkImageGenerator_DEFINED
|
||||
#define SkImageGenerator_DEFINED
|
||||
|
||||
#include "SkDiscardableMemory.h"
|
||||
#include "SkImageInfo.h"
|
||||
|
||||
class SkBitmap;
|
||||
class SkData;
|
||||
class SkImageGenerator;
|
||||
|
||||
/**
|
||||
* Takes ownership of SkImageGenerator. If this method fails for
|
||||
* whatever reason, it will return false and immediatetely delete
|
||||
* the generator. If it succeeds, it will modify destination
|
||||
* bitmap.
|
||||
*
|
||||
* If this fails or when the SkDiscardablePixelRef that is
|
||||
* installed into destination is destroyed, it will call
|
||||
* SkDELETE() on the generator. Therefore, generator should be
|
||||
* allocated with SkNEW() or SkNEW_ARGS().
|
||||
*
|
||||
* @param destination Upon success, this bitmap will be
|
||||
* configured and have a pixelref installed.
|
||||
*
|
||||
* @param factory If not NULL, this object will be used as a
|
||||
* source of discardable memory when decoding. If NULL, then
|
||||
* SkDiscardableMemory::Create() will be called.
|
||||
*
|
||||
* @return true iff successful.
|
||||
*/
|
||||
SK_API bool SkInstallDiscardablePixelRef(SkImageGenerator* generator,
|
||||
SkBitmap* destination,
|
||||
SkDiscardableMemory::Factory* factory = NULL);
|
||||
|
||||
|
||||
/**
|
||||
* An interface that allows a purgeable PixelRef (such as a
|
||||
* SkDiscardablePixelRef) to decode and re-decode an image as needed.
|
||||
*/
|
||||
class SkImageGenerator {
|
||||
class SK_API SkImageGenerator {
|
||||
public:
|
||||
/**
|
||||
* The PixelRef which takes ownership of this SkImageGenerator
|
||||
|
@ -7,8 +7,8 @@
|
||||
|
||||
#include "SkDecodingImageGenerator.h"
|
||||
#include "SkData.h"
|
||||
#include "SkDiscardablePixelRef.h"
|
||||
#include "SkImageDecoder.h"
|
||||
#include "SkImageGenerator.h"
|
||||
#include "SkImagePriv.h"
|
||||
#include "SkStream.h"
|
||||
|
||||
@ -191,7 +191,7 @@ bool SkDecodingImageGenerator::Install(SkData* data, SkBitmap* dst,
|
||||
SkASSERT(data != NULL);
|
||||
SkASSERT(dst != NULL);
|
||||
SkImageGenerator* gen(SkNEW_ARGS(SkDecodingImageGenerator, (data)));
|
||||
return SkDiscardablePixelRef::Install(gen, dst, factory);
|
||||
return SkInstallDiscardablePixelRef(gen, dst, factory);
|
||||
}
|
||||
|
||||
bool SkDecodingImageGenerator::Install(SkStreamRewindable* stream,
|
||||
@ -204,5 +204,5 @@ bool SkDecodingImageGenerator::Install(SkStreamRewindable* stream,
|
||||
return false;
|
||||
}
|
||||
SkImageGenerator* gen(SkNEW_ARGS(SkDecodingImageGenerator, (stream)));
|
||||
return SkDiscardablePixelRef::Install(gen, dst, factory);
|
||||
return SkInstallDiscardablePixelRef(gen, dst, factory);
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include "SkDiscardablePixelRef.h"
|
||||
#include "SkDiscardableMemory.h"
|
||||
#include "SkImageGenerator.h"
|
||||
|
||||
SkDiscardablePixelRef::SkDiscardablePixelRef(SkImageGenerator* generator,
|
||||
const SkImageInfo& info,
|
||||
@ -62,18 +63,22 @@ void SkDiscardablePixelRef::onUnlockPixels() {
|
||||
}
|
||||
}
|
||||
|
||||
bool SkDiscardablePixelRef::Install(SkImageGenerator* generator,
|
||||
SkBitmap* dst,
|
||||
SkDiscardableMemory::Factory* factory) {
|
||||
bool SkInstallDiscardablePixelRef(SkImageGenerator* generator,
|
||||
SkBitmap* dst,
|
||||
SkDiscardableMemory::Factory* factory) {
|
||||
SkImageInfo info;
|
||||
SkASSERT(generator != NULL);
|
||||
if ((NULL == generator)
|
||||
|| (!generator->getInfo(&info))
|
||||
|| (!dst->setConfig(info, 0))
|
||||
|| (0 == dst->getSize())) { // dst->getSize=0 Probably a bad config
|
||||
|| (!dst->setConfig(info, 0))) {
|
||||
SkDELETE(generator);
|
||||
return false;
|
||||
}
|
||||
SkASSERT(dst->config() != SkBitmap::kNo_Config);
|
||||
if (dst->empty()) { // Use a normal pixelref.
|
||||
SkDELETE(generator); // Do not need this anymore.
|
||||
return dst->allocPixels(NULL, NULL);
|
||||
}
|
||||
SkAutoTUnref<SkDiscardablePixelRef> ref(SkNEW_ARGS(SkDiscardablePixelRef,
|
||||
(generator, info,
|
||||
dst->getSize(),
|
||||
|
@ -9,43 +9,12 @@
|
||||
#define SkDiscardablePixelRef_DEFINED
|
||||
|
||||
#include "SkDiscardableMemory.h"
|
||||
#include "SkPixelRef.h"
|
||||
#include "SkImageGenerator.h"
|
||||
#include "SkImageInfo.h"
|
||||
|
||||
/**
|
||||
* An interface that allows a purgable PixelRef to re-decode an image.
|
||||
*/
|
||||
|
||||
typedef SkDiscardableMemory* (*SkDiscardableMemoryFactory)(size_t bytes);
|
||||
|
||||
#include "SkPixelRef.h"
|
||||
|
||||
class SkDiscardablePixelRef : public SkPixelRef {
|
||||
public:
|
||||
/**
|
||||
* Takes ownership of SkImageGenerator. If this method fails for
|
||||
* whatever reason, it will return false and immediatetely delete
|
||||
* the generator. If it succeeds, it will modify destination
|
||||
* bitmap.
|
||||
*
|
||||
* If Install fails or when the SkDiscardablePixelRef that is
|
||||
* installed into destination is destroyed, it will call
|
||||
* SkDELETE() on the generator. Therefore, generator should be
|
||||
* allocated with SkNEW() or SkNEW_ARGS().
|
||||
*
|
||||
* @param destination Upon success, this bitmap will be
|
||||
* configured and have a pixelref installed.
|
||||
*
|
||||
* @param factory If not NULL, this object will be used as a
|
||||
* source of discardable memory when decoding. If NULL, then
|
||||
* SkDiscardableMemory::Create() will be called.
|
||||
*
|
||||
* @return true iff successful.
|
||||
*/
|
||||
static bool Install(SkImageGenerator* generator,
|
||||
SkBitmap* destination,
|
||||
SkDiscardableMemory::Factory* factory = NULL);
|
||||
|
||||
SK_DECLARE_UNFLATTENABLE_OBJECT()
|
||||
|
||||
protected:
|
||||
@ -75,5 +44,9 @@ private:
|
||||
size_t size,
|
||||
size_t rowBytes,
|
||||
SkDiscardableMemory::Factory* factory);
|
||||
friend bool SkInstallDiscardablePixelRef(SkImageGenerator*,
|
||||
SkBitmap*,
|
||||
SkDiscardableMemory::Factory*);
|
||||
typedef SkPixelRef INHERITED;
|
||||
};
|
||||
#endif // SkDiscardablePixelRef_DEFINED
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include "SkCanvas.h"
|
||||
#include "SkData.h"
|
||||
#include "SkDecodingImageGenerator.h"
|
||||
#include "SkDiscardablePixelRef.h"
|
||||
#include "SkDiscardableMemoryPool.h"
|
||||
#include "SkImageDecoder.h"
|
||||
#include "SkCachingPixelRef.h"
|
||||
@ -257,7 +256,7 @@ void CheckPixelRef(TestImageGenerator::TestType type,
|
||||
// Ignore factory; use global SkScaledImageCache.
|
||||
success = SkCachingPixelRef::Install(gen.detach(), &lazy);
|
||||
} else {
|
||||
success = SkDiscardablePixelRef::Install(gen.detach(), &lazy, factory);
|
||||
success = SkInstallDiscardablePixelRef(gen.detach(), &lazy, factory);
|
||||
}
|
||||
REPORTER_ASSERT(reporter, success
|
||||
== (TestImageGenerator::kFailGetInfo_TestType != type));
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "SkCanvas.h"
|
||||
#include "SkData.h"
|
||||
#include "SkDiscardableMemoryPool.h"
|
||||
#include "SkDiscardablePixelRef.h"
|
||||
#include "SkImageGenerator.h"
|
||||
#include "SkPaint.h"
|
||||
#include "SkShader.h"
|
||||
#include "SkSurface.h"
|
||||
@ -48,7 +48,7 @@ static void test_faulty_pixelref(skiatest::Reporter* reporter) {
|
||||
SkAutoTUnref<SkDiscardableMemoryPool> pool(SkNEW_ARGS(SkDiscardableMemoryPool,
|
||||
(10 * 1000, NULL)));
|
||||
SkBitmap bm;
|
||||
bool installSuccess = SkDiscardablePixelRef::Install(SkNEW(FailureImageGenerator), &bm, pool);
|
||||
bool installSuccess = SkInstallDiscardablePixelRef(SkNEW(FailureImageGenerator), &bm, pool);
|
||||
REPORTER_ASSERT(reporter, installSuccess);
|
||||
// now our bitmap has a pixelref, but we know it will fail to lock
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "SkData.h"
|
||||
#include "SkDecodingImageGenerator.h"
|
||||
#include "SkDiscardableMemoryPool.h"
|
||||
#include "SkDiscardablePixelRef.h"
|
||||
#include "SkImageGenerator.h"
|
||||
#include "SkForceLinking.h"
|
||||
|
||||
#include "SkCommandLineFlags.h"
|
||||
@ -44,5 +44,5 @@ bool sk_tools::LazyDecodeBitmap(const void* src,
|
||||
// Only meaningful if platform has a default discardable
|
||||
// memory implementation that differs from the global DM pool.
|
||||
}
|
||||
return SkDiscardablePixelRef::Install(gen.detach(), dst, pool);
|
||||
return SkInstallDiscardablePixelRef(gen.detach(), dst, pool);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user