| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2013 Google Inc. | 2  * Copyright 2013 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 "SkCanvas.h" | 8 #include "SkCanvas.h" | 
| 9 #include "SkData.h" | 9 #include "SkData.h" | 
| 10 #include "SkDecodingImageGenerator.h" | 10 #include "SkDecodingImageGenerator.h" | 
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 314     // The test verifies that the surface remains writable (usable) after | 314     // The test verifies that the surface remains writable (usable) after | 
| 315     // acquiring and releasing a snapshot without triggering a copy on write. | 315     // acquiring and releasing a snapshot without triggering a copy on write. | 
| 316     SkAutoTUnref<SkSurface> surface(createSurface(surfaceType, context)); | 316     SkAutoTUnref<SkSurface> surface(createSurface(surfaceType, context)); | 
| 317     SkCanvas* canvas = surface->getCanvas(); | 317     SkCanvas* canvas = surface->getCanvas(); | 
| 318     canvas->clear(1); | 318     canvas->clear(1); | 
| 319     surface->newImageSnapshot()->unref();  // Create and destroy SkImage | 319     surface->newImageSnapshot()->unref();  // Create and destroy SkImage | 
| 320     canvas->clear(2);  // Must not assert internally | 320     canvas->clear(2);  // Must not assert internally | 
| 321 } | 321 } | 
| 322 | 322 | 
| 323 #if SK_SUPPORT_GPU | 323 #if SK_SUPPORT_GPU | 
|  | 324 static void TestSurfaceInCache(skiatest::Reporter* reporter, | 
|  | 325                                SurfaceType surfaceType, | 
|  | 326                                GrContext* context) { | 
|  | 327     context->freeGpuResources(); | 
|  | 328     int resourceCount; | 
|  | 329 | 
|  | 330     context->getResourceCacheUsage(&resourceCount, NULL); | 
|  | 331     REPORTER_ASSERT(reporter, 0 == resourceCount); | 
|  | 332     SkAutoTUnref<SkSurface> surface(createSurface(surfaceType, context)); | 
|  | 333     // Note: the stencil buffer is always cached, so kGpu_SurfaceType uses | 
|  | 334     // one cached resource, and kGpuScratch_SurfaceType uses two. | 
|  | 335     int expectedCachedResources = surfaceType == kGpuScratch_SurfaceType ? 2 : 1
     ; | 
|  | 336     context->getResourceCacheUsage(&resourceCount, NULL); | 
|  | 337     REPORTER_ASSERT(reporter, expectedCachedResources == resourceCount); | 
|  | 338 | 
|  | 339     // Verify that all the cached resources are locked in cache. | 
|  | 340     context->freeGpuResources(); | 
|  | 341     context->getResourceCacheUsage(&resourceCount, NULL); | 
|  | 342     REPORTER_ASSERT(reporter, expectedCachedResources == resourceCount); | 
|  | 343 | 
|  | 344     // Verify that all the cached resources are unlocked upon surface release | 
|  | 345     surface.reset(0); | 
|  | 346     context->freeGpuResources(); | 
|  | 347     context->getResourceCacheUsage(&resourceCount, NULL); | 
|  | 348     REPORTER_ASSERT(reporter, 0 == resourceCount); | 
|  | 349 } | 
|  | 350 | 
| 324 static void Test_crbug263329(skiatest::Reporter* reporter, | 351 static void Test_crbug263329(skiatest::Reporter* reporter, | 
| 325                              SurfaceType surfaceType, | 352                              SurfaceType surfaceType, | 
| 326                              GrContext* context) { | 353                              GrContext* context) { | 
| 327     // This is a regression test for crbug.com/263329 | 354     // This is a regression test for crbug.com/263329 | 
| 328     // Bug was caused by onCopyOnWrite releasing the old surface texture | 355     // Bug was caused by onCopyOnWrite releasing the old surface texture | 
| 329     // back to the scratch texture pool even though the texture is used | 356     // back to the scratch texture pool even though the texture is used | 
| 330     // by and active SkImage_Gpu. | 357     // by and active SkImage_Gpu. | 
| 331     SkAutoTUnref<SkSurface> surface1(createSurface(surfaceType, context)); | 358     SkAutoTUnref<SkSurface> surface1(createSurface(surfaceType, context)); | 
| 332     SkAutoTUnref<SkSurface> surface2(createSurface(surfaceType, context)); | 359     SkAutoTUnref<SkSurface> surface2(createSurface(surfaceType, context)); | 
| 333     SkCanvas* canvas1 = surface1->getCanvas(); | 360     SkCanvas* canvas1 = surface1->getCanvas(); | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 419 #if SK_SUPPORT_GPU | 446 #if SK_SUPPORT_GPU | 
| 420     TestGetTexture(reporter, kRaster_SurfaceType, NULL); | 447     TestGetTexture(reporter, kRaster_SurfaceType, NULL); | 
| 421     if (factory) { | 448     if (factory) { | 
| 422         for (int i= 0; i < GrContextFactory::kGLContextTypeCnt; ++i) { | 449         for (int i= 0; i < GrContextFactory::kGLContextTypeCnt; ++i) { | 
| 423             GrContextFactory::GLContextType glCtxType = (GrContextFactory::GLCon
     textType) i; | 450             GrContextFactory::GLContextType glCtxType = (GrContextFactory::GLCon
     textType) i; | 
| 424             if (!GrContextFactory::IsRenderingGLContext(glCtxType)) { | 451             if (!GrContextFactory::IsRenderingGLContext(glCtxType)) { | 
| 425                 continue; | 452                 continue; | 
| 426             } | 453             } | 
| 427             GrContext* context = factory->get(glCtxType); | 454             GrContext* context = factory->get(glCtxType); | 
| 428             if (context) { | 455             if (context) { | 
|  | 456                 TestSurfaceInCache(reporter, kGpu_SurfaceType, context); | 
|  | 457                 TestSurfaceInCache(reporter, kGpuScratch_SurfaceType, context); | 
| 429                 Test_crbug263329(reporter, kGpu_SurfaceType, context); | 458                 Test_crbug263329(reporter, kGpu_SurfaceType, context); | 
| 430                 Test_crbug263329(reporter, kGpuScratch_SurfaceType, context); | 459                 Test_crbug263329(reporter, kGpuScratch_SurfaceType, context); | 
| 431                 TestSurfaceCopyOnWrite(reporter, kGpu_SurfaceType, context); | 460                 TestSurfaceCopyOnWrite(reporter, kGpu_SurfaceType, context); | 
| 432                 TestSurfaceCopyOnWrite(reporter, kGpuScratch_SurfaceType, contex
     t); | 461                 TestSurfaceCopyOnWrite(reporter, kGpuScratch_SurfaceType, contex
     t); | 
| 433                 TestSurfaceWritableAfterSnapshotRelease(reporter, kGpu_SurfaceTy
     pe, context); | 462                 TestSurfaceWritableAfterSnapshotRelease(reporter, kGpu_SurfaceTy
     pe, context); | 
| 434                 TestSurfaceWritableAfterSnapshotRelease(reporter, kGpuScratch_Su
     rfaceType, context); | 463                 TestSurfaceWritableAfterSnapshotRelease(reporter, kGpuScratch_Su
     rfaceType, context); | 
| 435                 TestSurfaceNoCanvas(reporter, kGpu_SurfaceType, context, SkSurfa
     ce::kDiscard_ContentChangeMode); | 464                 TestSurfaceNoCanvas(reporter, kGpu_SurfaceType, context, SkSurfa
     ce::kDiscard_ContentChangeMode); | 
| 436                 TestSurfaceNoCanvas(reporter, kGpuScratch_SurfaceType, context, 
     SkSurface::kDiscard_ContentChangeMode); | 465                 TestSurfaceNoCanvas(reporter, kGpuScratch_SurfaceType, context, 
     SkSurface::kDiscard_ContentChangeMode); | 
| 437                 TestSurfaceNoCanvas(reporter, kGpu_SurfaceType, context, SkSurfa
     ce::kRetain_ContentChangeMode); | 466                 TestSurfaceNoCanvas(reporter, kGpu_SurfaceType, context, SkSurfa
     ce::kRetain_ContentChangeMode); | 
| 438                 TestSurfaceNoCanvas(reporter, kGpuScratch_SurfaceType, context, 
     SkSurface::kRetain_ContentChangeMode); | 467                 TestSurfaceNoCanvas(reporter, kGpuScratch_SurfaceType, context, 
     SkSurface::kRetain_ContentChangeMode); | 
| 439                 TestGetTexture(reporter, kGpu_SurfaceType, context); | 468                 TestGetTexture(reporter, kGpu_SurfaceType, context); | 
| 440                 TestGetTexture(reporter, kGpuScratch_SurfaceType, context); | 469                 TestGetTexture(reporter, kGpuScratch_SurfaceType, context); | 
| 441             } | 470             } | 
| 442         } | 471         } | 
| 443     } | 472     } | 
| 444 #endif | 473 #endif | 
| 445 } | 474 } | 
| OLD | NEW | 
|---|