Index: src/core/SkPictureRecord.cpp |
diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp |
index 776e337ff4fa198d2ca9eeb95f841ae01563dd1b..4b317589681c9d78232945a6aaf70ae9309c5236 100644 |
--- a/src/core/SkPictureRecord.cpp |
+++ b/src/core/SkPictureRecord.cpp |
@@ -468,36 +468,6 @@ void SkPictureRecord::onDrawPath(const SkPath& path, const SkPaint& paint) { |
this->validate(initialOffset, size); |
} |
-void SkPictureRecord::onDrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, |
- const SkPaint* paint) { |
- // op + paint index + bitmap index + left + top |
- size_t size = 3 * kUInt32Size + 2 * sizeof(SkScalar); |
- size_t initialOffset = this->addDraw(DRAW_BITMAP, &size); |
- this->addPaintPtr(paint); |
- this->addBitmap(bitmap); |
- this->addScalar(left); |
- this->addScalar(top); |
- this->validate(initialOffset, size); |
-} |
- |
-void SkPictureRecord::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst, |
- const SkPaint* paint, SrcRectConstraint constraint) { |
- // id + paint index + bitmap index + bool for 'src' + flags |
- size_t size = 5 * kUInt32Size; |
- if (src) { |
- size += sizeof(*src); // + rect |
- } |
- size += sizeof(dst); // + rect |
- |
- size_t initialOffset = this->addDraw(DRAW_BITMAP_RECT, &size); |
- this->addPaintPtr(paint); |
- this->addBitmap(bitmap); |
- this->addRectPtr(src); // may be null |
- this->addRect(dst); |
- this->addInt(constraint); |
- this->validate(initialOffset, size); |
-} |
- |
void SkPictureRecord::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, |
const SkPaint* paint) { |
// op + paint_index + image_index + x + y |
@@ -559,18 +529,6 @@ void SkPictureRecord::onDrawImageNine(const SkImage* img, const SkIRect& center, |
this->validate(initialOffset, size); |
} |
-void SkPictureRecord::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, |
- const SkRect& dst, const SkPaint* paint) { |
- // op + paint index + bitmap id + center + dst rect |
- size_t size = 3 * kUInt32Size + sizeof(center) + sizeof(dst); |
- size_t initialOffset = this->addDraw(DRAW_BITMAP_NINE, &size); |
- this->addPaintPtr(paint); |
- this->addBitmap(bitmap); |
- this->addIRect(center); |
- this->addRect(dst); |
- this->validate(initialOffset, size); |
-} |
- |
void SkPictureRecord::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, |
const SkPaint& paint) { |
// op + paint index + length + 'length' worth of chars + x + y |
@@ -887,77 +845,6 @@ sk_sp<SkSurface> SkPictureRecord::onNewSurface(const SkImageInfo& info, const Sk |
return nullptr; |
} |
-// If we already have a stored, can we reuse it instead of also storing b? |
-static bool equivalent(const SkBitmap& a, const SkBitmap& b) { |
- if (a.info() != b.info() || a.pixelRefOrigin() != b.pixelRefOrigin()) { |
- // Requiring a.info() == b.info() may be overkill in some cases (alphatype mismatch), |
- // but it sure makes things easier to reason about below. |
- return false; |
- } |
- if (a.pixelRef() == b.pixelRef()) { |
- return true; // Same shape and same pixels -> same bitmap. |
- } |
- |
- // From here down we're going to have to look at the bitmap data, so we require pixelRefs(). |
- if (!a.pixelRef() || !b.pixelRef()) { |
- return false; |
- } |
- |
- // If the bitmaps have encoded data, check first before locking pixels so they don't decode. |
- sk_sp<SkData> encA(a.pixelRef()->refEncodedData()), |
- encB(b.pixelRef()->refEncodedData()); |
- if (encA && encB) { |
- return encA->equals(encB.get()); |
- } else if (encA || encB) { |
- return false; // One has encoded data but the other does not. |
- } |
- |
- // As a last resort, we have to look at the pixels. This will read back textures. |
- SkAutoLockPixels al(a), bl(b); |
- const char* ap = (const char*)a.getPixels(); |
- const char* bp = (const char*)b.getPixels(); |
- if (ap && bp) { |
- // We check row by row; row bytes might differ. |
- SkASSERT(a.info() == b.info()); // We checked this above. |
- SkASSERT(a.info().bytesPerPixel() > 0); // If we have pixelRefs, this better be true. |
- const SkImageInfo info = a.info(); |
- const size_t bytesToCompare = info.width() * info.bytesPerPixel(); |
- for (int row = 0; row < info.height(); row++) { |
- if (0 != memcmp(ap, bp, bytesToCompare)) { |
- return false; |
- } |
- ap += a.rowBytes(); |
- bp += b.rowBytes(); |
- } |
- return true; |
- } |
- return false; // Couldn't get pixels for both bitmaps. |
-} |
- |
-void SkPictureRecord::addBitmap(const SkBitmap& bitmap) { |
- // First see if we already have this bitmap. This deduplication should really |
- // only be important for our tests, where bitmaps tend not to be tagged immutable. |
- // In Chrome (and hopefully Android?) they're typically immutable. |
- for (int i = 0; i < fBitmaps.count(); i++) { |
- if (equivalent(fBitmaps[i], bitmap)) { |
- this->addInt(i); // Unlike the rest, bitmap indices are 0-based. |
- return; |
- } |
- } |
- // Don't have it. We'll add it to our list, making sure it's tagged as immutable. |
- if (bitmap.isImmutable()) { |
- // Shallow copies of bitmaps are cheap, so immutable == fast. |
- fBitmaps.push_back(bitmap); |
- } else { |
- // If you see this block on a memory profile, it's a good opportunity to reduce RAM usage. |
- SkBitmap copy; |
- bitmap.copyTo(©); |
- copy.setImmutable(); |
- fBitmaps.push_back(copy); |
- } |
- this->addInt(fBitmaps.count()-1); // Remember, 0-based. |
-} |
- |
void SkPictureRecord::addImage(const SkImage* image) { |
int index = fImageRefs.find(image); |
if (index >= 0) { |