aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2014-07-07 16:17:36 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-07-07 16:17:36 -0700
commiteeb1f15891ee9f96f2c5d6e1c3d5a656208f3760 (patch)
tree4bd35f12a66b1d0385fbccdb78694963f9c37576
parentbeaf62da360acf16a92ccc12e37e9e053becaeee (diff)
Turn on threaded DMQuiltTask drawing for old-format SkPictures too.
This required the same SkBitmap copying that we added today to SkRecord. BUG=skia: R=reed@android.com, robertphillips@google.com, mtklein@google.com, reed@google.com Author: mtklein@chromium.org Review URL: https://codereview.chromium.org/375703002
-rw-r--r--dm/DMQuiltTask.cpp2
-rw-r--r--src/core/SkPicturePlayback.cpp15
2 files changed, 11 insertions, 6 deletions
diff --git a/dm/DMQuiltTask.cpp b/dm/DMQuiltTask.cpp
index 960ca86747..b0f36c0870 100644
--- a/dm/DMQuiltTask.cpp
+++ b/dm/DMQuiltTask.cpp
@@ -8,7 +8,7 @@
DEFINE_bool(quilt, true, "If true, draw into a quilt of small tiles and compare.");
DEFINE_int32(quiltTile, 256, "Dimension of (square) quilt tile.");
-DEFINE_bool(quiltThreaded, false, "If true, draw quilt tiles with multiple threads.");
+DEFINE_bool(quiltThreaded, true, "If true, draw quilt tiles with multiple threads.");
static const char* kSuffixes[] = { "quilt", "quilt_skr" };
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
index eccd1ae0c8..a6e3f0776d 100644
--- a/src/core/SkPicturePlayback.cpp
+++ b/src/core/SkPicturePlayback.cpp
@@ -115,6 +115,11 @@ void get_text(SkReader32* reader, TextContainer* text) {
text->fText = (const char*)reader->skip(length);
}
+// FIXME: SkBitmaps are stateful, so we need to copy them to play back in multiple threads.
+static SkBitmap shallow_copy(const SkBitmap& bitmap) {
+ return bitmap;
+}
+
void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) {
SkAutoResetOpID aroi(this);
SkASSERT(0 == fCurOffset);
@@ -389,13 +394,13 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
}
case DRAW_BITMAP: {
const SkPaint* paint = fPictureData->getPaint(reader);
- const SkBitmap& bitmap = fPictureData->getBitmap(reader);
+ const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader));
const SkPoint& loc = reader.skipT<SkPoint>();
canvas->drawBitmap(bitmap, loc.fX, loc.fY, paint);
} break;
case DRAW_BITMAP_RECT_TO_RECT: {
const SkPaint* paint = fPictureData->getPaint(reader);
- const SkBitmap& bitmap = fPictureData->getBitmap(reader);
+ const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader));
const SkRect* src = get_rect_ptr(reader); // may be null
const SkRect& dst = reader.skipT<SkRect>(); // required
SkCanvas::DrawBitmapRectFlags flags;
@@ -404,14 +409,14 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
} break;
case DRAW_BITMAP_MATRIX: {
const SkPaint* paint = fPictureData->getPaint(reader);
- const SkBitmap& bitmap = fPictureData->getBitmap(reader);
+ const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader));
SkMatrix matrix;
reader.readMatrix(&matrix);
canvas->drawBitmapMatrix(bitmap, matrix, paint);
} break;
case DRAW_BITMAP_NINE: {
const SkPaint* paint = fPictureData->getPaint(reader);
- const SkBitmap& bitmap = fPictureData->getBitmap(reader);
+ const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader));
const SkIRect& src = reader.skipT<SkIRect>();
const SkRect& dst = reader.skipT<SkRect>();
canvas->drawBitmapNine(bitmap, src, dst, paint);
@@ -514,7 +519,7 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
} break;
case DRAW_SPRITE: {
const SkPaint* paint = fPictureData->getPaint(reader);
- const SkBitmap& bitmap = fPictureData->getBitmap(reader);
+ const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader));
int left = reader.readInt();
int top = reader.readInt();
canvas->drawSprite(bitmap, left, top, paint);