aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/utils/SkDeferredCanvas.cpp12
-rw-r--r--tests/DeferredCanvasTest.cpp14
2 files changed, 21 insertions, 5 deletions
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
index 2c5e5301c0..4836cd7be4 100644
--- a/src/utils/SkDeferredCanvas.cpp
+++ b/src/utils/SkDeferredCanvas.cpp
@@ -324,9 +324,6 @@ void SkDeferredDevice::skipPendingCommands() {
if (fPipeController.hasPendingCommands()) {
fFreshFrame = true;
flushPendingCommands(kSilent_PlaybackMode);
- if (fNotificationClient) {
- fNotificationClient->skippedPendingDrawCommands();
- }
}
}
}
@@ -363,9 +360,14 @@ void SkDeferredDevice::flushPendingCommands(PlaybackMode playbackMode) {
}
fPipeWriter.flushRecording(true);
fPipeController.playback(kSilent_PlaybackMode == playbackMode);
- if (playbackMode == kNormal_PlaybackMode && fNotificationClient) {
- fNotificationClient->flushedDrawCommands();
+ if (fNotificationClient) {
+ if (playbackMode == kSilent_PlaybackMode) {
+ fNotificationClient->skippedPendingDrawCommands();
+ } else {
+ fNotificationClient->flushedDrawCommands();
+ }
}
+
fPreviousStorageAllocated = storageAllocatedForRecording();
}
diff --git a/tests/DeferredCanvasTest.cpp b/tests/DeferredCanvasTest.cpp
index 0af0c51fed..13758a768d 100644
--- a/tests/DeferredCanvasTest.cpp
+++ b/tests/DeferredCanvasTest.cpp
@@ -496,6 +496,19 @@ static void TestDeferredCanvasMemoryLimit(skiatest::Reporter* reporter) {
REPORTER_ASSERT(reporter, 1 == notificationCounter.fFlushedDrawCommandsCount);
}
+static void TestDeferredCanvasSilentFlush(skiatest::Reporter* reporter) {
+ SkAutoTUnref<SkSurface> surface(createSurface(0));
+ SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get()));
+
+ NotificationCounter notificationCounter;
+ canvas->setNotificationClient(&notificationCounter);
+
+ canvas->silentFlush(); // will skip the initial clear that was recorded in createSurface
+
+ REPORTER_ASSERT(reporter, 0 == notificationCounter.fFlushedDrawCommandsCount);
+ REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawCommandsCount);
+}
+
static void TestDeferredCanvasBitmapCaching(skiatest::Reporter* reporter) {
SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100));
SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get()));
@@ -806,6 +819,7 @@ static void TestDeferredCanvasCreateCompatibleDevice(skiatest::Reporter* reporte
DEF_GPUTEST(DeferredCanvas, reporter, factory) {
TestDeferredCanvasBitmapAccess(reporter);
TestDeferredCanvasFlush(reporter);
+ TestDeferredCanvasSilentFlush(reporter);
TestDeferredCanvasFreshFrame(reporter);
TestDeferredCanvasMemoryLimit(reporter);
TestDeferredCanvasBitmapCaching(reporter);