Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(349)

Side by Side Diff: tests/DeferredCanvasTest.cpp

Issue 545813002: Picture Recording: fix the performance bottleneck in SkDeferredCanvas::isFullFrame (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: use interface in SkDeferredCanvas Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "../src/image/SkImagePriv.h" 8 #include "../src/image/SkImagePriv.h"
9 #include "../src/image/SkSurface_Base.h" 9 #include "../src/image/SkSurface_Base.h"
10 #include "SkBitmap.h" 10 #include "SkBitmap.h"
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 canvas->restore(); 284 canvas->restore();
285 REPORTER_ASSERT(reporter, !canvas->isFreshFrame()); 285 REPORTER_ASSERT(reporter, !canvas->isFreshFrame());
286 286
287 // Verify that a clear with clipping triggers a fresh frame 287 // Verify that a clear with clipping triggers a fresh frame
288 // (clear is not affected by clipping) 288 // (clear is not affected by clipping)
289 canvas->save(); 289 canvas->save();
290 canvas->clipRect(partialRect, SkRegion::kIntersect_Op, false); 290 canvas->clipRect(partialRect, SkRegion::kIntersect_Op, false);
291 canvas->clear(0x00000000); 291 canvas->clear(0x00000000);
292 canvas->restore(); 292 canvas->restore();
293 REPORTER_ASSERT(reporter, canvas->isFreshFrame()); 293 REPORTER_ASSERT(reporter, canvas->isFreshFrame());
294 }
294 295
296 static void TestDeferredCanvasFreshFrameWithDrawOps(skiatest::Reporter* reporter ) {
297 SkRect fullRect;
298 fullRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(gWidth),
299 SkIntToScalar(gHeight));
300 SkRect partialRect;
301 partialRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0),
302 SkIntToScalar(1), SkIntToScalar(1));
303
304 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF));
305 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
306
307 // We have verified that the frame is initially fresh, So It will get
308 // the canvasSize, and reuse this canvasSize if the frame is not fresh.
295 // Verify that full frame rects with different forms of opaque paint 309 // Verify that full frame rects with different forms of opaque paint
296 // trigger frames to be marked as fresh 310 // trigger frames to be marked as fresh
297 { 311 {
298 SkPaint paint; 312 SkPaint paint;
299 paint.setStyle(SkPaint::kFill_Style); 313 paint.setStyle(SkPaint::kFill_Style);
300 paint.setAlpha(255); 314 paint.setAlpha(255);
301 canvas->drawRect(fullRect, paint); 315 canvas->drawRect(fullRect, paint);
302 REPORTER_ASSERT(reporter, canvas->isFreshFrame()); 316 REPORTER_ASSERT(reporter, canvas->isFreshFrame());
303 } 317 }
304 { 318 {
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 0); 850 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 0);
837 // 2) Verify that original canvas is usable and still reports to the notific ation client. 851 // 2) Verify that original canvas is usable and still reports to the notific ation client.
838 canvas->drawRect(rect, paint); 852 canvas->drawRect(rect, paint);
839 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 1); 853 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 1);
840 } 854 }
841 855
842 DEF_TEST(DeferredCanvas_CPU, reporter) { 856 DEF_TEST(DeferredCanvas_CPU, reporter) {
843 TestDeferredCanvasFlush(reporter); 857 TestDeferredCanvasFlush(reporter);
844 TestDeferredCanvasSilentFlush(reporter); 858 TestDeferredCanvasSilentFlush(reporter);
845 TestDeferredCanvasFreshFrame(reporter); 859 TestDeferredCanvasFreshFrame(reporter);
860 TestDeferredCanvasFreshFrameWithDrawOps(reporter);
846 TestDeferredCanvasMemoryLimit(reporter); 861 TestDeferredCanvasMemoryLimit(reporter);
847 TestDeferredCanvasBitmapCaching(reporter); 862 TestDeferredCanvasBitmapCaching(reporter);
848 TestDeferredCanvasSkip(reporter); 863 TestDeferredCanvasSkip(reporter);
849 TestDeferredCanvasBitmapShaderNoLeak(reporter); 864 TestDeferredCanvasBitmapShaderNoLeak(reporter);
850 TestDeferredCanvasBitmapSizeThreshold(reporter); 865 TestDeferredCanvasBitmapSizeThreshold(reporter);
851 TestDeferredCanvasCreateCompatibleDevice(reporter); 866 TestDeferredCanvasCreateCompatibleDevice(reporter);
852 TestDeferredCanvasWritePixelsToSurface(reporter); 867 TestDeferredCanvasWritePixelsToSurface(reporter);
853 TestDeferredCanvasSurface(reporter, NULL); 868 TestDeferredCanvasSurface(reporter, NULL);
854 TestDeferredCanvasSetSurface(reporter, NULL); 869 TestDeferredCanvasSetSurface(reporter, NULL);
855 } 870 }
856 871
857 DEF_GPUTEST(DeferredCanvas_GPU, reporter, factory) { 872 DEF_GPUTEST(DeferredCanvas_GPU, reporter, factory) {
858 if (factory != NULL) { 873 if (factory != NULL) {
859 TestDeferredCanvasSurface(reporter, factory); 874 TestDeferredCanvasSurface(reporter, factory);
860 TestDeferredCanvasSetSurface(reporter, factory); 875 TestDeferredCanvasSetSurface(reporter, factory);
861 } 876 }
862 } 877 }
OLDNEW
« src/utils/SkDeferredCanvas.cpp ('K') | « src/utils/SkDeferredCanvas.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698