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

Side by Side Diff: tests/DeferredCanvasTest.cpp

Issue 790733003: remove (dumb) canvas::NewRaster, and rename surface::NewRasterPMColor to N32Premul (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase after chrome patches have landed Created 6 years 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
« no previous file with comments | « tests/CanvasTest.cpp ('k') | tests/DrawBitmapRectTest.cpp » ('j') | 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 * 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 14 matching lines...) Expand all
25 25
26 static const int gWidth = 2; 26 static const int gWidth = 2;
27 static const int gHeight = 2; 27 static const int gHeight = 2;
28 28
29 static void create(SkBitmap* bm, SkColor color) { 29 static void create(SkBitmap* bm, SkColor color) {
30 bm->allocN32Pixels(gWidth, gHeight); 30 bm->allocN32Pixels(gWidth, gHeight);
31 bm->eraseColor(color); 31 bm->eraseColor(color);
32 } 32 }
33 33
34 static SkSurface* createSurface(SkColor color) { 34 static SkSurface* createSurface(SkColor color) {
35 SkSurface* surface = SkSurface::NewRasterPMColor(gWidth, gHeight); 35 SkSurface* surface = SkSurface::NewRasterN32Premul(gWidth, gHeight);
36 surface->getCanvas()->clear(color); 36 surface->getCanvas()->clear(color);
37 return surface; 37 return surface;
38 } 38 }
39 39
40 static SkPMColor read_pixel(SkSurface* surface, int x, int y) { 40 static SkPMColor read_pixel(SkSurface* surface, int x, int y) {
41 SkPMColor pixel = 0; 41 SkPMColor pixel = 0;
42 SkBitmap bitmap; 42 SkBitmap bitmap;
43 bitmap.installPixels(SkImageInfo::MakeN32Premul(1, 1), &pixel, 4); 43 bitmap.installPixels(SkImageInfo::MakeN32Premul(1, 1), &pixel, 4);
44 SkCanvas canvas(bitmap); 44 SkCanvas canvas(bitmap);
45 45
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 int fFlushedDrawCommandsCount; 444 int fFlushedDrawCommandsCount;
445 int fSkippedPendingDrawCommandsCount; 445 int fSkippedPendingDrawCommandsCount;
446 446
447 private: 447 private:
448 typedef SkDeferredCanvas::NotificationClient INHERITED; 448 typedef SkDeferredCanvas::NotificationClient INHERITED;
449 }; 449 };
450 450
451 // Verifies that the deferred canvas triggers a flush when its memory 451 // Verifies that the deferred canvas triggers a flush when its memory
452 // limit is exceeded 452 // limit is exceeded
453 static void TestDeferredCanvasMemoryLimit(skiatest::Reporter* reporter) { 453 static void TestDeferredCanvasMemoryLimit(skiatest::Reporter* reporter) {
454 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); 454 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(100, 100));
455 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() )); 455 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
456 456
457 NotificationCounter notificationCounter; 457 NotificationCounter notificationCounter;
458 canvas->setNotificationClient(&notificationCounter); 458 canvas->setNotificationClient(&notificationCounter);
459 459
460 canvas->setMaxRecordingStorage(160000); 460 canvas->setMaxRecordingStorage(160000);
461 461
462 SkBitmap sourceImage; 462 SkBitmap sourceImage;
463 // 100 by 100 image, takes 40,000 bytes in memory 463 // 100 by 100 image, takes 40,000 bytes in memory
464 sourceImage.allocN32Pixels(100, 100); 464 sourceImage.allocN32Pixels(100, 100);
(...skipping 14 matching lines...) Expand all
479 NotificationCounter notificationCounter; 479 NotificationCounter notificationCounter;
480 canvas->setNotificationClient(&notificationCounter); 480 canvas->setNotificationClient(&notificationCounter);
481 481
482 canvas->silentFlush(); // will skip the initial clear that was recorded in c reateSurface 482 canvas->silentFlush(); // will skip the initial clear that was recorded in c reateSurface
483 483
484 REPORTER_ASSERT(reporter, 0 == notificationCounter.fFlushedDrawCommandsCount ); 484 REPORTER_ASSERT(reporter, 0 == notificationCounter.fFlushedDrawCommandsCount );
485 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount); 485 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount);
486 } 486 }
487 487
488 static void TestDeferredCanvasBitmapCaching(skiatest::Reporter* reporter) { 488 static void TestDeferredCanvasBitmapCaching(skiatest::Reporter* reporter) {
489 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); 489 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(100, 100));
490 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() )); 490 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
491 491
492 NotificationCounter notificationCounter; 492 NotificationCounter notificationCounter;
493 canvas->setNotificationClient(&notificationCounter); 493 canvas->setNotificationClient(&notificationCounter);
494 494
495 const int imageCount = 2; 495 const int imageCount = 2;
496 SkBitmap sourceImages[imageCount]; 496 SkBitmap sourceImages[imageCount];
497 for (int i = 0; i < imageCount; i++) { 497 for (int i = 0; i < imageCount; i++) {
498 sourceImages[i].allocN32Pixels(100, 100); 498 sourceImages[i].allocN32Pixels(100, 100);
499 sourceImages[i].eraseColor(SK_ColorGREEN); 499 sourceImages[i].eraseColor(SK_ColorGREEN);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 canvas->drawBitmap(sourceImages[1], 0, 0, NULL); 559 canvas->drawBitmap(sourceImages[1], 0, 0, NULL);
560 sourceImages[1].notifyPixelsChanged(); 560 sourceImages[1].notifyPixelsChanged();
561 canvas->drawBitmap(sourceImages[1], 0, 0, NULL); 561 canvas->drawBitmap(sourceImages[1], 0, 0, NULL);
562 REPORTER_ASSERT(reporter, canvas->storageAllocatedForRecording() > 2*bitmapS ize); 562 REPORTER_ASSERT(reporter, canvas->storageAllocatedForRecording() > 2*bitmapS ize);
563 563
564 // Verify that nothing in this test caused commands to be skipped 564 // Verify that nothing in this test caused commands to be skipped
565 REPORTER_ASSERT(reporter, 0 == notificationCounter.fSkippedPendingDrawComman dsCount); 565 REPORTER_ASSERT(reporter, 0 == notificationCounter.fSkippedPendingDrawComman dsCount);
566 } 566 }
567 567
568 static void TestDeferredCanvasSkip(skiatest::Reporter* reporter) { 568 static void TestDeferredCanvasSkip(skiatest::Reporter* reporter) {
569 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); 569 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(100, 100));
570 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() )); 570 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
571 571
572 NotificationCounter notificationCounter; 572 NotificationCounter notificationCounter;
573 canvas->setNotificationClient(&notificationCounter); 573 canvas->setNotificationClient(&notificationCounter);
574 canvas->clear(0x0); 574 canvas->clear(0x0);
575 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount); 575 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount);
576 REPORTER_ASSERT(reporter, 0 == notificationCounter.fFlushedDrawCommandsCount ); 576 REPORTER_ASSERT(reporter, 0 == notificationCounter.fFlushedDrawCommandsCount );
577 canvas->flush(); 577 canvas->flush();
578 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount); 578 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount);
579 REPORTER_ASSERT(reporter, 1 == notificationCounter.fFlushedDrawCommandsCount ); 579 REPORTER_ASSERT(reporter, 1 == notificationCounter.fFlushedDrawCommandsCount );
580 580
581 } 581 }
582 582
583 static void TestDeferredCanvasBitmapShaderNoLeak(skiatest::Reporter* reporter) { 583 static void TestDeferredCanvasBitmapShaderNoLeak(skiatest::Reporter* reporter) {
584 // This is a regression test for crbug.com/155875 584 // This is a regression test for crbug.com/155875
585 // This test covers a code path that inserts bitmaps into the bitmap heap th rough the 585 // This test covers a code path that inserts bitmaps into the bitmap heap th rough the
586 // flattening of SkBitmapProcShaders. The refcount in the bitmap heap is mai ntained through 586 // flattening of SkBitmapProcShaders. The refcount in the bitmap heap is mai ntained through
587 // the flattening and unflattening of the shader. 587 // the flattening and unflattening of the shader.
588 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); 588 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(100, 100));
589 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() )); 589 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
590 // test will fail if nbIterations is not in sync with 590 // test will fail if nbIterations is not in sync with
591 // BITMAPS_TO_KEEP in SkGPipeWrite.cpp 591 // BITMAPS_TO_KEEP in SkGPipeWrite.cpp
592 const int nbIterations = 5; 592 const int nbIterations = 5;
593 size_t bytesAllocated = 0; 593 size_t bytesAllocated = 0;
594 for(int pass = 0; pass < 2; ++pass) { 594 for(int pass = 0; pass < 2; ++pass) {
595 for(int i = 0; i < nbIterations; ++i) { 595 for(int i = 0; i < nbIterations; ++i) {
596 SkPaint paint; 596 SkPaint paint;
597 SkBitmap paintPattern; 597 SkBitmap paintPattern;
598 paintPattern.allocN32Pixels(10, 10); 598 paintPattern.allocN32Pixels(10, 10);
(...skipping 14 matching lines...) Expand all
613 REPORTER_ASSERT(reporter, newBytesAllocated == bytesAllocated); 613 REPORTER_ASSERT(reporter, newBytesAllocated == bytesAllocated);
614 } 614 }
615 } 615 }
616 } 616 }
617 // All cached resources should be evictable since last canvas call was flush () 617 // All cached resources should be evictable since last canvas call was flush ()
618 canvas->freeMemoryIfPossible(~0U); 618 canvas->freeMemoryIfPossible(~0U);
619 REPORTER_ASSERT(reporter, 0 == canvas->storageAllocatedForRecording()); 619 REPORTER_ASSERT(reporter, 0 == canvas->storageAllocatedForRecording());
620 } 620 }
621 621
622 static void TestDeferredCanvasBitmapSizeThreshold(skiatest::Reporter* reporter) { 622 static void TestDeferredCanvasBitmapSizeThreshold(skiatest::Reporter* reporter) {
623 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); 623 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(100, 100));
624 624
625 SkBitmap sourceImage; 625 SkBitmap sourceImage;
626 // 100 by 100 image, takes 40,000 bytes in memory 626 // 100 by 100 image, takes 40,000 bytes in memory
627 sourceImage.allocN32Pixels(100, 100); 627 sourceImage.allocN32Pixels(100, 100);
628 sourceImage.eraseColor(SK_ColorGREEN); 628 sourceImage.eraseColor(SK_ColorGREEN);
629 629
630 // 1 under : should not store the image 630 // 1 under : should not store the image
631 { 631 {
632 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.g et())); 632 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.g et()));
633 canvas->setBitmapSizeThreshold(39999); 633 canvas->setBitmapSizeThreshold(39999);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 REPORTER_ASSERT(reporter, get_surface_ptr(alternateSurface, useGpu) == p ixels2); 804 REPORTER_ASSERT(reporter, get_surface_ptr(alternateSurface, useGpu) == p ixels2);
805 // Verify that a flushed draw command will trigger a copy on write on al ternateSurface. 805 // Verify that a flushed draw command will trigger a copy on write on al ternateSurface.
806 canvas->clear(SK_ColorWHITE); 806 canvas->clear(SK_ColorWHITE);
807 canvas->flush(); 807 canvas->flush();
808 REPORTER_ASSERT(reporter, get_surface_ptr(surface, useGpu) == pixels1); 808 REPORTER_ASSERT(reporter, get_surface_ptr(surface, useGpu) == pixels1);
809 REPORTER_ASSERT(reporter, get_surface_ptr(alternateSurface, useGpu) != p ixels2); 809 REPORTER_ASSERT(reporter, get_surface_ptr(alternateSurface, useGpu) != p ixels2);
810 } 810 }
811 } 811 }
812 812
813 static void TestDeferredCanvasCreateCompatibleDevice(skiatest::Reporter* reporte r) { 813 static void TestDeferredCanvasCreateCompatibleDevice(skiatest::Reporter* reporte r) {
814 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); 814 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(100, 100));
815 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() )); 815 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
816 816
817 NotificationCounter notificationCounter; 817 NotificationCounter notificationCounter;
818 canvas->setNotificationClient(&notificationCounter); 818 canvas->setNotificationClient(&notificationCounter);
819 819
820 SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10); 820 SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10);
821 SkAutoTUnref<SkSurface> secondarySurface(canvas->newSurface(info)); 821 SkAutoTUnref<SkSurface> secondarySurface(canvas->newSurface(info));
822 822
823 SkRect rect = SkRect::MakeWH(5, 5); 823 SkRect rect = SkRect::MakeWH(5, 5);
824 SkPaint paint; 824 SkPaint paint;
(...skipping 10 matching lines...) Expand all
835 SkRect rect; 835 SkRect rect;
836 rect.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(gWidth), SkIn tToScalar(gHeight)); 836 rect.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(gWidth), SkIn tToScalar(gHeight));
837 SkRect clip; 837 SkRect clip;
838 clip.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(1), SkIntToSc alar(1)); 838 clip.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(1), SkIntToSc alar(1));
839 839
840 SkPaint paint; 840 SkPaint paint;
841 SkISize size = SkISize::Make(gWidth, gHeight); 841 SkISize size = SkISize::Make(gWidth, gHeight);
842 842
843 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF)); 843 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF));
844 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() )); 844 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
845 SkSurface* newSurface = SkSurface::NewRasterPMColor(4, 4); 845 SkSurface* newSurface = SkSurface::NewRasterN32Premul(4, 4);
846 SkAutoTUnref<SkSurface> aur(newSurface); 846 SkAutoTUnref<SkSurface> aur(newSurface);
847 847
848 for (int i = 0; i < 2; ++i) { 848 for (int i = 0; i < 2; ++i) {
849 if (i == 1) { 849 if (i == 1) {
850 canvas->setSurface(newSurface); 850 canvas->setSurface(newSurface);
851 size = SkISize::Make(4, 4); 851 size = SkISize::Make(4, 4);
852 } 852 }
853 853
854 // verify that canvas size is correctly initialized or set 854 // verify that canvas size is correctly initialized or set
855 REPORTER_ASSERT(reporter, size == canvas->getCanvasSize()); 855 REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 TestDeferredCanvasSurface(reporter, NULL); 899 TestDeferredCanvasSurface(reporter, NULL);
900 TestDeferredCanvasSetSurface(reporter, NULL); 900 TestDeferredCanvasSetSurface(reporter, NULL);
901 } 901 }
902 902
903 DEF_GPUTEST(DeferredCanvas_GPU, reporter, factory) { 903 DEF_GPUTEST(DeferredCanvas_GPU, reporter, factory) {
904 if (factory != NULL) { 904 if (factory != NULL) {
905 TestDeferredCanvasSurface(reporter, factory); 905 TestDeferredCanvasSurface(reporter, factory);
906 TestDeferredCanvasSetSurface(reporter, factory); 906 TestDeferredCanvasSetSurface(reporter, factory);
907 } 907 }
908 } 908 }
OLDNEW
« no previous file with comments | « tests/CanvasTest.cpp ('k') | tests/DrawBitmapRectTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698