diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-12-02 22:32:54 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-12-02 22:32:54 +0000 |
commit | dd59799cf8eeb8e4263689e993a020b370d77991 (patch) | |
tree | 3c8a8a1600a122c81d754a0a5e6af70f0529df47 | |
parent | c25d2219cb34ffd06a24609b9013c514b58d58ff (diff) |
SkDiscardablePixelRef objects are now marked immutable.
I also specifically mentioned in the SkImageGenerator documentation
that it should always return the same information on subsequent calls
to getInfo() and getPixels().
Motivation: When a bitmap is recorded into a SkPicture, it will choose
whether to shallow- or deep-copy itself into the SkBitmapHeap based on
the immutable flag. Failing to set it would make picture recording slow.
BUG=
R=fmalita@google.com, reed@google.com, scroggo@google.com
Author: halcanary@google.com
Review URL: https://codereview.chromium.org/99303003
git-svn-id: http://skia.googlecode.com/svn/trunk@12445 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | include/core/SkImageGenerator.h | 6 | ||||
-rw-r--r-- | src/lazy/SkDiscardablePixelRef.cpp | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/include/core/SkImageGenerator.h b/include/core/SkImageGenerator.h index e43fbc1b28..c56e62a9d6 100644 --- a/include/core/SkImageGenerator.h +++ b/include/core/SkImageGenerator.h @@ -37,6 +37,9 @@ public: * Return some information about the image, allowing the owner of * this object to allocate pixels. * + * Repeated calls to this function should give the same results, + * allowing the PixelRef to be immutable. + * * @return false if anything goes wrong. */ virtual bool getInfo(SkImageInfo* info) = 0; @@ -46,6 +49,9 @@ public: * least (info.fHeight - 1) * rowBytes + (info.fWidth * * bytesPerPixel) * + * Repeated calls to this function should give the same results, + * allowing the PixelRef to be immutable. + * * @param info A description of the format (config, size) * expected by the caller. This can simply be identical * to the info returned by getInfo(). diff --git a/src/lazy/SkDiscardablePixelRef.cpp b/src/lazy/SkDiscardablePixelRef.cpp index b6e1b1004e..4e19c7f65b 100644 --- a/src/lazy/SkDiscardablePixelRef.cpp +++ b/src/lazy/SkDiscardablePixelRef.cpp @@ -20,6 +20,9 @@ SkDiscardablePixelRef::SkDiscardablePixelRef(SkImageGenerator* generator, SkASSERT(fGenerator != NULL); SkASSERT(fSize > 0); SkASSERT(fRowBytes > 0); + // The SkImageGenerator contract requires fGenerator to always + // decode the same image on each call to getPixels(). + this->setImmutable(); } SkDiscardablePixelRef::~SkDiscardablePixelRef() { |