aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils/SkDeferredCanvas.cpp
diff options
context:
space:
mode:
authorGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-06-01 21:23:07 +0000
committerGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-06-01 21:23:07 +0000
commit4866cc0afb7571309d9fdecb221d919f663054c0 (patch)
tree3696433e73defaa1a3d8ec92da58b9877ba7fc91 /src/utils/SkDeferredCanvas.cpp
parent898e7b568f535fc62a92acda3c22a68cb6e04dcc (diff)
Adding option to serialize mutable bitmaps in SkPicture
Diffstat (limited to 'src/utils/SkDeferredCanvas.cpp')
-rw-r--r--src/utils/SkDeferredCanvas.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
index e965050818..ac2b3cce1a 100644
--- a/src/utils/SkDeferredCanvas.cpp
+++ b/src/utils/SkDeferredCanvas.cpp
@@ -450,7 +450,8 @@ SkDeferredCanvas::DeferredDevice::DeferredDevice(
fImmediateDevice = immediateDevice; // ref counted via fImmediateCanvas
fImmediateCanvas = SkNEW_ARGS(SkCanvas, (fImmediateDevice));
fRecordingCanvas = fPicture.beginRecording(fImmediateDevice->width(),
- fImmediateDevice->height(), 0);
+ fImmediateDevice->height(),
+ SkPicture::kFlattenMutableNonTexturePixelRefs_RecordingFlag);
}
SkDeferredCanvas::DeferredDevice::~DeferredDevice() {
@@ -482,7 +483,8 @@ void SkDeferredCanvas::DeferredDevice::contentsCleared() {
// old one, hence purging deferred draw ops.
fRecordingCanvas = fPicture.beginRecording(
fImmediateDevice->width(),
- fImmediateDevice->height(), 0);
+ fImmediateDevice->height(),
+ SkPicture::kFlattenMutableNonTexturePixelRefs_RecordingFlag);
// Restore pre-purge state
if (!clipRegion.isEmpty()) {
@@ -506,12 +508,16 @@ bool SkDeferredCanvas::DeferredDevice::isFreshFrame() {
}
void SkDeferredCanvas::DeferredDevice::flushPending() {
+ if (!fPicture.hasRecorded()) {
+ return;
+ }
if (fDeviceContext) {
fDeviceContext->prepareForDraw();
}
fPicture.draw(fImmediateCanvas);
fRecordingCanvas = fPicture.beginRecording(fImmediateDevice->width(),
- fImmediateDevice->height(), 0);
+ fImmediateDevice->height(),
+ SkPicture::kFlattenMutableNonTexturePixelRefs_RecordingFlag);
}
void SkDeferredCanvas::DeferredDevice::flush() {
@@ -520,8 +526,8 @@ void SkDeferredCanvas::DeferredDevice::flush() {
}
void SkDeferredCanvas::DeferredDevice::flushIfNeeded(const SkBitmap& bitmap) {
- if (bitmap.isImmutable()) {
- return; // safe to deffer without registering a dependency
+ if (bitmap.isImmutable() || fPicture.willFlattenPixelsOnRecord(bitmap)) {
+ return; // safe to defer.
}
// For now, drawing a writable bitmap triggers a flush