aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/lazy
diff options
context:
space:
mode:
authorGravatar halcanary@google.com <halcanary@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-12-10 21:11:12 +0000
committerGravatar halcanary@google.com <halcanary@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-12-10 21:11:12 +0000
commitedd370f949a457f5d8f7a62efdaf685d4caf46fe (patch)
treeccb79dcfeedf361e44488f67cb22350dd8c97aa0 /src/lazy
parenta3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3 (diff)
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
Diffstat (limited to 'src/lazy')
-rw-r--r--src/lazy/SkDiscardablePixelRef.cpp15
-rw-r--r--src/lazy/SkDiscardablePixelRef.h37
2 files changed, 15 insertions, 37 deletions
diff --git a/src/lazy/SkDiscardablePixelRef.cpp b/src/lazy/SkDiscardablePixelRef.cpp
index e614db37e9..6a9507c8c7 100644
--- a/src/lazy/SkDiscardablePixelRef.cpp
+++ b/src/lazy/SkDiscardablePixelRef.cpp
@@ -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(),
diff --git a/src/lazy/SkDiscardablePixelRef.h b/src/lazy/SkDiscardablePixelRef.h
index 78dcd66791..44c6df9637 100644
--- a/src/lazy/SkDiscardablePixelRef.h
+++ b/src/lazy/SkDiscardablePixelRef.h
@@ -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