Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Unified Diff: src/core/SkPictureRecord.cpp

Issue 2230973002: remove support for serializing bitmaps in old format (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkPictureRecord.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
- 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) {
« no previous file with comments | « src/core/SkPictureRecord.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698