diff options
author | 2012-06-01 21:23:07 +0000 | |
---|---|---|
committer | 2012-06-01 21:23:07 +0000 | |
commit | 4866cc0afb7571309d9fdecb221d919f663054c0 (patch) | |
tree | 3696433e73defaa1a3d8ec92da58b9877ba7fc91 /src/utils/SkDeferredCanvas.cpp | |
parent | 898e7b568f535fc62a92acda3c22a68cb6e04dcc (diff) |
Adding option to serialize mutable bitmaps in SkPicture
BUG=http://code.google.com/p/chromium/issues/detail?id=115654
REVIEW=http://codereview.appspot.com/6221066/
git-svn-id: http://skia.googlecode.com/svn/trunk@4130 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/utils/SkDeferredCanvas.cpp')
-rw-r--r-- | src/utils/SkDeferredCanvas.cpp | 16 |
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 |