be sure to use cached bitmap when we need to upload something to make a texture
authorreed <reed@google.com>
Mon, 14 Sep 2015 17:27:57 +0000 (10:27 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 14 Sep 2015 17:27:57 +0000 (10:27 -0700)
BUG=skia:4334

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

src/core/SkBitmapCache.cpp
src/core/SkImageCacherator.cpp

index 9f985e5a3edb311f8f190adfb42a6df69660f7b0..dfa387bb3992e351dd5eba4aa1495c075a98ca3d 100644 (file)
@@ -58,6 +58,11 @@ public:
                    sizeof(fGenID) + sizeof(fWidth) + sizeof(fHeight) + sizeof(fBounds));
     }
 
+    void dump() const {
+        SkDebugf("-- add [%d %d] %d [%d %d %d %d]\n", fWidth, fHeight, fGenID,
+                 fBounds.x(), fBounds.y(), fBounds.width(), fBounds.height());
+    }
+
     const uint32_t  fGenID;
     const int       fWidth;
     const int       fHeight;
@@ -69,7 +74,11 @@ struct BitmapRec : public SkResourceCache::Rec {
               const SkBitmap& result)
         : fKey(genID, width, height, bounds)
         , fBitmap(result)
-    {}
+    {
+#ifdef TRACE_NEW_BITMAP_CACHE_RECS
+        fKey.dump();
+#endif
+    }
 
     const Key& getKey() const override { return fKey; }
     size_t bytesUsed() const override { return sizeof(fKey) + fBitmap.getSize(); }
index b138853e6136eb70bb8eb65c99a9a7739e167cc9..dcc5c676f672e546be136263c50d14b9efdaadf3 100644 (file)
@@ -78,6 +78,9 @@ static bool check_output_bitmap(const SkBitmap& bitmap, uint32_t expectedID) {
     return true;
 }
 
+// Note, this returns a new, mutable, bitmap, with a new genID.
+// If you want the immutable bitmap with the same ID as our cacherator, call tryLockAsBitmap()
+//
 bool SkImageCacherator::generateBitmap(SkBitmap* bitmap) {
     ScopedGenerator generator(this);
     const SkImageInfo& genInfo = generator->getInfo();
@@ -264,7 +267,7 @@ GrTexture* SkImageCacherator::lockAsTexture(GrContext* ctx, SkImageUsageType usa
 
     // 5. Ask the generator to return RGB(A) data, which the GPU can convert
     SkBitmap bitmap;
-    if (this->generateBitmap(&bitmap)) {
+    if (this->tryLockAsBitmap(&bitmap)) {
         return GrRefCachedBitmapTexture(ctx, bitmap, usage);
     }
 #endif