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
This commit is contained in:
commit-bot@chromium.org 2013-12-02 22:32:54 +00:00
parent c25d2219cb
commit dd59799cf8
2 changed files with 9 additions and 0 deletions

View File

@ -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().

View File

@ -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() {