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 "SkDevice.h" | 10 #include "SkDevice.h" |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 } | 223 } |
224 }; | 224 }; |
225 | 225 |
226 // May we (soon) eliminate the need to keep testing this, by hiding the bloody d
evice! | 226 // May we (soon) eliminate the need to keep testing this, by hiding the bloody d
evice! |
227 #include "SkDevice.h" | 227 #include "SkDevice.h" |
228 static uint32_t get_legacy_gen_id(SkSurface* surf) { | 228 static uint32_t get_legacy_gen_id(SkSurface* surf) { |
229 SkBaseDevice* device = surf->getCanvas()->getDevice_just_for_deprecated_comp
atibility_testing(); | 229 SkBaseDevice* device = surf->getCanvas()->getDevice_just_for_deprecated_comp
atibility_testing(); |
230 return device->accessBitmap(false).getGenerationID(); | 230 return device->accessBitmap(false).getGenerationID(); |
231 } | 231 } |
232 | 232 |
233 static void test_texture_handle(skiatest::Reporter* reporter, SkSurface* surf) { | 233 template <class F> |
| 234 static void test_backend_handle(skiatest::Reporter* reporter, SkSurface* surf, F
f) { |
234 SkAutoTUnref<SkImage> image0(surf->newImageSnapshot()); | 235 SkAutoTUnref<SkImage> image0(surf->newImageSnapshot()); |
235 const uint32_t genID0 = get_legacy_gen_id(surf); | 236 const uint32_t genID0 = get_legacy_gen_id(surf); |
236 GrBackendObject obj = surf->getTextureHandle(SkSurface::kFlushRead_TextureHa
ndleAccess); | 237 GrBackendObject obj = f(surf, SkSurface::kFlushRead_BackendHandleAccess); |
237 REPORTER_ASSERT(reporter, obj != 0); | 238 REPORTER_ASSERT(reporter, obj != 0); |
238 SkAutoTUnref<SkImage> image1(surf->newImageSnapshot()); | 239 SkAutoTUnref<SkImage> image1(surf->newImageSnapshot()); |
239 const uint32_t genID1 = get_legacy_gen_id(surf); | 240 const uint32_t genID1 = get_legacy_gen_id(surf); |
240 // just read access should not affect the snapshot | 241 // just read access should not affect the snapshot |
241 REPORTER_ASSERT(reporter, image0->uniqueID() == image1->uniqueID()); | 242 REPORTER_ASSERT(reporter, image0->uniqueID() == image1->uniqueID()); |
242 REPORTER_ASSERT(reporter, genID0 == genID1); | 243 REPORTER_ASSERT(reporter, genID0 == genID1); |
243 | 244 |
244 obj = surf->getTextureHandle(SkSurface::kFlushWrite_TextureHandleAccess); | 245 obj = f(surf, SkSurface::kFlushWrite_BackendHandleAccess); |
245 REPORTER_ASSERT(reporter, obj != 0); | 246 REPORTER_ASSERT(reporter, obj != 0); |
246 SkAutoTUnref<SkImage> image2(surf->newImageSnapshot()); | 247 SkAutoTUnref<SkImage> image2(surf->newImageSnapshot()); |
247 const uint32_t genID2 = get_legacy_gen_id(surf); | 248 const uint32_t genID2 = get_legacy_gen_id(surf); |
248 // expect a new image, since we claimed we would write | 249 // expect a new image, since we claimed we would write |
249 REPORTER_ASSERT(reporter, image0->uniqueID() != image2->uniqueID()); | 250 REPORTER_ASSERT(reporter, image0->uniqueID() != image2->uniqueID()); |
250 REPORTER_ASSERT(reporter, genID0 != genID2); | 251 REPORTER_ASSERT(reporter, genID0 != genID2); |
251 | 252 |
252 obj = surf->getTextureHandle(SkSurface::kDiscardWrite_TextureHandleAccess); | 253 obj = f(surf, SkSurface::kDiscardWrite_BackendHandleAccess); |
253 REPORTER_ASSERT(reporter, obj != 0); | 254 REPORTER_ASSERT(reporter, obj != 0); |
254 SkAutoTUnref<SkImage> image3(surf->newImageSnapshot()); | 255 SkAutoTUnref<SkImage> image3(surf->newImageSnapshot()); |
255 const uint32_t genID3 = get_legacy_gen_id(surf); | 256 const uint32_t genID3 = get_legacy_gen_id(surf); |
256 // expect a new(er) image, since we claimed we would write | 257 // expect a new(er) image, since we claimed we would write |
257 REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID()); | 258 REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID()); |
258 REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID()); | 259 REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID()); |
259 REPORTER_ASSERT(reporter, genID0 != genID3); | 260 REPORTER_ASSERT(reporter, genID0 != genID3); |
260 REPORTER_ASSERT(reporter, genID2 != genID3); | 261 REPORTER_ASSERT(reporter, genID2 != genID3); |
261 } | 262 } |
262 | 263 |
(...skipping 16 matching lines...) Expand all Loading... |
279 return SkImage::NewRasterData(info, data, rowBytes); | 280 return SkImage::NewRasterData(info, data, rowBytes); |
280 case kRasterProc_ImageType: | 281 case kRasterProc_ImageType: |
281 SkASSERT(releaseContext); | 282 SkASSERT(releaseContext); |
282 releaseContext->fData = SkRef(data.get()); | 283 releaseContext->fData = SkRef(data.get()); |
283 return SkImage::NewFromRaster(info, addr, rowBytes, | 284 return SkImage::NewFromRaster(info, addr, rowBytes, |
284 ReleaseDataContext::Release, releaseCo
ntext); | 285 ReleaseDataContext::Release, releaseCo
ntext); |
285 case kGpu_ImageType: { | 286 case kGpu_ImageType: { |
286 SkAutoTUnref<SkSurface> surf( | 287 SkAutoTUnref<SkSurface> surf( |
287 SkSurface::NewRenderTarget(context, SkSurface::kNo_Budgeted, inf
o, 0)); | 288 SkSurface::NewRenderTarget(context, SkSurface::kNo_Budgeted, inf
o, 0)); |
288 surf->getCanvas()->clear(color); | 289 surf->getCanvas()->clear(color); |
289 // test our backing texture while were here... | 290 // test our backing texture / rendertarget while were here... |
290 test_texture_handle(reporter, surf); | 291 test_backend_handle(reporter, surf, |
| 292 [](SkSurface* surf, SkSurface::BackendHandleAccess access) -> Gr
BackendObject { |
| 293 return surf->getTextureHandle(access); }); |
| 294 test_backend_handle(reporter, surf, |
| 295 [](SkSurface* surf, SkSurface::BackendHandleAccess access) -> Gr
BackendObject { |
| 296 GrBackendObject obj; |
| 297 bool result = surf->getRenderTargetHandle(&obj, access); |
| 298 SkASSERT(result); |
| 299 return obj; }); |
291 // redraw so our returned image looks as expected. | 300 // redraw so our returned image looks as expected. |
292 surf->getCanvas()->clear(color); | 301 surf->getCanvas()->clear(color); |
293 return surf->newImageSnapshot(); | 302 return surf->newImageSnapshot(); |
294 } | 303 } |
295 case kCodec_ImageType: { | 304 case kCodec_ImageType: { |
296 SkBitmap bitmap; | 305 SkBitmap bitmap; |
297 bitmap.installPixels(info, addr, rowBytes); | 306 bitmap.installPixels(info, addr, rowBytes); |
298 SkAutoTUnref<SkData> src( | 307 SkAutoTUnref<SkData> src( |
299 SkImageEncoder::EncodeData(bitmap, SkImageEncoder::kPNG_Type, 1
00)); | 308 SkImageEncoder::EncodeData(bitmap, SkImageEncoder::kPNG_Type, 1
00)); |
300 return SkImage::NewFromEncoded(src); | 309 return SkImage::NewFromEncoded(src); |
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
933 // We expect the ref'd image to see the new color, but cpy'd one should stil
l see the old color | 942 // We expect the ref'd image to see the new color, but cpy'd one should stil
l see the old color |
934 test_image_color(reporter, refImg, expected1); | 943 test_image_color(reporter, refImg, expected1); |
935 test_image_color(reporter, cpyImg, expected0); | 944 test_image_color(reporter, cpyImg, expected0); |
936 | 945 |
937 // Now exercise the release proc | 946 // Now exercise the release proc |
938 REPORTER_ASSERT(reporter, !releaseCtx.fIsReleased); | 947 REPORTER_ASSERT(reporter, !releaseCtx.fIsReleased); |
939 refImg.reset(NULL); // force a release of the image | 948 refImg.reset(NULL); // force a release of the image |
940 REPORTER_ASSERT(reporter, releaseCtx.fIsReleased); | 949 REPORTER_ASSERT(reporter, releaseCtx.fIsReleased); |
941 } | 950 } |
942 #endif | 951 #endif |
OLD | NEW |