Index: src/core/SkPictureRecord.cpp |
diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp |
index 28561c7e3f484f15447eaea6f7267720e9e9cafa..2b56b74dad844a6daa1ef647b1ece40bdd0f2705 100644 |
--- a/src/core/SkPictureRecord.cpp |
+++ b/src/core/SkPictureRecord.cpp |
@@ -587,7 +587,7 @@ void SkPictureRecord::onDrawImageRect(const SkImage* image, const SkRect* src, c |
size += sizeof(*src); // + rect |
} |
size += sizeof(dst); // + rect |
- |
+ |
size_t initialOffset = this->addDraw(DRAW_IMAGE_RECT, &size); |
SkASSERT(initialOffset+get_paint_offset(DRAW_IMAGE_RECT, size) |
== fWriter.bytesWritten()); |
@@ -603,7 +603,7 @@ void SkPictureRecord::onDrawImageNine(const SkImage* img, const SkIRect& center, |
const SkPaint* paint) { |
// id + paint_index + image_index + center + dst |
size_t size = 3 * kUInt32Size + sizeof(SkIRect) + sizeof(SkRect); |
- |
+ |
size_t initialOffset = this->addDraw(DRAW_IMAGE_NINE, &size); |
SkASSERT(initialOffset+get_paint_offset(DRAW_IMAGE_NINE, size) == fWriter.bytesWritten()); |
this->addPaintPtr(paint); |
@@ -863,7 +863,7 @@ void SkPictureRecord::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], |
flags |= DRAW_ATLAS_HAS_CULL; |
size += sizeof(SkRect); |
} |
- |
+ |
size_t initialOffset = this->addDraw(DRAW_ATLAS, &size); |
SkASSERT(initialOffset+get_paint_offset(DRAW_ATLAS, size) == fWriter.bytesWritten()); |
this->addPaintPtr(paint); |
@@ -987,8 +987,12 @@ void SkPictureRecord::addPaintPtr(const SkPaint* paint) { |
} |
int SkPictureRecord::addPathToHeap(const SkPath& path) { |
- fPaths.push_back(path); |
- return fPaths.count(); |
+ if (int* n = fPaths.find(path)) { |
+ return *n; |
+ } |
+ int n = fPaths.count() + 1; // 0 is reserved for null / error. |
+ fPaths.set(path, n); |
+ return n; |
} |
void SkPictureRecord::addPath(const SkPath& path) { |