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
diff --git a/include/utils/SkDeferredCanvas.h b/include/utils/SkDeferredCanvas.h
index f3005b3..f5674d1 100644
--- a/include/utils/SkDeferredCanvas.h
+++ b/include/utils/SkDeferredCanvas.h
@@ -87,6 +87,12 @@
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 5beaa5b..a854d8c 100644
--- a/src/utils/SkDeferredCanvas.cpp
+++ b/src/utils/SkDeferredCanvas.cpp
@@ -157,7 +157,7 @@
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 @@
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::skipPendingCommands() {
- if (!fRecordingCanvas->isDrawingToLayer() && fPipeController.hasRecorded()) {
+ if (!fRecordingCanvas->isDrawingToLayer() && fPipeController.hasPendingCommands()) {
fFreshFrame = true;
flushPendingCommands(kSilent_PlaybackMode);
}
@@ -389,8 +390,12 @@
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 @@
return this->getDeferredDevice()->isFreshFrame();
}
+bool SkDeferredCanvas::hasPendingCommands() const {
+ return this->getDeferredDevice()->hasPendingCommands();
+}
+
void SkDeferredCanvas::silentFlush() {
if (fDeferredDrawing) {
this->getDeferredDevice()->flushPendingCommands(kSilent_PlaybackMode);