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

Side by Side Diff: tests/DeferredCanvasTest.cpp

Issue 136753016: remove (unused by chrome) SkDeferredCanvas(device) factory signature (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 10 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 | « tests/CanvasTest.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 * 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"
11 #include "SkBitmapDevice.h" 11 #include "SkBitmapDevice.h"
12 #include "SkBitmapProcShader.h" 12 #include "SkBitmapProcShader.h"
13 #include "SkDeferredCanvas.h" 13 #include "SkDeferredCanvas.h"
14 #include "SkGradientShader.h" 14 #include "SkGradientShader.h"
15 #include "SkShader.h" 15 #include "SkShader.h"
16 #include "SkSurface.h"
16 #include "Test.h" 17 #include "Test.h"
17 #if SK_SUPPORT_GPU 18 #if SK_SUPPORT_GPU
18 #include "GrContextFactory.h" 19 #include "GrContextFactory.h"
19 #else 20 #else
20 class GrContextFactory; 21 class GrContextFactory;
21 #endif 22 #endif
22 23
23 static const int gWidth = 2; 24 static const int gWidth = 2;
24 static const int gHeight = 2; 25 static const int gHeight = 2;
25 26
26 static void create(SkBitmap* bm, SkBitmap::Config config, SkColor color) { 27 static void create(SkBitmap* bm, SkBitmap::Config config, SkColor color) {
27 bm->setConfig(config, gWidth, gHeight); 28 bm->setConfig(config, gWidth, gHeight);
28 bm->allocPixels(); 29 bm->allocPixels();
29 bm->eraseColor(color); 30 bm->eraseColor(color);
30 } 31 }
31 32
33 static SkSurface* createSurface(SkColor color) {
34 SkSurface* surface = SkSurface::NewRasterPMColor(gWidth, gHeight);
35 surface->getCanvas()->clear(color);
36 return surface;
37 }
38
39 static SkPMColor read_pixel(SkSurface* surface, int x, int y) {
40 SkPMColor pixel = 0;
41 SkBitmap bitmap;
42 bitmap.installPixels(SkImageInfo::MakeN32Premul(1, 1), &pixel, 4, NULL, NULL );
43 SkCanvas canvas(bitmap);
44
45 SkPaint paint;
46 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
47 surface->draw(&canvas, -x, -y, &paint);
48 return pixel;
49 }
50
32 static void TestDeferredCanvasBitmapAccess(skiatest::Reporter* reporter) { 51 static void TestDeferredCanvasBitmapAccess(skiatest::Reporter* reporter) {
33 SkBitmap store; 52 SkBitmap store;
34 53
35 create(&store, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); 54 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF));
36 SkBitmapDevice device(store); 55 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
37 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device)); 56
38
39 canvas->clear(0x00000000); 57 canvas->clear(0x00000000);
40 58
41 SkAutoLockPixels alp(store); 59 // verify that the clear() was deferred
42 REPORTER_ASSERT(reporter, store.getColor(0,0) == 0xFFFFFFFF); //verify that clear was deferred 60 REPORTER_ASSERT(reporter, 0xFFFFFFFF == read_pixel(surface, 0, 0));
61
43 SkBitmap accessed = canvas->getDevice()->accessBitmap(false); 62 SkBitmap accessed = canvas->getDevice()->accessBitmap(false);
44 REPORTER_ASSERT(reporter, store.getColor(0,0) == 0x00000000); //verify that clear was executed 63
45 REPORTER_ASSERT(reporter, accessed.pixelRef() == store.pixelRef()); 64 // verify that clear was executed
65 REPORTER_ASSERT(reporter, 0 == read_pixel(surface, 0, 0));
46 } 66 }
47 67
48 class MockSurface : public SkSurface_Base { 68 class MockSurface : public SkSurface_Base {
49 public: 69 public:
50 MockSurface(int width, int height) : SkSurface_Base(width, height) { 70 MockSurface(int width, int height) : SkSurface_Base(width, height) {
51 clearCounts(); 71 clearCounts();
52 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); 72 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
53 fBitmap.allocPixels(); 73 fBitmap.allocPixels();
54 } 74 }
55 75
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); 269 REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount);
250 REPORTER_ASSERT(reporter, 1 == surface->fRetainCount); 270 REPORTER_ASSERT(reporter, 1 == surface->fRetainCount);
251 271
252 surface->clearCounts(); 272 surface->clearCounts();
253 canvas->flush(); 273 canvas->flush();
254 REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount); 274 REPORTER_ASSERT(reporter, 0 == surface->fDiscardCount);
255 REPORTER_ASSERT(reporter, 0 == surface->fRetainCount); 275 REPORTER_ASSERT(reporter, 0 == surface->fRetainCount);
256 } 276 }
257 277
258 static void TestDeferredCanvasFlush(skiatest::Reporter* reporter) { 278 static void TestDeferredCanvasFlush(skiatest::Reporter* reporter) {
259 SkBitmap store; 279 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF));
260 280 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
261 create(&store, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF);
262 SkBitmapDevice device(store);
263 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device));
264 281
265 canvas->clear(0x00000000); 282 canvas->clear(0x00000000);
266 283
267 SkAutoLockPixels alp(store); 284 // verify that clear was deferred
268 REPORTER_ASSERT(reporter, store.getColor(0,0) == 0xFFFFFFFF); //verify that clear was deferred 285 REPORTER_ASSERT(reporter, 0xFFFFFFFF == read_pixel(surface, 0, 0));
286
269 canvas->flush(); 287 canvas->flush();
270 REPORTER_ASSERT(reporter, store.getColor(0,0) == 0x00000000); //verify that clear was executed 288
289 // verify that clear was executed
290 REPORTER_ASSERT(reporter, 0 == read_pixel(surface, 0, 0));
271 } 291 }
272 292
273 static void TestDeferredCanvasFreshFrame(skiatest::Reporter* reporter) { 293 static void TestDeferredCanvasFreshFrame(skiatest::Reporter* reporter) {
274 SkBitmap store;
275 SkRect fullRect; 294 SkRect fullRect;
276 fullRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(gWidth), 295 fullRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(gWidth),
277 SkIntToScalar(gHeight)); 296 SkIntToScalar(gHeight));
278 SkRect partialRect; 297 SkRect partialRect;
279 partialRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0), 298 partialRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0),
280 SkIntToScalar(1), SkIntToScalar(1)); 299 SkIntToScalar(1), SkIntToScalar(1));
281 create(&store, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); 300
282 SkBitmapDevice device(store); 301 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF));
283 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device)); 302 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
284 303
285 // verify that frame is intially fresh 304 // verify that frame is intially fresh
286 REPORTER_ASSERT(reporter, canvas->isFreshFrame()); 305 REPORTER_ASSERT(reporter, canvas->isFreshFrame());
287 // no clearing op since last call to isFreshFrame -> not fresh 306 // no clearing op since last call to isFreshFrame -> not fresh
288 REPORTER_ASSERT(reporter, !canvas->isFreshFrame()); 307 REPORTER_ASSERT(reporter, !canvas->isFreshFrame());
289 308
290 // Verify that clear triggers a fresh frame 309 // Verify that clear triggers a fresh frame
291 canvas->clear(0x00000000); 310 canvas->clear(0x00000000);
292 REPORTER_ASSERT(reporter, canvas->isFreshFrame()); 311 REPORTER_ASSERT(reporter, canvas->isFreshFrame());
293 312
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 fDrawBitmapCallCount = 0; 458 fDrawBitmapCallCount = 0;
440 } 459 }
441 virtual void drawBitmap(const SkDraw&, const SkBitmap&, 460 virtual void drawBitmap(const SkDraw&, const SkBitmap&,
442 const SkMatrix&, const SkPaint&) SK_OVERRIDE { 461 const SkMatrix&, const SkPaint&) SK_OVERRIDE {
443 fDrawBitmapCallCount++; 462 fDrawBitmapCallCount++;
444 } 463 }
445 464
446 int fDrawBitmapCallCount; 465 int fDrawBitmapCallCount;
447 }; 466 };
448 467
449 // Verifies that the deferred canvas triggers a flush when its memory
450 // limit is exceeded
451 static void TestDeferredCanvasMemoryLimit(skiatest::Reporter* reporter) {
452 SkBitmap store;
453 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
454 store.allocPixels();
455 MockDevice mockDevice(store);
456 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&mockDevice)) ;
457 canvas->setMaxRecordingStorage(160000);
458
459 SkBitmap sourceImage;
460 // 100 by 100 image, takes 40,000 bytes in memory
461 sourceImage.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
462 sourceImage.allocPixels();
463
464 for (int i = 0; i < 5; i++) {
465 sourceImage.notifyPixelsChanged(); // to force re-serialization
466 canvas->drawBitmap(sourceImage, 0, 0, NULL);
467 }
468
469 REPORTER_ASSERT(reporter, mockDevice.fDrawBitmapCallCount == 4);
470 }
471
472 class NotificationCounter : public SkDeferredCanvas::NotificationClient { 468 class NotificationCounter : public SkDeferredCanvas::NotificationClient {
473 public: 469 public:
474 NotificationCounter() { 470 NotificationCounter() {
475 fPrepareForDrawCount = fStorageAllocatedChangedCount = 471 fPrepareForDrawCount = fStorageAllocatedChangedCount =
476 fFlushedDrawCommandsCount = fSkippedPendingDrawCommandsCount = 0; 472 fFlushedDrawCommandsCount = fSkippedPendingDrawCommandsCount = 0;
477 } 473 }
478 474
479 virtual void prepareForDraw() SK_OVERRIDE { 475 virtual void prepareForDraw() SK_OVERRIDE {
480 fPrepareForDrawCount++; 476 fPrepareForDrawCount++;
481 } 477 }
482 virtual void storageAllocatedForRecordingChanged(size_t) SK_OVERRIDE { 478 virtual void storageAllocatedForRecordingChanged(size_t) SK_OVERRIDE {
483 fStorageAllocatedChangedCount++; 479 fStorageAllocatedChangedCount++;
484 } 480 }
485 virtual void flushedDrawCommands() SK_OVERRIDE { 481 virtual void flushedDrawCommands() SK_OVERRIDE {
486 fFlushedDrawCommandsCount++; 482 fFlushedDrawCommandsCount++;
487 } 483 }
488 virtual void skippedPendingDrawCommands() SK_OVERRIDE { 484 virtual void skippedPendingDrawCommands() SK_OVERRIDE {
489 fSkippedPendingDrawCommandsCount++; 485 fSkippedPendingDrawCommandsCount++;
490 } 486 }
491 487
492 int fPrepareForDrawCount; 488 int fPrepareForDrawCount;
493 int fStorageAllocatedChangedCount; 489 int fStorageAllocatedChangedCount;
494 int fFlushedDrawCommandsCount; 490 int fFlushedDrawCommandsCount;
495 int fSkippedPendingDrawCommandsCount; 491 int fSkippedPendingDrawCommandsCount;
496 492
497 private: 493 private:
498 typedef SkDeferredCanvas::NotificationClient INHERITED; 494 typedef SkDeferredCanvas::NotificationClient INHERITED;
499 }; 495 };
500 496
497 // Verifies that the deferred canvas triggers a flush when its memory
498 // limit is exceeded
499 static void TestDeferredCanvasMemoryLimit(skiatest::Reporter* reporter) {
500 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100));
501 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
502
503 NotificationCounter notificationCounter;
504 canvas->setNotificationClient(&notificationCounter);
505
506 canvas->setMaxRecordingStorage(160000);
507
508 SkBitmap sourceImage;
509 // 100 by 100 image, takes 40,000 bytes in memory
510 sourceImage.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
511 sourceImage.allocPixels();
512
513 for (int i = 0; i < 5; i++) {
514 sourceImage.notifyPixelsChanged(); // to force re-serialization
515 canvas->drawBitmap(sourceImage, 0, 0, NULL);
516 }
517
518 REPORTER_ASSERT(reporter, 1 == notificationCounter.fFlushedDrawCommandsCount );
519 }
520
501 static void TestDeferredCanvasBitmapCaching(skiatest::Reporter* reporter) { 521 static void TestDeferredCanvasBitmapCaching(skiatest::Reporter* reporter) {
502 SkBitmap store; 522 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100));
503 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); 523 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
504 store.allocPixels(); 524
505 SkBitmapDevice device(store);
506 NotificationCounter notificationCounter; 525 NotificationCounter notificationCounter;
507 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device));
508 canvas->setNotificationClient(&notificationCounter); 526 canvas->setNotificationClient(&notificationCounter);
509 527
510 const int imageCount = 2; 528 const int imageCount = 2;
511 SkBitmap sourceImages[imageCount]; 529 SkBitmap sourceImages[imageCount];
512 for (int i = 0; i < imageCount; i++) 530 for (int i = 0; i < imageCount; i++)
513 { 531 {
514 sourceImages[i].setConfig(SkBitmap::kARGB_8888_Config, 100, 100); 532 sourceImages[i].setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
515 sourceImages[i].allocPixels(); 533 sourceImages[i].allocPixels();
516 } 534 }
517 535
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 canvas->drawBitmap(sourceImages[1], 0, 0, NULL); 593 canvas->drawBitmap(sourceImages[1], 0, 0, NULL);
576 sourceImages[1].notifyPixelsChanged(); 594 sourceImages[1].notifyPixelsChanged();
577 canvas->drawBitmap(sourceImages[1], 0, 0, NULL); 595 canvas->drawBitmap(sourceImages[1], 0, 0, NULL);
578 REPORTER_ASSERT(reporter, canvas->storageAllocatedForRecording() > 2*bitmapS ize); 596 REPORTER_ASSERT(reporter, canvas->storageAllocatedForRecording() > 2*bitmapS ize);
579 597
580 // Verify that nothing in this test caused commands to be skipped 598 // Verify that nothing in this test caused commands to be skipped
581 REPORTER_ASSERT(reporter, 0 == notificationCounter.fSkippedPendingDrawComman dsCount); 599 REPORTER_ASSERT(reporter, 0 == notificationCounter.fSkippedPendingDrawComman dsCount);
582 } 600 }
583 601
584 static void TestDeferredCanvasSkip(skiatest::Reporter* reporter) { 602 static void TestDeferredCanvasSkip(skiatest::Reporter* reporter) {
585 SkBitmap store; 603 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100));
586 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); 604 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
587 store.allocPixels(); 605
588 SkBitmapDevice device(store);
589 NotificationCounter notificationCounter; 606 NotificationCounter notificationCounter;
590 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device));
591 canvas->setNotificationClient(&notificationCounter); 607 canvas->setNotificationClient(&notificationCounter);
592 canvas->clear(0x0); 608 canvas->clear(0x0);
593 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount); 609 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount);
594 REPORTER_ASSERT(reporter, 0 == notificationCounter.fFlushedDrawCommandsCount ); 610 REPORTER_ASSERT(reporter, 0 == notificationCounter.fFlushedDrawCommandsCount );
595 canvas->flush(); 611 canvas->flush();
596 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount); 612 REPORTER_ASSERT(reporter, 1 == notificationCounter.fSkippedPendingDrawComman dsCount);
597 REPORTER_ASSERT(reporter, 1 == notificationCounter.fFlushedDrawCommandsCount ); 613 REPORTER_ASSERT(reporter, 1 == notificationCounter.fFlushedDrawCommandsCount );
598 614
599 } 615 }
600 616
601 static void TestDeferredCanvasBitmapShaderNoLeak(skiatest::Reporter* reporter) { 617 static void TestDeferredCanvasBitmapShaderNoLeak(skiatest::Reporter* reporter) {
602 // This is a regression test for crbug.com/155875 618 // This is a regression test for crbug.com/155875
603 // This test covers a code path that inserts bitmaps into the bitmap heap th rough the 619 // This test covers a code path that inserts bitmaps into the bitmap heap th rough the
604 // flattening of SkBitmapProcShaders. The refcount in the bitmap heap is mai ntained through 620 // flattening of SkBitmapProcShaders. The refcount in the bitmap heap is mai ntained through
605 // the flattening and unflattening of the shader. 621 // the flattening and unflattening of the shader.
606 SkBitmap store; 622 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100));
607 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); 623 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
608 store.allocPixels();
609 SkBitmapDevice device(store);
610 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device));
611 // test will fail if nbIterations is not in sync with 624 // test will fail if nbIterations is not in sync with
612 // BITMAPS_TO_KEEP in SkGPipeWrite.cpp 625 // BITMAPS_TO_KEEP in SkGPipeWrite.cpp
613 const int nbIterations = 5; 626 const int nbIterations = 5;
614 size_t bytesAllocated = 0; 627 size_t bytesAllocated = 0;
615 for(int pass = 0; pass < 2; ++pass) { 628 for(int pass = 0; pass < 2; ++pass) {
616 for(int i = 0; i < nbIterations; ++i) { 629 for(int i = 0; i < nbIterations; ++i) {
617 SkPaint paint; 630 SkPaint paint;
618 SkBitmap paintPattern; 631 SkBitmap paintPattern;
619 paintPattern.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 632 paintPattern.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
620 paintPattern.allocPixels(); 633 paintPattern.allocPixels();
(...skipping 13 matching lines...) Expand all
634 REPORTER_ASSERT(reporter, newBytesAllocated == bytesAllocated); 647 REPORTER_ASSERT(reporter, newBytesAllocated == bytesAllocated);
635 } 648 }
636 } 649 }
637 } 650 }
638 // All cached resources should be evictable since last canvas call was flush () 651 // All cached resources should be evictable since last canvas call was flush ()
639 canvas->freeMemoryIfPossible(~0U); 652 canvas->freeMemoryIfPossible(~0U);
640 REPORTER_ASSERT(reporter, 0 == canvas->storageAllocatedForRecording()); 653 REPORTER_ASSERT(reporter, 0 == canvas->storageAllocatedForRecording());
641 } 654 }
642 655
643 static void TestDeferredCanvasBitmapSizeThreshold(skiatest::Reporter* reporter) { 656 static void TestDeferredCanvasBitmapSizeThreshold(skiatest::Reporter* reporter) {
644 SkBitmap store; 657 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100));
645 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
646 store.allocPixels();
647 658
648 SkBitmap sourceImage; 659 SkBitmap sourceImage;
649 // 100 by 100 image, takes 40,000 bytes in memory 660 // 100 by 100 image, takes 40,000 bytes in memory
650 sourceImage.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); 661 sourceImage.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
651 sourceImage.allocPixels(); 662 sourceImage.allocPixels();
652 663
653 // 1 under : should not store the image 664 // 1 under : should not store the image
654 { 665 {
655 SkBitmapDevice device(store); 666 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.g et()));
656 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device)) ;
657 canvas->setBitmapSizeThreshold(39999); 667 canvas->setBitmapSizeThreshold(39999);
658 canvas->drawBitmap(sourceImage, 0, 0, NULL); 668 canvas->drawBitmap(sourceImage, 0, 0, NULL);
659 size_t newBytesAllocated = canvas->storageAllocatedForRecording(); 669 size_t newBytesAllocated = canvas->storageAllocatedForRecording();
660 REPORTER_ASSERT(reporter, newBytesAllocated == 0); 670 REPORTER_ASSERT(reporter, newBytesAllocated == 0);
661 } 671 }
662 672
663 // exact value : should store the image 673 // exact value : should store the image
664 { 674 {
665 SkBitmapDevice device(store); 675 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.g et()));
666 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device)) ;
667 canvas->setBitmapSizeThreshold(40000); 676 canvas->setBitmapSizeThreshold(40000);
668 canvas->drawBitmap(sourceImage, 0, 0, NULL); 677 canvas->drawBitmap(sourceImage, 0, 0, NULL);
669 size_t newBytesAllocated = canvas->storageAllocatedForRecording(); 678 size_t newBytesAllocated = canvas->storageAllocatedForRecording();
670 REPORTER_ASSERT(reporter, newBytesAllocated > 0); 679 REPORTER_ASSERT(reporter, newBytesAllocated > 0);
671 } 680 }
672 681
673 // 1 over : should still store the image 682 // 1 over : should still store the image
674 { 683 {
675 SkBitmapDevice device(store); 684 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.g et()));
676 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device)) ;
677 canvas->setBitmapSizeThreshold(40001); 685 canvas->setBitmapSizeThreshold(40001);
678 canvas->drawBitmap(sourceImage, 0, 0, NULL); 686 canvas->drawBitmap(sourceImage, 0, 0, NULL);
679 size_t newBytesAllocated = canvas->storageAllocatedForRecording(); 687 size_t newBytesAllocated = canvas->storageAllocatedForRecording();
680 REPORTER_ASSERT(reporter, newBytesAllocated > 0); 688 REPORTER_ASSERT(reporter, newBytesAllocated > 0);
681 } 689 }
682 } 690 }
683 691
684 692
685 typedef void* PixelPtr; 693 typedef void* PixelPtr;
686 // Returns an opaque pointer which, either points to a GrTexture or RAM pixel 694 // Returns an opaque pointer which, either points to a GrTexture or RAM pixel
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 REPORTER_ASSERT(reporter, getSurfacePixelPtr(surface, useGpu) == pixels1); 812 REPORTER_ASSERT(reporter, getSurfacePixelPtr(surface, useGpu) == pixels1);
805 REPORTER_ASSERT(reporter, getSurfacePixelPtr(alternateSurface, useGpu) == pi xels2); 813 REPORTER_ASSERT(reporter, getSurfacePixelPtr(alternateSurface, useGpu) == pi xels2);
806 // Verify that a flushed draw command will trigger a copy on write on altern ateSurface. 814 // Verify that a flushed draw command will trigger a copy on write on altern ateSurface.
807 canvas->clear(SK_ColorWHITE); 815 canvas->clear(SK_ColorWHITE);
808 canvas->flush(); 816 canvas->flush();
809 REPORTER_ASSERT(reporter, getSurfacePixelPtr(surface, useGpu) == pixels1); 817 REPORTER_ASSERT(reporter, getSurfacePixelPtr(surface, useGpu) == pixels1);
810 REPORTER_ASSERT(reporter, getSurfacePixelPtr(alternateSurface, useGpu) != pi xels2); 818 REPORTER_ASSERT(reporter, getSurfacePixelPtr(alternateSurface, useGpu) != pi xels2);
811 } 819 }
812 820
813 static void TestDeferredCanvasCreateCompatibleDevice(skiatest::Reporter* reporte r) { 821 static void TestDeferredCanvasCreateCompatibleDevice(skiatest::Reporter* reporte r) {
814 SkBitmap store; 822 SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100));
815 store.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); 823 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get() ));
816 store.allocPixels(); 824
817 SkBitmapDevice device(store);
818 NotificationCounter notificationCounter; 825 NotificationCounter notificationCounter;
819 SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(&device));
820 canvas->setNotificationClient(&notificationCounter); 826 canvas->setNotificationClient(&notificationCounter);
827
821 SkAutoTUnref<SkBaseDevice> secondaryDevice(canvas->createCompatibleDevice( 828 SkAutoTUnref<SkBaseDevice> secondaryDevice(canvas->createCompatibleDevice(
822 SkBitmap::kARGB_8888_Config, 10, 10, device.isOpaque())); 829 SkBitmap::kARGB_8888_Config, 10, 10, false));
823 SkCanvas secondaryCanvas(secondaryDevice.get()); 830 SkCanvas secondaryCanvas(secondaryDevice.get());
824 SkRect rect = SkRect::MakeWH(5, 5); 831 SkRect rect = SkRect::MakeWH(5, 5);
825 SkPaint paint; 832 SkPaint paint;
826 // After spawning a compatible canvas: 833 // After spawning a compatible canvas:
827 // 1) Verify that secondary canvas is usable and does not report to the noti fication client. 834 // 1) Verify that secondary canvas is usable and does not report to the noti fication client.
828 secondaryCanvas.drawRect(rect, paint); 835 secondaryCanvas.drawRect(rect, paint);
829 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 0); 836 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 0);
830 // 2) Verify that original canvas is usable and still reports to the notific ation client. 837 // 2) Verify that original canvas is usable and still reports to the notific ation client.
831 canvas->drawRect(rect, paint); 838 canvas->drawRect(rect, paint);
832 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 1); 839 REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 1);
(...skipping 10 matching lines...) Expand all
843 TestDeferredCanvasBitmapSizeThreshold(reporter); 850 TestDeferredCanvasBitmapSizeThreshold(reporter);
844 TestDeferredCanvasCreateCompatibleDevice(reporter); 851 TestDeferredCanvasCreateCompatibleDevice(reporter);
845 TestDeferredCanvasWritePixelsToSurface(reporter); 852 TestDeferredCanvasWritePixelsToSurface(reporter);
846 TestDeferredCanvasSurface(reporter, NULL); 853 TestDeferredCanvasSurface(reporter, NULL);
847 TestDeferredCanvasSetSurface(reporter, NULL); 854 TestDeferredCanvasSetSurface(reporter, NULL);
848 if (NULL != factory) { 855 if (NULL != factory) {
849 TestDeferredCanvasSurface(reporter, factory); 856 TestDeferredCanvasSurface(reporter, factory);
850 TestDeferredCanvasSetSurface(reporter, factory); 857 TestDeferredCanvasSetSurface(reporter, factory);
851 } 858 }
852 } 859 }
OLDNEW
« no previous file with comments | « tests/CanvasTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698