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

Side by Side Diff: tests/SurfaceTest.cpp

Issue 2168483003: Deprecate SkDevice::accessBitmap method (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update Created 4 years, 5 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
« src/gpu/SkGpuDevice.h ('K') | « src/svg/SkSVGDevice.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 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 <functional> 8 #include <functional>
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkData.h" 10 #include "SkData.h"
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 #if SK_SUPPORT_GPU 121 #if SK_SUPPORT_GPU
122 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceCanvasPeek_Gpu, reporter, ctxInfo) { 122 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceCanvasPeek_Gpu, reporter, ctxInfo) {
123 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 123 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
124 SkImageInfo requestInfo; 124 SkImageInfo requestInfo;
125 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, &req uestInfo)); 125 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, &req uestInfo));
126 test_canvas_peek(reporter, surface, requestInfo, false); 126 test_canvas_peek(reporter, surface, requestInfo, false);
127 } 127 }
128 } 128 }
129 #endif 129 #endif
130 130
131 // For compatibility with clients that still call accessBitmap(), we need to ens ure that we bump
132 // the bitmap's genID when we draw to it, else they won't know it has new values . When they are
133 // exclusively using surface/image, and we can hide accessBitmap from device, we can remove this
134 // test.
135 void test_access_pixels(skiatest::Reporter* reporter, const sk_sp<SkSurface>& su rface) {
136 SkCanvas* canvas = surface->getCanvas();
137 canvas->clear(0);
138
139 SkBaseDevice* device = canvas->getDevice_just_for_deprecated_compatibility_t esting();
140 SkBitmap bm = device->accessBitmap(false);
141 uint32_t genID0 = bm.getGenerationID();
142 // Now we draw something, which needs to "dirty" the genID (sorta like copy- on-write)
143 canvas->drawColor(SK_ColorBLUE);
144 // Now check that we get a different genID
145 uint32_t genID1 = bm.getGenerationID();
146 REPORTER_ASSERT(reporter, genID0 != genID1);
147 }
148 DEF_TEST(SurfaceAccessPixels, reporter) {
149 for (auto& surface_func : { &create_surface, &create_direct_surface }) {
150 auto surface(surface_func(kPremul_SkAlphaType, nullptr));
151 test_access_pixels(reporter, surface);
152 }
153 }
154 #if SK_SUPPORT_GPU
155 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceAccessPixels_Gpu, reporter, ctxInfo) {
156 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
157 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, null ptr));
158 test_access_pixels(reporter, surface);
159 }
160 }
161 #endif
162
163 static void test_snapshot_alphatype(skiatest::Reporter* reporter, const sk_sp<Sk Surface>& surface, 131 static void test_snapshot_alphatype(skiatest::Reporter* reporter, const sk_sp<Sk Surface>& surface,
164 bool expectOpaque) { 132 bool expectOpaque) {
165 REPORTER_ASSERT(reporter, surface); 133 REPORTER_ASSERT(reporter, surface);
166 if (surface) { 134 if (surface) {
167 sk_sp<SkImage> image(surface->makeImageSnapshot()); 135 sk_sp<SkImage> image(surface->makeImageSnapshot());
168 REPORTER_ASSERT(reporter, image); 136 REPORTER_ASSERT(reporter, image);
169 if (image) { 137 if (image) {
170 REPORTER_ASSERT(reporter, image->isOpaque() == SkToBool(expectOpaque )); 138 REPORTER_ASSERT(reporter, image->isOpaque() == SkToBool(expectOpaque ));
171 } 139 }
172 } 140 }
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 test_unique_image_snap(reporter, surface.get(), true, imageBackingSt ore, 341 test_unique_image_snap(reporter, surface.get(), true, imageBackingSt ore,
374 surfaceBackingStore); 342 surfaceBackingStore);
375 } 343 }
376 texture->unref(); 344 texture->unref();
377 context->getGpu()->deleteTestingOnlyBackendTexture(textureObject); 345 context->getGpu()->deleteTestingOnlyBackendTexture(textureObject);
378 } 346 }
379 } 347 }
380 #endif 348 #endif
381 349
382 #if SK_SUPPORT_GPU 350 #if SK_SUPPORT_GPU
383 // May we (soon) eliminate the need to keep testing this, by hiding the bloody d evice!
384 static uint32_t get_legacy_gen_id(SkSurface* surface) {
385 SkBaseDevice* device =
386 surface->getCanvas()->getDevice_just_for_deprecated_compatibility_te sting();
387 return device->accessBitmap(false).getGenerationID();
388 }
389 /*
390 * Test legacy behavor of bumping the surface's device's bitmap's genID when we access its
391 * texture handle for writing.
392 *
393 * Note: this needs to be tested separately from checking makeImageSnapshot, as calling that
394 * can also incidentally bump the genID (when a new backing surface is created) .
395 */
396 static void test_backend_handle_gen_id(
397 skiatest::Reporter* reporter, SkSurface* surface,
398 GrBackendObject (*func)(SkSurface*, SkSurface::BackendHandleAccess)) {
399 const uint32_t gen0 = get_legacy_gen_id(surface);
400 func(surface, SkSurface::kFlushRead_BackendHandleAccess);
401 const uint32_t gen1 = get_legacy_gen_id(surface);
402 REPORTER_ASSERT(reporter, gen0 == gen1);
403 351
404 func(surface, SkSurface::kFlushWrite_BackendHandleAccess);
405 const uint32_t gen2 = get_legacy_gen_id(surface);
406 REPORTER_ASSERT(reporter, gen0 != gen2);
407
408 func(surface, SkSurface::kDiscardWrite_BackendHandleAccess);
409 const uint32_t gen3 = get_legacy_gen_id(surface);
410 REPORTER_ASSERT(reporter, gen0 != gen3);
411 REPORTER_ASSERT(reporter, gen2 != gen3);
412 }
413 static void test_backend_handle_unique_id( 352 static void test_backend_handle_unique_id(
414 skiatest::Reporter* reporter, SkSurface* surface, 353 skiatest::Reporter* reporter, SkSurface* surface,
415 GrBackendObject (*func)(SkSurface*, SkSurface::BackendHandleAccess)) { 354 GrBackendObject (*func)(SkSurface*, SkSurface::BackendHandleAccess)) {
416 sk_sp<SkImage> image0(surface->makeImageSnapshot()); 355 sk_sp<SkImage> image0(surface->makeImageSnapshot());
417 GrBackendObject obj = func(surface, SkSurface::kFlushRead_BackendHandleAcces s); 356 GrBackendObject obj = func(surface, SkSurface::kFlushRead_BackendHandleAcces s);
418 REPORTER_ASSERT(reporter, obj != 0); 357 REPORTER_ASSERT(reporter, obj != 0);
419 sk_sp<SkImage> image1(surface->makeImageSnapshot()); 358 sk_sp<SkImage> image1(surface->makeImageSnapshot());
420 // just read access should not affect the snapshot 359 // just read access should not affect the snapshot
421 REPORTER_ASSERT(reporter, image0->uniqueID() == image1->uniqueID()); 360 REPORTER_ASSERT(reporter, image0->uniqueID() == image1->uniqueID());
422 361
423 obj = func(surface, SkSurface::kFlushWrite_BackendHandleAccess); 362 obj = func(surface, SkSurface::kFlushWrite_BackendHandleAccess);
424 REPORTER_ASSERT(reporter, obj != 0); 363 REPORTER_ASSERT(reporter, obj != 0);
425 sk_sp<SkImage> image2(surface->makeImageSnapshot()); 364 sk_sp<SkImage> image2(surface->makeImageSnapshot());
426 // expect a new image, since we claimed we would write 365 // expect a new image, since we claimed we would write
427 REPORTER_ASSERT(reporter, image0->uniqueID() != image2->uniqueID()); 366 REPORTER_ASSERT(reporter, image0->uniqueID() != image2->uniqueID());
428 367
429 obj = func(surface, SkSurface::kDiscardWrite_BackendHandleAccess); 368 obj = func(surface, SkSurface::kDiscardWrite_BackendHandleAccess);
430 REPORTER_ASSERT(reporter, obj != 0); 369 REPORTER_ASSERT(reporter, obj != 0);
431 sk_sp<SkImage> image3(surface->makeImageSnapshot()); 370 sk_sp<SkImage> image3(surface->makeImageSnapshot());
432 // expect a new(er) image, since we claimed we would write 371 // expect a new(er) image, since we claimed we would write
433 REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID()); 372 REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID());
434 REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID()); 373 REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID());
435 } 374 }
436 // No CPU test. 375 // No CPU test.
437 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendHandleAccessIDs_Gpu, reporter, ctxInfo) { 376 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendHandleAccessIDs_Gpu, reporter, ctxInfo) {
438 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 377 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
439 for (auto& test_func : { &test_backend_handle_unique_id, &test_backend_h andle_gen_id }) { 378 for (auto& test_func : { &test_backend_handle_unique_id }) {
440 for (auto& handle_access_func : 379 for (auto& handle_access_func :
441 { &get_surface_backend_texture_handle, &get_surface_backend_rend er_target_handle}) { 380 { &get_surface_backend_texture_handle, &get_surface_backend_rend er_target_handle}) {
442 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaTy pe, nullptr)); 381 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaTy pe, nullptr));
443 test_func(reporter, surface.get(), handle_access_func); 382 test_func(reporter, surface.get(), handle_access_func);
444 } 383 }
445 } 384 }
446 } 385 }
447 } 386 }
448 #endif 387 #endif
449 388
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 // our surface functions. 905 // our surface functions.
967 GrRenderTarget* rt = surface->getCanvas()->internal_private_accessTo pLayerDrawContext() 906 GrRenderTarget* rt = surface->getCanvas()->internal_private_accessTo pLayerDrawContext()
968 ->accessRenderTarget(); 907 ->accessRenderTarget();
969 REPORTER_ASSERT(reporter, 908 REPORTER_ASSERT(reporter,
970 ctxInfo.grContext()->resourceProvider()->attachStenc ilAttachment(rt)); 909 ctxInfo.grContext()->resourceProvider()->attachStenc ilAttachment(rt));
971 gpu->deleteTestingOnlyBackendTexture(textureObject); 910 gpu->deleteTestingOnlyBackendTexture(textureObject);
972 } 911 }
973 } 912 }
974 } 913 }
975 #endif 914 #endif
OLDNEW
« src/gpu/SkGpuDevice.h ('K') | « src/svg/SkSVGDevice.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698