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