Index: tests/SurfaceTest.cpp |
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp |
index c45e94e883cd3fd9402e35029bd1cd1775aca39b..817906070ad62183e8264efe55e08e348dfbe61b 100644 |
--- a/tests/SurfaceTest.cpp |
+++ b/tests/SurfaceTest.cpp |
@@ -223,7 +223,30 @@ struct ReleaseDataContext { |
} |
}; |
-static SkImage* create_image(ImageType imageType, GrContext* context, SkColor color, |
+static void test_texture_handle(skiatest::Reporter* reporter, SkSurface* surf) { |
+ SkAutoTUnref<SkImage> image0(surf->newImageSnapshot()); |
+ GrBackendObject obj = surf->getTextureHandle(SkSurface::kFlushRead_TextureHandleAccess); |
+ REPORTER_ASSERT(reporter, obj != 0); |
+ SkAutoTUnref<SkImage> image1(surf->newImageSnapshot()); |
+ // just read access should not affect the snapshot |
+ REPORTER_ASSERT(reporter, image0->uniqueID() == image1->uniqueID()); |
+ |
+ obj = surf->getTextureHandle(SkSurface::kFlushWrite_TextureHandleAccess); |
+ REPORTER_ASSERT(reporter, obj != 0); |
+ SkAutoTUnref<SkImage> image2(surf->newImageSnapshot()); |
+ // expect a new image, since we claimed we would write |
+ REPORTER_ASSERT(reporter, image0->uniqueID() != image2->uniqueID()); |
+ |
+ obj = surf->getTextureHandle(SkSurface::kDiscardWrite_TextureHandleAccess); |
+ REPORTER_ASSERT(reporter, obj != 0); |
+ SkAutoTUnref<SkImage> image3(surf->newImageSnapshot()); |
+ // expect a new(er) image, since we claimed we would write |
+ REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID()); |
+ REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID()); |
+} |
+ |
+static SkImage* create_image(skiatest::Reporter* reporter, |
+ ImageType imageType, GrContext* context, SkColor color, |
ReleaseDataContext* releaseContext) { |
const SkPMColor pmcolor = SkPreMultiplyColor(color); |
const SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10); |
@@ -248,6 +271,10 @@ static SkImage* create_image(ImageType imageType, GrContext* context, SkColor co |
SkAutoTUnref<SkSurface> surf( |
SkSurface::NewRenderTarget(context, SkSurface::kNo_Budgeted, info, 0)); |
surf->getCanvas()->clear(color); |
+ // test our backing texture while were here... |
+ test_texture_handle(reporter, surf); |
+ // redraw so our returned image looks as expected. |
+ surf->getCanvas()->clear(color); |
return surf->newImageSnapshot(); |
} |
case kCodec_ImageType: { |
@@ -351,7 +378,7 @@ static void test_imagepeek(skiatest::Reporter* reporter, GrContextFactory* facto |
size_t rowBytes; |
releaseCtx.fData = NULL; |
- SkAutoTUnref<SkImage> image(create_image(gRec[i].fType, ctx, color, &releaseCtx)); |
+ SkAutoTUnref<SkImage> image(create_image(reporter, gRec[i].fType, ctx, color, &releaseCtx)); |
if (!image.get()) { |
SkDebugf("failed to createImage[%d] %s\n", i, gRec[i].fName); |
continue; // gpu may not be enabled |