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

Side by Side Diff: tests/SurfaceTest.cpp

Issue 1966013002: Turn ContextInfos returned by GrContextFactory into structs. (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Address comment Created 4 years, 7 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
« no previous file with comments | « tests/SpecialSurfaceTest.cpp ('k') | tests/TessellatingPathRendererTests.cpp » ('j') | 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 DEF_TEST(SurfaceEmpty, reporter) { 72 DEF_TEST(SurfaceEmpty, reporter) {
73 const SkImageInfo info = SkImageInfo::Make(0, 0, kN32_SkColorType, kPremul_S kAlphaType); 73 const SkImageInfo info = SkImageInfo::Make(0, 0, kN32_SkColorType, kPremul_S kAlphaType);
74 REPORTER_ASSERT(reporter, nullptr == SkSurface::MakeRaster(info)); 74 REPORTER_ASSERT(reporter, nullptr == SkSurface::MakeRaster(info));
75 REPORTER_ASSERT(reporter, nullptr == SkSurface::MakeRasterDirect(info, nullp tr, 0)); 75 REPORTER_ASSERT(reporter, nullptr == SkSurface::MakeRasterDirect(info, nullp tr, 0));
76 76
77 } 77 }
78 #if SK_SUPPORT_GPU 78 #if SK_SUPPORT_GPU
79 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceEmpty_Gpu, reporter, ctxInfo) { 79 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceEmpty_Gpu, reporter, ctxInfo) {
80 const SkImageInfo info = SkImageInfo::Make(0, 0, kN32_SkColorType, kPremul_S kAlphaType); 80 const SkImageInfo info = SkImageInfo::Make(0, 0, kN32_SkColorType, kPremul_S kAlphaType);
81 REPORTER_ASSERT(reporter, nullptr == 81 REPORTER_ASSERT(reporter, nullptr ==
82 SkSurface::MakeRenderTarget(ctxInfo.fGrContext, SkBudgeted:: kNo, info, 0, 82 SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted: :kNo, info, 0,
83 nullptr)); 83 nullptr));
84 } 84 }
85 #endif 85 #endif
86 86
87 static void test_canvas_peek(skiatest::Reporter* reporter, 87 static void test_canvas_peek(skiatest::Reporter* reporter,
88 sk_sp<SkSurface>& surface, 88 sk_sp<SkSurface>& surface,
89 const SkImageInfo& requestInfo, 89 const SkImageInfo& requestInfo,
90 bool expectPeekSuccess) { 90 bool expectPeekSuccess) {
91 const SkColor color = SK_ColorRED; 91 const SkColor color = SK_ColorRED;
92 const SkPMColor pmcolor = SkPreMultiplyColor(color); 92 const SkPMColor pmcolor = SkPreMultiplyColor(color);
(...skipping 22 matching lines...) Expand all
115 for (auto& surface_func : { &create_surface, &create_direct_surface }) { 115 for (auto& surface_func : { &create_surface, &create_direct_surface }) {
116 SkImageInfo requestInfo; 116 SkImageInfo requestInfo;
117 auto surface(surface_func(kPremul_SkAlphaType, &requestInfo)); 117 auto surface(surface_func(kPremul_SkAlphaType, &requestInfo));
118 test_canvas_peek(reporter, surface, requestInfo, true); 118 test_canvas_peek(reporter, surface, requestInfo, true);
119 } 119 }
120 } 120 }
121 #if SK_SUPPORT_GPU 121 #if SK_SUPPORT_GPU
122 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceCanvasPeek_Gpu, reporter, ctxInfo) { 122 DEF_GPUTEST_FOR_GL_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.fGrContext, kPremul_SkAlphaType, &requ estInfo)); 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 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 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 133 // exclusively using surface/image, and we can hide accessBitmap from device, we can remove this
134 // test. 134 // test.
135 void test_access_pixels(skiatest::Reporter* reporter, const sk_sp<SkSurface>& su rface) { 135 void test_access_pixels(skiatest::Reporter* reporter, const sk_sp<SkSurface>& su rface) {
(...skipping 11 matching lines...) Expand all
147 } 147 }
148 DEF_TEST(SurfaceAccessPixels, reporter) { 148 DEF_TEST(SurfaceAccessPixels, reporter) {
149 for (auto& surface_func : { &create_surface, &create_direct_surface }) { 149 for (auto& surface_func : { &create_surface, &create_direct_surface }) {
150 auto surface(surface_func(kPremul_SkAlphaType, nullptr)); 150 auto surface(surface_func(kPremul_SkAlphaType, nullptr));
151 test_access_pixels(reporter, surface); 151 test_access_pixels(reporter, surface);
152 } 152 }
153 } 153 }
154 #if SK_SUPPORT_GPU 154 #if SK_SUPPORT_GPU
155 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceAccessPixels_Gpu, reporter, ctxInfo ) { 155 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceAccessPixels_Gpu, reporter, ctxInfo ) {
156 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 156 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
157 auto surface(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaType, nullp tr)); 157 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, null ptr));
158 test_access_pixels(reporter, surface); 158 test_access_pixels(reporter, surface);
159 } 159 }
160 } 160 }
161 #endif 161 #endif
162 162
163 static void test_snapshot_alphatype(skiatest::Reporter* reporter, const sk_sp<Sk Surface>& surface, 163 static void test_snapshot_alphatype(skiatest::Reporter* reporter, const sk_sp<Sk Surface>& surface,
164 bool expectOpaque) { 164 bool expectOpaque) {
165 REPORTER_ASSERT(reporter, surface); 165 REPORTER_ASSERT(reporter, surface);
166 if (surface) { 166 if (surface) {
167 sk_sp<SkImage> image(surface->makeImageSnapshot()); 167 sk_sp<SkImage> image(surface->makeImageSnapshot());
(...skipping 10 matching lines...) Expand all
178 auto surface(surface_func(alphaType, nullptr)); 178 auto surface(surface_func(alphaType, nullptr));
179 test_snapshot_alphatype(reporter, surface, isOpaque); 179 test_snapshot_alphatype(reporter, surface, isOpaque);
180 } 180 }
181 } 181 }
182 } 182 }
183 #if SK_SUPPORT_GPU 183 #if SK_SUPPORT_GPU
184 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceSnapshotAlphaType_Gpu, reporter, ct xInfo) { 184 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceSnapshotAlphaType_Gpu, reporter, ct xInfo) {
185 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 185 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
186 for (auto& isOpaque : { true, false }) { 186 for (auto& isOpaque : { true, false }) {
187 SkAlphaType alphaType = isOpaque ? kOpaque_SkAlphaType : kPremul_SkA lphaType; 187 SkAlphaType alphaType = isOpaque ? kOpaque_SkAlphaType : kPremul_SkA lphaType;
188 auto surface(surface_func(ctxInfo.fGrContext, alphaType, nullptr)); 188 auto surface(surface_func(ctxInfo.grContext(), alphaType, nullptr));
189 test_snapshot_alphatype(reporter, surface, isOpaque); 189 test_snapshot_alphatype(reporter, surface, isOpaque);
190 } 190 }
191 } 191 }
192 } 192 }
193 #endif 193 #endif
194 194
195 static GrBackendObject get_surface_backend_texture_handle( 195 static GrBackendObject get_surface_backend_texture_handle(
196 SkSurface* s, SkSurface::BackendHandleAccess a) { 196 SkSurface* s, SkSurface::BackendHandleAccess a) {
197 return s->getTextureHandle(a); 197 return s->getTextureHandle(a);
198 } 198 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendHandleAccessCopyOnWrite_Gpu, re porter, ctxInfo) { 236 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendHandleAccessCopyOnWrite_Gpu, re porter, ctxInfo) {
237 const SkSurface::BackendHandleAccess accessModes[] = { 237 const SkSurface::BackendHandleAccess accessModes[] = {
238 SkSurface::kFlushRead_BackendHandleAccess, 238 SkSurface::kFlushRead_BackendHandleAccess,
239 SkSurface::kFlushWrite_BackendHandleAccess, 239 SkSurface::kFlushWrite_BackendHandleAccess,
240 SkSurface::kDiscardWrite_BackendHandleAccess, 240 SkSurface::kDiscardWrite_BackendHandleAccess,
241 }; 241 };
242 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 242 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
243 for (auto& handle_access_func : 243 for (auto& handle_access_func :
244 { &get_surface_backend_texture_handle, &get_surface_backend_rend er_target_handle }) { 244 { &get_surface_backend_texture_handle, &get_surface_backend_rend er_target_handle }) {
245 for (auto& accessMode : accessModes) { 245 for (auto& accessMode : accessModes) {
246 auto surface(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaTyp e, nullptr)); 246 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaTy pe, nullptr));
247 test_backend_handle_access_copy_on_write(reporter, surface.get() , accessMode, 247 test_backend_handle_access_copy_on_write(reporter, surface.get() , accessMode,
248 handle_access_func); 248 handle_access_func);
249 } 249 }
250 } 250 }
251 } 251 }
252 } 252 }
253 #endif 253 #endif
254 254
255 static bool same_image(SkImage* a, SkImage* b, 255 static bool same_image(SkImage* a, SkImage* b,
256 std::function<intptr_t(SkImage*)> getImageBackingStore) { 256 std::function<intptr_t(SkImage*)> getImageBackingStore) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 auto surface(create_surface()); 325 auto surface(create_surface());
326 test_unique_image_snap(reporter, surface.get(), false, getImageBackingStore, 326 test_unique_image_snap(reporter, surface.get(), false, getImageBackingStore,
327 getSufaceBackingStore); 327 getSufaceBackingStore);
328 surface = create_direct_surface(); 328 surface = create_direct_surface();
329 test_unique_image_snap(reporter, surface.get(), true, getImageBackingStore, 329 test_unique_image_snap(reporter, surface.get(), true, getImageBackingStore,
330 getSufaceBackingStore); 330 getSufaceBackingStore);
331 } 331 }
332 332
333 #if SK_SUPPORT_GPU 333 #if SK_SUPPORT_GPU
334 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(UniqueImageSnapshot_Gpu, reporter, ctxInfo) { 334 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(UniqueImageSnapshot_Gpu, reporter, ctxInfo) {
335 GrContext* context = ctxInfo.fGrContext; 335 GrContext* context = ctxInfo.grContext();
336 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 336 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
337 auto surface(surface_func(context, kOpaque_SkAlphaType, nullptr)); 337 auto surface(surface_func(context, kOpaque_SkAlphaType, nullptr));
338 338
339 auto imageBackingStore = [reporter](SkImage* image) { 339 auto imageBackingStore = [reporter](SkImage* image) {
340 GrTexture* texture = as_IB(image)->peekTexture(); 340 GrTexture* texture = as_IB(image)->peekTexture();
341 if (!texture) { 341 if (!texture) {
342 ERRORF(reporter, "Not texture backed."); 342 ERRORF(reporter, "Not texture backed.");
343 return static_cast<intptr_t>(0); 343 return static_cast<intptr_t>(0);
344 } 344 }
345 return static_cast<intptr_t>(texture->getUniqueID()); 345 return static_cast<intptr_t>(texture->getUniqueID());
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 // expect a new(er) image, since we claimed we would write 432 // expect a new(er) image, since we claimed we would write
433 REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID()); 433 REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID());
434 REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID()); 434 REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID());
435 } 435 }
436 // No CPU test. 436 // No CPU test.
437 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendHandleAccessIDs_Gpu, reporter, ctxInfo) { 437 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendHandleAccessIDs_Gpu, reporter, ctxInfo) {
438 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 438 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 }) { 439 for (auto& test_func : { &test_backend_handle_unique_id, &test_backend_h andle_gen_id }) {
440 for (auto& handle_access_func : 440 for (auto& handle_access_func :
441 { &get_surface_backend_texture_handle, &get_surface_backend_rend er_target_handle}) { 441 { &get_surface_backend_texture_handle, &get_surface_backend_rend er_target_handle}) {
442 auto surface(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaTyp e, nullptr)); 442 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaTy pe, nullptr));
443 test_func(reporter, surface.get(), handle_access_func); 443 test_func(reporter, surface.get(), handle_access_func);
444 } 444 }
445 } 445 }
446 } 446 }
447 } 447 }
448 #endif 448 #endif
449 449
450 // Verify that the right canvas commands trigger a copy on write. 450 // Verify that the right canvas commands trigger a copy on write.
451 static void test_copy_on_write(skiatest::Reporter* reporter, SkSurface* surface) { 451 static void test_copy_on_write(skiatest::Reporter* reporter, SkSurface* surface) {
452 SkCanvas* canvas = surface->getCanvas(); 452 SkCanvas* canvas = surface->getCanvas();
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 testPaint)) 521 testPaint))
522 EXPECT_COPY_ON_WRITE(drawTextOnPath(testText.c_str(), testText.size(), testP ath, nullptr, \ 522 EXPECT_COPY_ON_WRITE(drawTextOnPath(testText.c_str(), testText.size(), testP ath, nullptr, \
523 testPaint)) 523 testPaint))
524 } 524 }
525 DEF_TEST(SurfaceCopyOnWrite, reporter) { 525 DEF_TEST(SurfaceCopyOnWrite, reporter) {
526 test_copy_on_write(reporter, create_surface().get()); 526 test_copy_on_write(reporter, create_surface().get());
527 } 527 }
528 #if SK_SUPPORT_GPU 528 #if SK_SUPPORT_GPU
529 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceCopyOnWrite_Gpu, reporter, ctxInfo) { 529 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceCopyOnWrite_Gpu, reporter, ctxInfo) {
530 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 530 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
531 auto surface(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaType, nullp tr)); 531 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, null ptr));
532 test_copy_on_write(reporter, surface.get()); 532 test_copy_on_write(reporter, surface.get());
533 } 533 }
534 } 534 }
535 #endif 535 #endif
536 536
537 static void test_writable_after_snapshot_release(skiatest::Reporter* reporter, 537 static void test_writable_after_snapshot_release(skiatest::Reporter* reporter,
538 SkSurface* surface) { 538 SkSurface* surface) {
539 // This test succeeds by not triggering an assertion. 539 // This test succeeds by not triggering an assertion.
540 // The test verifies that the surface remains writable (usable) after 540 // The test verifies that the surface remains writable (usable) after
541 // acquiring and releasing a snapshot without triggering a copy on write. 541 // acquiring and releasing a snapshot without triggering a copy on write.
542 SkCanvas* canvas = surface->getCanvas(); 542 SkCanvas* canvas = surface->getCanvas();
543 canvas->clear(1); 543 canvas->clear(1);
544 surface->makeImageSnapshot(); // Create and destroy SkImage 544 surface->makeImageSnapshot(); // Create and destroy SkImage
545 canvas->clear(2); // Must not assert internally 545 canvas->clear(2); // Must not assert internally
546 } 546 }
547 DEF_TEST(SurfaceWriteableAfterSnapshotRelease, reporter) { 547 DEF_TEST(SurfaceWriteableAfterSnapshotRelease, reporter) {
548 test_writable_after_snapshot_release(reporter, create_surface().get()); 548 test_writable_after_snapshot_release(reporter, create_surface().get());
549 } 549 }
550 #if SK_SUPPORT_GPU 550 #if SK_SUPPORT_GPU
551 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceWriteableAfterSnapshotRelease_Gpu, reporter, ctxInfo) { 551 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceWriteableAfterSnapshotRelease_Gpu, reporter, ctxInfo) {
552 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 552 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
553 auto surface(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaType, nullp tr)); 553 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, null ptr));
554 test_writable_after_snapshot_release(reporter, surface.get()); 554 test_writable_after_snapshot_release(reporter, surface.get());
555 } 555 }
556 } 556 }
557 #endif 557 #endif
558 558
559 #if SK_SUPPORT_GPU 559 #if SK_SUPPORT_GPU
560 static void test_crbug263329(skiatest::Reporter* reporter, 560 static void test_crbug263329(skiatest::Reporter* reporter,
561 SkSurface* surface1, 561 SkSurface* surface1,
562 SkSurface* surface2) { 562 SkSurface* surface2) {
563 // This is a regression test for crbug.com/263329 563 // This is a regression test for crbug.com/263329
(...skipping 20 matching lines...) Expand all
584 REPORTER_ASSERT(reporter, as_IB(image4)->peekTexture() != as_IB(image3)->pee kTexture()); 584 REPORTER_ASSERT(reporter, as_IB(image4)->peekTexture() != as_IB(image3)->pee kTexture());
585 // The following assertion checks crbug.com/263329 585 // The following assertion checks crbug.com/263329
586 REPORTER_ASSERT(reporter, as_IB(image4)->peekTexture() != as_IB(image2)->pee kTexture()); 586 REPORTER_ASSERT(reporter, as_IB(image4)->peekTexture() != as_IB(image2)->pee kTexture());
587 REPORTER_ASSERT(reporter, as_IB(image4)->peekTexture() != as_IB(image1)->pee kTexture()); 587 REPORTER_ASSERT(reporter, as_IB(image4)->peekTexture() != as_IB(image1)->pee kTexture());
588 REPORTER_ASSERT(reporter, as_IB(image3)->peekTexture() != as_IB(image2)->pee kTexture()); 588 REPORTER_ASSERT(reporter, as_IB(image3)->peekTexture() != as_IB(image2)->pee kTexture());
589 REPORTER_ASSERT(reporter, as_IB(image3)->peekTexture() != as_IB(image1)->pee kTexture()); 589 REPORTER_ASSERT(reporter, as_IB(image3)->peekTexture() != as_IB(image1)->pee kTexture());
590 REPORTER_ASSERT(reporter, as_IB(image2)->peekTexture() != as_IB(image1)->pee kTexture()); 590 REPORTER_ASSERT(reporter, as_IB(image2)->peekTexture() != as_IB(image1)->pee kTexture());
591 } 591 }
592 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceCRBug263329_Gpu, reporter, ctxInfo) { 592 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceCRBug263329_Gpu, reporter, ctxInfo) {
593 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 593 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
594 auto surface1(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaType, null ptr)); 594 auto surface1(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nul lptr));
595 auto surface2(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaType, null ptr)); 595 auto surface2(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nul lptr));
596 test_crbug263329(reporter, surface1.get(), surface2.get()); 596 test_crbug263329(reporter, surface1.get(), surface2.get());
597 } 597 }
598 } 598 }
599 #endif 599 #endif
600 600
601 DEF_TEST(SurfaceGetTexture, reporter) { 601 DEF_TEST(SurfaceGetTexture, reporter) {
602 auto surface(create_surface()); 602 auto surface(create_surface());
603 sk_sp<SkImage> image(surface->makeImageSnapshot()); 603 sk_sp<SkImage> image(surface->makeImageSnapshot());
604 REPORTER_ASSERT(reporter, as_IB(image)->peekTexture() == nullptr); 604 REPORTER_ASSERT(reporter, as_IB(image)->peekTexture() == nullptr);
605 surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode); 605 surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode);
606 REPORTER_ASSERT(reporter, as_IB(image)->peekTexture() == nullptr); 606 REPORTER_ASSERT(reporter, as_IB(image)->peekTexture() == nullptr);
607 } 607 }
608 #if SK_SUPPORT_GPU 608 #if SK_SUPPORT_GPU
609 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfacepeekTexture_Gpu, reporter, ctxInfo) { 609 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfacepeekTexture_Gpu, reporter, ctxInfo) {
610 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 610 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
611 auto surface(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaType, nullp tr)); 611 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, null ptr));
612 sk_sp<SkImage> image(surface->makeImageSnapshot()); 612 sk_sp<SkImage> image(surface->makeImageSnapshot());
613 GrTexture* texture = as_IB(image)->peekTexture(); 613 GrTexture* texture = as_IB(image)->peekTexture();
614 REPORTER_ASSERT(reporter, texture); 614 REPORTER_ASSERT(reporter, texture);
615 REPORTER_ASSERT(reporter, 0 != texture->getTextureHandle()); 615 REPORTER_ASSERT(reporter, 0 != texture->getTextureHandle());
616 surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode); 616 surface->notifyContentWillChange(SkSurface::kDiscard_ContentChangeMode);
617 REPORTER_ASSERT(reporter, as_IB(image)->peekTexture() == texture); 617 REPORTER_ASSERT(reporter, as_IB(image)->peekTexture() == texture);
618 } 618 }
619 } 619 }
620 #endif 620 #endif
621 621
(...skipping 13 matching lines...) Expand all
635 } 635 }
636 636
637 static SkBudgeted is_budgeted(const sk_sp<SkImage> image) { 637 static SkBudgeted is_budgeted(const sk_sp<SkImage> image) {
638 return is_budgeted(image.get()); 638 return is_budgeted(image.get());
639 } 639 }
640 640
641 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceBudget, reporter, ctxInfo) { 641 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceBudget, reporter, ctxInfo) {
642 SkImageInfo info = SkImageInfo::MakeN32Premul(8,8); 642 SkImageInfo info = SkImageInfo::MakeN32Premul(8,8);
643 for (auto sbudgeted : { SkBudgeted::kNo, SkBudgeted::kYes }) { 643 for (auto sbudgeted : { SkBudgeted::kNo, SkBudgeted::kYes }) {
644 for (auto ibudgeted : { SkBudgeted::kNo, SkBudgeted::kYes }) { 644 for (auto ibudgeted : { SkBudgeted::kNo, SkBudgeted::kYes }) {
645 auto surface(SkSurface::MakeRenderTarget(ctxInfo.fGrContext, sbudget ed, info)); 645 auto surface(SkSurface::MakeRenderTarget(ctxInfo.grContext(), sbudge ted, info));
646 SkASSERT(surface); 646 SkASSERT(surface);
647 REPORTER_ASSERT(reporter, sbudgeted == is_budgeted(surface)); 647 REPORTER_ASSERT(reporter, sbudgeted == is_budgeted(surface));
648 648
649 sk_sp<SkImage> image(surface->makeImageSnapshot(ibudgeted)); 649 sk_sp<SkImage> image(surface->makeImageSnapshot(ibudgeted));
650 650
651 // Initially the image shares a texture with the surface, and the su rface decides 651 // Initially the image shares a texture with the surface, and the su rface decides
652 // whether it is budgeted or not. 652 // whether it is budgeted or not.
653 REPORTER_ASSERT(reporter, sbudgeted == is_budgeted(surface)); 653 REPORTER_ASSERT(reporter, sbudgeted == is_budgeted(surface));
654 REPORTER_ASSERT(reporter, sbudgeted == is_budgeted(image)); 654 REPORTER_ASSERT(reporter, sbudgeted == is_budgeted(image));
655 655
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 } 699 }
700 } 700 }
701 } 701 }
702 #if SK_SUPPORT_GPU 702 #if SK_SUPPORT_GPU
703 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceNoCanvas_Gpu, reporter, ctxInfo) { 703 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceNoCanvas_Gpu, reporter, ctxInfo) {
704 SkSurface::ContentChangeMode modes[] = 704 SkSurface::ContentChangeMode modes[] =
705 { SkSurface::kDiscard_ContentChangeMode, SkSurface::kRetain_ContentC hangeMode}; 705 { SkSurface::kDiscard_ContentChangeMode, SkSurface::kRetain_ContentC hangeMode};
706 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { 706 for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) {
707 for (auto& test_func : { &test_no_canvas1, &test_no_canvas2 }) { 707 for (auto& test_func : { &test_no_canvas1, &test_no_canvas2 }) {
708 for (auto& mode : modes) { 708 for (auto& mode : modes) {
709 auto surface(surface_func(ctxInfo.fGrContext, kPremul_SkAlphaTyp e, nullptr)); 709 auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaTy pe, nullptr));
710 test_func(reporter, surface.get(), mode); 710 test_func(reporter, surface.get(), mode);
711 } 711 }
712 } 712 }
713 } 713 }
714 } 714 }
715 #endif 715 #endif
716 716
717 static void check_rowbytes_remain_consistent(SkSurface* surface, skiatest::Repor ter* reporter) { 717 static void check_rowbytes_remain_consistent(SkSurface* surface, skiatest::Repor ter* reporter) {
718 SkPixmap surfacePM; 718 SkPixmap surfacePM;
719 REPORTER_ASSERT(reporter, surface->peekPixels(&surfacePM)); 719 REPORTER_ASSERT(reporter, surface->peekPixels(&surfacePM));
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 ERRORF(reporter, 831 ERRORF(reporter,
832 "%s but read 0x%08x (instead of 0x%08x) at %x,%d", msg.c_ str(), pixel, 832 "%s but read 0x%08x (instead of 0x%08x) at %x,%d", msg.c_ str(), pixel,
833 expectedValue, x, y); 833 expectedValue, x, y);
834 return; 834 return;
835 } 835 }
836 } 836 }
837 } 837 }
838 } 838 }
839 839
840 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceClear_Gpu, reporter, ctxInfo) { 840 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceClear_Gpu, reporter, ctxInfo) {
841 GrContext* context = ctxInfo.fGrContext; 841 GrContext* context = ctxInfo.grContext();
842 842
843 std::function<GrSurface*(SkSurface*)> grSurfaceGetters[] = { 843 std::function<GrSurface*(SkSurface*)> grSurfaceGetters[] = {
844 [] (SkSurface* s){ 844 [] (SkSurface* s){
845 GrDrawContext* dc = s->getCanvas()->internal_private_accessTopLayerD rawContext(); 845 GrDrawContext* dc = s->getCanvas()->internal_private_accessTopLayerD rawContext();
846 return dc->accessRenderTarget(); }, 846 return dc->accessRenderTarget(); },
847 [] (SkSurface* s){ 847 [] (SkSurface* s){
848 SkBaseDevice* d = 848 SkBaseDevice* d =
849 s->getCanvas()->getDevice_just_for_deprecated_compatibility_test ing(); 849 s->getCanvas()->getDevice_just_for_deprecated_compatibility_test ing();
850 return d->accessRenderTarget(); }, 850 return d->accessRenderTarget(); },
851 [] (SkSurface* s){ sk_sp<SkImage> i(s->makeImageSnapshot()); 851 [] (SkSurface* s){ sk_sp<SkImage> i(s->makeImageSnapshot());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 for (int x = 0; x < kW && !stop; ++x) { 907 for (int x = 0; x < kW && !stop; ++x) {
908 REPORTER_ASSERT(reporter, origColorPM == pixels[x + y * kW]); 908 REPORTER_ASSERT(reporter, origColorPM == pixels[x + y * kW]);
909 if (origColorPM != pixels[x + y * kW]) { 909 if (origColorPM != pixels[x + y * kW]) {
910 stop = true; 910 stop = true;
911 } 911 }
912 } 912 }
913 } 913 }
914 } 914 }
915 915
916 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfacePartialDraw_Gpu, reporter, ctxInfo) { 916 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfacePartialDraw_Gpu, reporter, ctxInfo) {
917 GrGpu* gpu = ctxInfo.fGrContext->getGpu(); 917 GrGpu* gpu = ctxInfo.grContext()->getGpu();
918 if (!gpu) { 918 if (!gpu) {
919 return; 919 return;
920 } 920 }
921 static const uint32_t kOrigColor = 0xFFAABBCC; 921 static const uint32_t kOrigColor = 0xFFAABBCC;
922 922
923 for (auto& surfaceFunc : {&create_gpu_surface_backend_texture, 923 for (auto& surfaceFunc : {&create_gpu_surface_backend_texture,
924 &create_gpu_surface_backend_texture_as_render_targ et}) { 924 &create_gpu_surface_backend_texture_as_render_targ et}) {
925 // Validate that we can draw to the canvas and that the original texture color is 925 // Validate that we can draw to the canvas and that the original texture color is
926 // preserved in pixels that aren't rendered to via the surface. 926 // preserved in pixels that aren't rendered to via the surface.
927 // This works only for non-multisampled case. 927 // This works only for non-multisampled case.
928 GrBackendObject textureObject; 928 GrBackendObject textureObject;
929 auto surface = surfaceFunc(ctxInfo.fGrContext, 0, kOrigColor, &textureOb ject); 929 auto surface = surfaceFunc(ctxInfo.grContext(), 0, kOrigColor, &textureO bject);
930 if (surface) { 930 if (surface) {
931 test_surface_draw_partially(reporter, surface, kOrigColor); 931 test_surface_draw_partially(reporter, surface, kOrigColor);
932 surface.reset(); 932 surface.reset();
933 gpu->deleteTestingOnlyBackendTexture(textureObject); 933 gpu->deleteTestingOnlyBackendTexture(textureObject);
934 } 934 }
935 } 935 }
936 } 936 }
937 937
938 938
939 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceAttachStencil_Gpu, reporter, ctxInf o) { 939 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceAttachStencil_Gpu, reporter, ctxInf o) {
940 GrGpu* gpu = ctxInfo.fGrContext->getGpu(); 940 GrGpu* gpu = ctxInfo.grContext()->getGpu();
941 if (!gpu) { 941 if (!gpu) {
942 return; 942 return;
943 } 943 }
944 static const uint32_t kOrigColor = 0xFFAABBCC; 944 static const uint32_t kOrigColor = 0xFFAABBCC;
945 945
946 for (auto& surfaceFunc : {&create_gpu_surface_backend_texture, 946 for (auto& surfaceFunc : {&create_gpu_surface_backend_texture,
947 &create_gpu_surface_backend_texture_as_render_targ et}) { 947 &create_gpu_surface_backend_texture_as_render_targ et}) {
948 for (int sampleCnt : {0, 4, 8}) { 948 for (int sampleCnt : {0, 4, 8}) {
949 GrBackendObject textureObject; 949 GrBackendObject textureObject;
950 auto surface = surfaceFunc(ctxInfo.fGrContext, sampleCnt, kOrigColor , &textureObject); 950 auto surface = surfaceFunc(ctxInfo.grContext(), sampleCnt, kOrigColo r, &textureObject);
951 951
952 if (!surface && sampleCnt > 0) { 952 if (!surface && sampleCnt > 0) {
953 // Certain platforms don't support MSAA, skip these. 953 // Certain platforms don't support MSAA, skip these.
954 continue; 954 continue;
955 } 955 }
956 956
957 // Validate that we can attach a stencil buffer to an SkSurface crea ted by either of 957 // Validate that we can attach a stencil buffer to an SkSurface crea ted by either of
958 // our surface functions. 958 // our surface functions.
959 GrRenderTarget* rt = surface->getCanvas()->internal_private_accessTo pLayerDrawContext() 959 GrRenderTarget* rt = surface->getCanvas()->internal_private_accessTo pLayerDrawContext()
960 ->accessRenderTarget(); 960 ->accessRenderTarget();
961 REPORTER_ASSERT(reporter, 961 REPORTER_ASSERT(reporter,
962 ctxInfo.fGrContext->resourceProvider()->attachStenci lAttachment(rt)); 962 ctxInfo.grContext()->resourceProvider()->attachStenc ilAttachment(rt));
963 gpu->deleteTestingOnlyBackendTexture(textureObject); 963 gpu->deleteTestingOnlyBackendTexture(textureObject);
964 } 964 }
965 } 965 }
966 } 966 }
967 #endif 967 #endif
OLDNEW
« no previous file with comments | « tests/SpecialSurfaceTest.cpp ('k') | tests/TessellatingPathRendererTests.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698