change setAlphaType to not modify the pixelref's genID
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 28 Jan 2014 16:05:39 +0000 (16:05 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 28 Jan 2014 16:05:39 +0000 (16:05 +0000)
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

include/core/SkBitmap.h
include/core/SkPixelRef.h
src/core/SkBitmap.cpp
src/core/SkPixelRef.cpp

index 1dd2c80..2cdac27 100644 (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);
 
index 62edc3e..5a9a5a0 100644 (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.
index 825b1dc..e12840a 100644 (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;
index 507a4fc..d08796b 100644 (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;
 }