aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-04-03 15:03:26 +0000
committerGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-04-03 15:03:26 +0000
commitaf0583528c7dd5344abfe14347377011abe374e2 (patch)
treed0ab2d58896b152cc205fab64227b80c99a0de6f /tests
parente4617bf6d45cdde07f89e341ebf5c485916bf0b2 (diff)
Fixed bug with SkImage leaving canvas backing store in an immutable state after destroy.
Added unit test that verifies that surface backing is writable after creating and destroying an image. Review URL: https://codereview.chromium.org/13226002 git-svn-id: http://skia.googlecode.com/svn/trunk@8512 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests')
-rw-r--r--tests/SurfaceTest.cpp35
1 files changed, 23 insertions, 12 deletions
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index 69a73f8556..59e565bba0 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -35,12 +35,8 @@ static SkSurface* createSurface(SurfaceType surfaceType, GrContext* context) {
case kRaster_SurfaceType:
return SkSurface::NewRaster(imageSpec);
case kGpu_SurfaceType:
-#if SK_SUPPORT_GPU
SkASSERT(NULL != context);
return SkSurface::NewRenderTarget(context, imageSpec);
-#else
- SkASSERT(0);
-#endif
case kPicture_SurfaceType:
return SkSurface::NewPicture(10, 10);
}
@@ -133,18 +129,33 @@ static void TestSurfaceCopyOnWrite(skiatest::Reporter* reporter, SurfaceType sur
testPaint))
}
-static void TestSurface(skiatest::Reporter* reporter) {
- TestSurfaceCopyOnWrite(reporter, kRaster_SurfaceType, NULL);
- TestSurfaceCopyOnWrite(reporter, kPicture_SurfaceType, NULL);
+static void TestSurfaceWritableAfterSnapshotRelease(skiatest::Reporter* reporter,
+ SurfaceType surfaceType,
+ GrContext* context) {
+ // This test succeeds by not triggering an assertion.
+ // The test verifies that the surface remains writable (usable) after
+ // acquiring and releasing a snapshot without triggering a copy on write.
+ SkSurface* surface = createSurface(surfaceType, context);
+ SkAutoTUnref<SkSurface> aur_surface(surface);
+ SkCanvas* canvas = surface->getCanvas();
+ canvas->clear(1);
+ surface->newImageShapshot()->unref(); // Create and destroy SkImage
+ canvas->clear(2);
}
-static void TestSurfaceGpu(skiatest::Reporter* reporter, GrContextFactory* factory) {
+static void TestSurface(skiatest::Reporter* reporter, GrContextFactory* factory) {
+ TestSurfaceCopyOnWrite(reporter, kRaster_SurfaceType, NULL);
+ TestSurfaceCopyOnWrite(reporter, kPicture_SurfaceType, NULL);
+ TestSurfaceWritableAfterSnapshotRelease(reporter, kRaster_SurfaceType, NULL);
+ TestSurfaceWritableAfterSnapshotRelease(reporter, kPicture_SurfaceType, NULL);
#if SK_SUPPORT_GPU
- GrContext* context = factory->get(GrContextFactory::kNative_GLContextType);
- TestSurfaceCopyOnWrite(reporter, kGpu_SurfaceType, context);
+ if (NULL != factory) {
+ GrContext* context = factory->get(GrContextFactory::kNative_GLContextType);
+ TestSurfaceCopyOnWrite(reporter, kGpu_SurfaceType, context);
+ TestSurfaceWritableAfterSnapshotRelease(reporter, kGpu_SurfaceType, context);
+ }
#endif
}
#include "TestClassDef.h"
-DEFINE_TESTCLASS("Surface", SurfaceTestClass, TestSurface)
-DEFINE_GPUTESTCLASS("SurfaceGpu", SurfaceGpuTestClass, TestSurfaceGpu)
+DEFINE_GPUTESTCLASS("Surface", SurfaceTestClass, TestSurface)