OLD | NEW |
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 Loading... |
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(¬ificationCounter); | 603 canvas.setNotificationClient(¬ificationCounter); |
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 Loading... |
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) |
OLD | NEW |