change setAlphaType to not modify the pixelref's genID

BUG=skia:
R=bsalomon@google.com, halcanary@google.com

Review URL: https://codereview.chromium.org/137263009

git-svn-id: http://skia.googlecode.com/svn/trunk@13219 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
reed@google.com 2014-01-28 16:05:39 +00:00
parent a96176dc03
commit c1587f94a7
4 changed files with 15 additions and 15 deletions

View File

@ -131,10 +131,7 @@ public:
*
* Note: this changes the alphatype for the underlying pixels, which means
* that all bitmaps that might be sharing (subsets of) the pixels will
* be affected. This is an expensive change for some backends (e.g. GPU)
* since changing the alphatype can invalidate internal caches. Thus this
* call should only be made if it is associated with real changes to the
* pixel data.
* be affected.
*/
bool setAlphaType(SkAlphaType);

View File

@ -130,15 +130,15 @@ public:
* Call this if you have changed the contents of the pixels. This will in-
* turn cause a different generation ID value to be returned from
* getGenerationID().
*
* If the alphatype has also changed, specify its new value as well. If
* the new pixels' alphatype is the same, this can be called with no
* parameter.
*/
void notifyPixelsChanged(SkAlphaType);
void notifyPixelsChanged() {
this->notifyPixelsChanged(fInfo.fAlphaType);
}
void notifyPixelsChanged();
/**
* Change the info's AlphaType. Note that this does not automatically
* invalidate the generation ID. If the pixel values themselves have
* changed, then you must explicitly call notifyPixelsChanged() as well.
*/
void changeAlphaType(SkAlphaType at);
/** Returns true if this pixelref is marked as immutable, meaning that the
contents of its pixels will not change for the lifetime of the pixelref.

View File

@ -324,7 +324,7 @@ bool SkBitmap::setAlphaType(SkAlphaType alphaType) {
if (fAlphaType != alphaType) {
fAlphaType = SkToU8(alphaType);
if (fPixelRef) {
fPixelRef->notifyPixelsChanged(alphaType);
fPixelRef->changeAlphaType(alphaType);
}
}
return true;

View File

@ -254,17 +254,20 @@ void SkPixelRef::callGenIDChangeListeners() {
fGenIDChangeListeners.deleteAll();
}
void SkPixelRef::notifyPixelsChanged(SkAlphaType at) {
void SkPixelRef::notifyPixelsChanged() {
#ifdef SK_DEBUG
if (fIsImmutable) {
SkDebugf("========== notifyPixelsChanged called on immutable pixelref");
}
#endif
*const_cast<SkAlphaType*>(&fInfo.fAlphaType) = at;
this->callGenIDChangeListeners();
this->needsNewGenID();
}
void SkPixelRef::changeAlphaType(SkAlphaType at) {
*const_cast<SkAlphaType*>(&fInfo.fAlphaType) = at;
}
void SkPixelRef::setImmutable() {
fIsImmutable = true;
}