Index: tests/DeferredCanvasTest.cpp |
diff --git a/tests/DeferredCanvasTest.cpp b/tests/DeferredCanvasTest.cpp |
index 6756f864674f258b9eb88f4a21bd52433b4e96b3..e83bc8106bbf74385e9d131713480155d9b82b0f 100644 |
--- a/tests/DeferredCanvasTest.cpp |
+++ b/tests/DeferredCanvasTest.cpp |
@@ -70,18 +70,25 @@ public: |
void onCopyOnWrite(ContentChangeMode mode) SK_OVERRIDE { |
if (mode == SkSurface::kDiscard_ContentChangeMode) { |
- fDiscardCount++; |
+ fCOWDiscardCount++; |
} else { |
- fRetainCount++; |
+ fCOWRetainCount++; |
} |
} |
+ void onDiscard() SK_OVERRIDE { |
+ fDiscardCount++; |
+ } |
+ |
void clearCounts() { |
+ fCOWDiscardCount = 0; |
+ fCOWRetainCount = 0; |
fDiscardCount = 0; |
- fRetainCount = 0; |
} |
- int fDiscardCount, fRetainCount; |
+ int fCOWDiscardCount; |
+ int fCOWRetainCount; |
+ int fDiscardCount; |
SkBitmap fBitmap; |
}; |
@@ -95,146 +102,173 @@ static void TestDeferredCanvasWritePixelsToSurface(skiatest::Reporter* reporter) |
// Tests below depend on this bitmap being recognized as opaque |
// Preliminary sanity check: no copy on write if no active snapshot |
+ // Discard notification happens on SkSurface::onDiscard, since no |
+ // active snapshot. |
surface->clearCounts(); |
canvas->clear(SK_ColorWHITE); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->flush(); |
- REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
+ REPORTER_ASSERT(reporter, 1 == surface->fDiscardCount); |
// Case 1: Discard notification happens upon flushing |
// with an Image attached. |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image1(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->clear(SK_ColorWHITE); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->flush(); |
- REPORTER_ASSERT(reporter, 1 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
+ REPORTER_ASSERT(reporter, 1 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
// Case 2: Opaque writePixels |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image2(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
// Case 3: writePixels that partially covers the canvas |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image3(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
// Case 4: unpremultiplied opaque writePixels that entirely |
// covers the canvas |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image4(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->writePixels(srcBitmap, 0, 0); |
- REPORTER_ASSERT(reporter, 1 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
+ REPORTER_ASSERT(reporter, 1 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
surface->clearCounts(); |
canvas->flush(); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
// Case 5: unpremultiplied opaque writePixels that partially |
// covers the canvas |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image5(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->writePixels(srcBitmap, 5, 0); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 1 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 1 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->flush(); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
// Case 6: unpremultiplied opaque writePixels that entirely |
// covers the canvas, preceded by clear |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image6(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->clear(SK_ColorWHITE); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->writePixels(srcBitmap, 0, 0); |
- REPORTER_ASSERT(reporter, 1 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
+ REPORTER_ASSERT(reporter, 1 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
surface->clearCounts(); |
canvas->flush(); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
// Case 7: unpremultiplied opaque writePixels that partially |
// covers the canvas, preceeded by a clear |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image7(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->clear(SK_ColorWHITE); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->writePixels(srcBitmap, 5, 0); |
- REPORTER_ASSERT(reporter, 1 == surface->fDiscardCount); // because of the clear |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
+ REPORTER_ASSERT(reporter, 1 == surface->fCOWDiscardCount); // because of the clear |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
surface->clearCounts(); |
canvas->flush(); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
// Case 8: unpremultiplied opaque writePixels that partially |
// covers the canvas, preceeded by a drawREct that partially |
// covers the canvas |
surface->clearCounts(); |
SkAutoTUnref<SkImage> image8(canvas->newImageSnapshot()); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
SkPaint paint; |
canvas->drawRect(SkRect::MakeLTRB(0, 0, 5, 5), paint); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->writePixels(srcBitmap, 5, 0); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 1 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 1 == surface->fRetainCount); |
surface->clearCounts(); |
canvas->flush(); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWDiscardCount); |
+ REPORTER_ASSERT(reporter, 0 == surface->fCOWRetainCount); |
REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); |
- REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); |
} |
static void TestDeferredCanvasFlush(skiatest::Reporter* reporter) { |