aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-09-20 22:10:33 +0000
committerGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-09-20 22:10:33 +0000
commita38dfb6981379770221b16b5ec036b08f3005973 (patch)
tree432f8bf27ff8370c7d16a2116e78c249bca4d13b
parentd2002d2a23a0e2341e51212f294c3558a2138c2b (diff)
Adding hasPendingCommands API method to SkDeferredCanvas
-rw-r--r--include/utils/SkDeferredCanvas.h6
-rw-r--r--src/utils/SkDeferredCanvas.cpp15
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);