diff options
author | 2012-09-20 22:10:33 +0000 | |
---|---|---|
committer | 2012-09-20 22:10:33 +0000 | |
commit | a38dfb6981379770221b16b5ec036b08f3005973 (patch) | |
tree | 432f8bf27ff8370c7d16a2116e78c249bca4d13b | |
parent | d2002d2a23a0e2341e51212f294c3558a2138c2b (diff) |
Adding hasPendingCommands API method to SkDeferredCanvas
BUG=http://code.google.com/p/chromium/issues/detail?id=146178
Review URL: https://codereview.appspot.com/6550050
git-svn-id: http://skia.googlecode.com/svn/trunk@5632 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | include/utils/SkDeferredCanvas.h | 6 | ||||
-rw-r--r-- | src/utils/SkDeferredCanvas.cpp | 15 |
2 files changed, 18 insertions, 3 deletions
diff --git a/include/utils/SkDeferredCanvas.h b/include/utils/SkDeferredCanvas.h index f3005b322b..f5674d1d45 100644 --- a/include/utils/SkDeferredCanvas.h +++ b/include/utils/SkDeferredCanvas.h @@ -87,6 +87,12 @@ public: bool isFreshFrame() const; /** + * Returns true if the canvas has recorded draw commands that have + * not yet been played back. + */ + bool hasPendingCommands() const; + + /** * Specify the maximum number of bytes to be allocated for the purpose * of recording draw commands to this canvas. The default limit, is * 64MB. diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp index 5beaa5bc92..a854d8cf59 100644 --- a/src/utils/SkDeferredCanvas.cpp +++ b/src/utils/SkDeferredCanvas.cpp @@ -157,7 +157,7 @@ public: virtual void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE; virtual void notifyWritten(size_t bytes) SK_OVERRIDE; void playback(bool silent); - bool hasRecorded() const { return fAllocator.blockCount() != 0; } + bool hasPendingCommands() const { return fAllocator.blockCount() != 0; } size_t storageAllocatedForRecording() const { return fAllocator.totalCapacity(); } private: enum { @@ -237,6 +237,7 @@ public: SkCanvas* immediateCanvas() const {return fImmediateCanvas;} SkDevice* immediateDevice() const {return fImmediateDevice;} bool isFreshFrame(); + bool hasPendingCommands(); size_t storageAllocatedForRecording() const; size_t freeMemoryIfPossible(size_t bytesToFree); void flushPendingCommands(PlaybackMode); @@ -377,7 +378,7 @@ void DeferredDevice::setNotificationClient( } void DeferredDevice::skipPendingCommands() { - if (!fRecordingCanvas->isDrawingToLayer() && fPipeController.hasRecorded()) { + if (!fRecordingCanvas->isDrawingToLayer() && fPipeController.hasPendingCommands()) { fFreshFrame = true; flushPendingCommands(kSilent_PlaybackMode); } @@ -389,8 +390,12 @@ bool DeferredDevice::isFreshFrame() { return ret; } +bool DeferredDevice::hasPendingCommands() { + return fPipeController.hasPendingCommands(); +} + void DeferredDevice::flushPendingCommands(PlaybackMode playbackMode) { - if (!fPipeController.hasRecorded()) { + if (!fPipeController.hasPendingCommands()) { return; } if (playbackMode == kNormal_PlaybackMode && fNotificationClient) { @@ -589,6 +594,10 @@ bool SkDeferredCanvas::isFreshFrame() const { return this->getDeferredDevice()->isFreshFrame(); } +bool SkDeferredCanvas::hasPendingCommands() const { + return this->getDeferredDevice()->hasPendingCommands(); +} + void SkDeferredCanvas::silentFlush() { if (fDeferredDrawing) { this->getDeferredDevice()->flushPendingCommands(kSilent_PlaybackMode); |