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

Side by Side Diff: tests/DeferredCanvasTest.cpp

Issue 15896005: Adding setSurface public API method to SkDeferredCanvas (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « src/utils/SkDeferredCanvas.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 #include "Test.h" 8 #include "Test.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkBitmapProcShader.h" 10 #include "SkBitmapProcShader.h"
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 // SkImage. 541 // SkImage.
542 canvas.clear(SK_ColorWHITE); 542 canvas.clear(SK_ColorWHITE);
543 canvas.flush(); 543 canvas.flush();
544 PixelPtr pixels4 = getSurfacePixelPtr(surface, useGpu); 544 PixelPtr pixels4 = getSurfacePixelPtr(surface, useGpu);
545 canvas.drawPaint(paint); 545 canvas.drawPaint(paint);
546 canvas.flush(); 546 canvas.flush();
547 PixelPtr pixels5 = getSurfacePixelPtr(surface, useGpu); 547 PixelPtr pixels5 = getSurfacePixelPtr(surface, useGpu);
548 REPORTER_ASSERT(reporter, pixels4 == pixels5); 548 REPORTER_ASSERT(reporter, pixels4 == pixels5);
549 } 549 }
550 550
551 static void TestDeferredCanvasSetSurface(skiatest::Reporter* reporter, GrContext Factory* factory) {
552 SkImage::Info imageSpec = {
553 10, // width
554 10, // height
555 SkImage::kPMColor_ColorType,
556 SkImage::kPremul_AlphaType
557 };
558 SkSurface* surface;
559 SkSurface* alternateSurface;
560 bool useGpu = NULL != factory;
561 #if SK_SUPPORT_GPU
562 if (useGpu) {
563 GrContext* context = factory->get(GrContextFactory::kNative_GLContextTyp e);
564 surface = SkSurface::NewRenderTarget(context, imageSpec);
565 alternateSurface = SkSurface::NewRenderTarget(context, imageSpec);
566 } else {
567 surface = SkSurface::NewRaster(imageSpec);
568 alternateSurface = SkSurface::NewRaster(imageSpec);
569 }
570 #else
571 SkASSERT(!useGpu);
572 surface = SkSurface::NewRaster(imageSpec);
573 alternateSurface = SkSurface::NewRaster(imageSpec);
574 #endif
575 SkASSERT(NULL != surface);
576 SkASSERT(NULL != alternateSurface);
577 SkAutoTUnref<SkSurface> aur1(surface);
578 SkAutoTUnref<SkSurface> aur2(alternateSurface);
579 PixelPtr pixels1 = getSurfacePixelPtr(surface, useGpu);
580 PixelPtr pixels2 = getSurfacePixelPtr(alternateSurface, useGpu);
581 SkDeferredCanvas canvas(surface);
582 SkAutoTUnref<SkImage> image1(canvas.newImageSnapshot());
583 canvas.setSurface(alternateSurface);
584 SkAutoTUnref<SkImage> image2(canvas.newImageSnapshot());
585 REPORTER_ASSERT(reporter, image1->uniqueID() != image2->uniqueID());
586 // Verify that none of the above operations triggered a surface copy on writ e.
587 REPORTER_ASSERT(reporter, getSurfacePixelPtr(surface, useGpu) == pixels1);
588 REPORTER_ASSERT(reporter, getSurfacePixelPtr(alternateSurface, useGpu) == pi xels2);
589 // Verify that a flushed draw command will trigger a copy on write on altern ateSurface.
590 canvas.clear(SK_ColorWHITE);
591 canvas.flush();
592 REPORTER_ASSERT(reporter, getSurfacePixelPtr(surface, useGpu) == pixels1);
593 REPORTER_ASSERT(reporter, getSurfacePixelPtr(alternateSurface, useGpu) != pi xels2);
594 }
595
551 static void TestDeferredCanvasCreateCompatibleDevice(skiatest::Reporter* reporte r) { 596 static void TestDeferredCanvasCreateCompatibleDevice(skiatest::Reporter* reporte r) {
552 SkBitmap store; 597 SkBitmap store;
553 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); 598 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
554 store.allocPixels(); 599 store.allocPixels();
555 SkDevice device(store); 600 SkDevice device(store);
556 NotificationCounter notificationCounter; 601 NotificationCounter notificationCounter;
557 SkDeferredCanvas canvas(&device); 602 SkDeferredCanvas canvas(&device);
558 canvas.setNotificationClient(&notificationCounter); 603 canvas.setNotificationClient(&notificationCounter);
559 SkAutoTUnref<SkDevice> secondaryDevice(canvas.createCompatibleDevice( 604 SkAutoTUnref<SkDevice> secondaryDevice(canvas.createCompatibleDevice(
560 SkBitmap::kARGB_8888_Config, 10, 10, device.isOpaque())); 605 SkBitmap::kARGB_8888_Config, 10, 10, device.isOpaque()));
(...skipping 13 matching lines...) Expand all
574 TestDeferredCanvasBitmapAccess(reporter); 619 TestDeferredCanvasBitmapAccess(reporter);
575 TestDeferredCanvasFlush(reporter); 620 TestDeferredCanvasFlush(reporter);
576 TestDeferredCanvasFreshFrame(reporter); 621 TestDeferredCanvasFreshFrame(reporter);
577 TestDeferredCanvasMemoryLimit(reporter); 622 TestDeferredCanvasMemoryLimit(reporter);
578 TestDeferredCanvasBitmapCaching(reporter); 623 TestDeferredCanvasBitmapCaching(reporter);
579 TestDeferredCanvasSkip(reporter); 624 TestDeferredCanvasSkip(reporter);
580 TestDeferredCanvasBitmapShaderNoLeak(reporter); 625 TestDeferredCanvasBitmapShaderNoLeak(reporter);
581 TestDeferredCanvasBitmapSizeThreshold(reporter); 626 TestDeferredCanvasBitmapSizeThreshold(reporter);
582 TestDeferredCanvasCreateCompatibleDevice(reporter); 627 TestDeferredCanvasCreateCompatibleDevice(reporter);
583 TestDeferredCanvasSurface(reporter, NULL); 628 TestDeferredCanvasSurface(reporter, NULL);
629 TestDeferredCanvasSetSurface(reporter, NULL);
584 if (NULL != factory) { 630 if (NULL != factory) {
585 TestDeferredCanvasSurface(reporter, factory); 631 TestDeferredCanvasSurface(reporter, factory);
632 TestDeferredCanvasSetSurface(reporter, factory);
586 } 633 }
587 } 634 }
588 635
589 #include "TestClassDef.h" 636 #include "TestClassDef.h"
590 DEFINE_GPUTESTCLASS("DeferredCanvas", TestDeferredCanvasClass, TestDeferredCanva s) 637 DEFINE_GPUTESTCLASS("DeferredCanvas", TestDeferredCanvasClass, TestDeferredCanva s)
OLDNEW
« no previous file with comments | « src/utils/SkDeferredCanvas.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698