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

Side by Side Diff: tests/ImageTest.cpp

Issue 1446453003: Generate list of GPU contexts outside SurfaceTest tests (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: msvc fixes Created 5 years, 1 month 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 | « src/gpu/GrContextFactory.cpp ('k') | tests/SurfaceTest.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 2015 Google Inc. 2 * Copyright 2015 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 "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkData.h" 10 #include "SkData.h"
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 SkData* fData; 408 SkData* fData;
409 409
410 static void Release(const void* pixels, void* context) { 410 static void Release(const void* pixels, void* context) {
411 ReleaseDataContext* state = (ReleaseDataContext*)context; 411 ReleaseDataContext* state = (ReleaseDataContext*)context;
412 REPORTER_ASSERT(state->fReporter, state->fData); 412 REPORTER_ASSERT(state->fReporter, state->fData);
413 state->fData->unref(); 413 state->fData->unref();
414 state->fData = nullptr; 414 state->fData = nullptr;
415 } 415 }
416 }; 416 };
417 417
418 // May we (soon) eliminate the need to keep testing this, by hiding the bloody d evice!
419 #include "SkDevice.h"
420 static uint32_t get_legacy_gen_id(SkSurface* surf) {
421 SkBaseDevice* device = surf->getCanvas()->getDevice_just_for_deprecated_comp atibility_testing();
422 return device->accessBitmap(false).getGenerationID();
423 }
424
425 /*
426 * Test legacy behavor of bumping the surface's device's bitmap's genID when we access its
427 * texture handle for writing.
428 *
429 * Note: this needs to be tested separately from checking newImageSnapshot, as calling that
430 * can also incidentally bump the genID (when a new backing surface is created) .
431 */
432 template <class F>
433 static void test_texture_handle_genID(skiatest::Reporter* reporter, SkSurface* s urf, F f) {
434 const uint32_t gen0 = get_legacy_gen_id(surf);
435 f(surf, SkSurface::kFlushRead_BackendHandleAccess);
436 const uint32_t gen1 = get_legacy_gen_id(surf);
437 REPORTER_ASSERT(reporter, gen0 == gen1);
438
439 f(surf, SkSurface::kFlushWrite_BackendHandleAccess);
440 const uint32_t gen2 = get_legacy_gen_id(surf);
441 REPORTER_ASSERT(reporter, gen0 != gen2);
442
443 f(surf, SkSurface::kDiscardWrite_BackendHandleAccess);
444 const uint32_t gen3 = get_legacy_gen_id(surf);
445 REPORTER_ASSERT(reporter, gen0 != gen3);
446 REPORTER_ASSERT(reporter, gen2 != gen3);
447 }
448
449 template <class F>
450 static void test_backend_handle(skiatest::Reporter* reporter, SkSurface* surf, F f) {
451 SkAutoTUnref<SkImage> image0(surf->newImageSnapshot());
452 GrBackendObject obj = f(surf, SkSurface::kFlushRead_BackendHandleAccess);
453 REPORTER_ASSERT(reporter, obj != 0);
454 SkAutoTUnref<SkImage> image1(surf->newImageSnapshot());
455 // just read access should not affect the snapshot
456 REPORTER_ASSERT(reporter, image0->uniqueID() == image1->uniqueID());
457
458 obj = f(surf, SkSurface::kFlushWrite_BackendHandleAccess);
459 REPORTER_ASSERT(reporter, obj != 0);
460 SkAutoTUnref<SkImage> image2(surf->newImageSnapshot());
461 // expect a new image, since we claimed we would write
462 REPORTER_ASSERT(reporter, image0->uniqueID() != image2->uniqueID());
463
464 obj = f(surf, SkSurface::kDiscardWrite_BackendHandleAccess);
465 REPORTER_ASSERT(reporter, obj != 0);
466 SkAutoTUnref<SkImage> image3(surf->newImageSnapshot());
467 // expect a new(er) image, since we claimed we would write
468 REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID());
469 REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID());
470 }
471
472 static SkImage* create_image(skiatest::Reporter* reporter, 418 static SkImage* create_image(skiatest::Reporter* reporter,
473 ImageType imageType, GrContext* context, SkColor co lor, 419 ImageType imageType, GrContext* context, SkColor co lor,
474 ReleaseDataContext* releaseContext) { 420 ReleaseDataContext* releaseContext) {
475 const SkPMColor pmcolor = SkPreMultiplyColor(color); 421 const SkPMColor pmcolor = SkPreMultiplyColor(color);
476 const SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10); 422 const SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10);
477 const size_t rowBytes = info.minRowBytes(); 423 const size_t rowBytes = info.minRowBytes();
478 const size_t size = rowBytes * info.height(); 424 const size_t size = rowBytes * info.height();
479 425
480 SkAutoTUnref<SkData> data(SkData::NewUninitialized(size)); 426 SkAutoTUnref<SkData> data(SkData::NewUninitialized(size));
481 void* addr = data->writable_data(); 427 void* addr = data->writable_data();
482 sk_memset32((SkPMColor*)addr, pmcolor, SkToInt(size >> 2)); 428 sk_memset32((SkPMColor*)addr, pmcolor, SkToInt(size >> 2));
483 429
484 switch (imageType) { 430 switch (imageType) {
485 case kRasterCopy_ImageType: 431 case kRasterCopy_ImageType:
486 return SkImage::NewRasterCopy(info, addr, rowBytes); 432 return SkImage::NewRasterCopy(info, addr, rowBytes);
487 case kRasterData_ImageType: 433 case kRasterData_ImageType:
488 return SkImage::NewRasterData(info, data, rowBytes); 434 return SkImage::NewRasterData(info, data, rowBytes);
489 case kRasterProc_ImageType: 435 case kRasterProc_ImageType:
490 SkASSERT(releaseContext); 436 SkASSERT(releaseContext);
491 releaseContext->fData = SkRef(data.get()); 437 releaseContext->fData = SkRef(data.get());
492 return SkImage::NewFromRaster(info, addr, rowBytes, 438 return SkImage::NewFromRaster(info, addr, rowBytes,
493 ReleaseDataContext::Release, releaseCo ntext); 439 ReleaseDataContext::Release, releaseCo ntext);
494 case kGpu_ImageType: { 440 case kGpu_ImageType: {
495 SkAutoTUnref<SkSurface> surf( 441 SkAutoTUnref<SkSurface> surf(
496 SkSurface::NewRenderTarget(context, SkSurface::kNo_Budgeted, inf o, 0)); 442 SkSurface::NewRenderTarget(context, SkSurface::kNo_Budgeted, inf o, 0));
497 surf->getCanvas()->clear(color); 443 surf->getCanvas()->clear(color);
498 // test our backing texture / rendertarget while were here...
499 auto textureAccessorFunc =
500 [](SkSurface* surf, SkSurface::BackendHandleAccess access) - > GrBackendObject {
501 return surf->getTextureHandle(access); };
502 auto renderTargetAccessorFunc =
503 [](SkSurface* surf, SkSurface::BackendHandleAccess access) - > GrBackendObject {
504 GrBackendObject obj;
505 SkAssertResult(surf->getRenderTargetHandle(&obj, access) );
506 return obj; };
507 test_backend_handle(reporter, surf, textureAccessorFunc);
508 test_backend_handle(reporter, surf, renderTargetAccessorFunc);
509 test_texture_handle_genID(reporter, surf, textureAccessorFunc);
510 test_texture_handle_genID(reporter, surf, renderTargetAccessorFunc);
511
512 // redraw so our returned image looks as expected.
513 surf->getCanvas()->clear(color);
514 return surf->newImageSnapshot(); 444 return surf->newImageSnapshot();
515 } 445 }
516 case kCodec_ImageType: { 446 case kCodec_ImageType: {
517 SkBitmap bitmap; 447 SkBitmap bitmap;
518 bitmap.installPixels(info, addr, rowBytes); 448 bitmap.installPixels(info, addr, rowBytes);
519 SkAutoTUnref<SkData> src( 449 SkAutoTUnref<SkData> src(
520 SkImageEncoder::EncodeData(bitmap, SkImageEncoder::kPNG_Type, 1 00)); 450 SkImageEncoder::EncodeData(bitmap, SkImageEncoder::kPNG_Type, 1 00));
521 return SkImage::NewFromEncoded(src); 451 return SkImage::NewFromEncoded(src);
522 } 452 }
523 } 453 }
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 REPORTER_ASSERT(reporter, !releaseCtx.fIsReleased); 714 REPORTER_ASSERT(reporter, !releaseCtx.fIsReleased);
785 refImg.reset(nullptr); // force a release of the image 715 refImg.reset(nullptr); // force a release of the image
786 REPORTER_ASSERT(reporter, releaseCtx.fIsReleased); 716 REPORTER_ASSERT(reporter, releaseCtx.fIsReleased);
787 } 717 }
788 #endif 718 #endif
789 DEF_GPUTEST(ImageTestsFromSurfaceTestsTODO, reporter, factory) { 719 DEF_GPUTEST(ImageTestsFromSurfaceTestsTODO, reporter, factory) {
790 test_image(reporter); 720 test_image(reporter);
791 test_empty_image(reporter); 721 test_empty_image(reporter);
792 test_imagepeek(reporter, factory); 722 test_imagepeek(reporter, factory);
793 } 723 }
OLDNEW
« no previous file with comments | « src/gpu/GrContextFactory.cpp ('k') | tests/SurfaceTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698