diff options
author | Brian Osman <brianosman@google.com> | 2017-11-07 10:37:00 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-11-07 15:59:38 +0000 |
commit | 63bc48d09323a62c8c67237fc66ad6ec7105e973 (patch) | |
tree | 465e2fafce0cdf0763de0aa28f3e42e283cf2deb /tests/ImageTest.cpp | |
parent | 14efcbf3497e6a280cc141e6dec179b4ad4565af (diff) |
Add MakeCrossContextFromPixmap
This operates just like MakeCrossContextFromEncoded, but starting from
raster data. This version is defensive (always uses copies if a raster
image needs to be made).
Bug: skia:
Change-Id: Ibc2b9a235c89a41fbbfd022d943f15ac212d0677
Reviewed-on: https://skia-review.googlesource.com/68205
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tests/ImageTest.cpp')
-rw-r--r-- | tests/ImageTest.cpp | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp index 8eecbbd0a5..49ef86847d 100644 --- a/tests/ImageTest.cpp +++ b/tests/ImageTest.cpp @@ -810,12 +810,10 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkImage_NewFromTextureRelease, reporter, c ctxInfo.grContext()->getGpu()->deleteTestingOnlyBackendTexture(backendTexHandle); } -DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { +static void test_cross_context_image(skiatest::Reporter* reporter, + std::function<sk_sp<SkImage>(GrContext*)> imageMaker) { GrContextFactory testFactory; - sk_sp<SkData> data = GetResourceAsData("mandrill_128.png"); - SkASSERT(data.get()); - for (int i = 0; i < GrContextFactory::kContextTypeCnt; ++i) { GrContextFactory::ContextType ctxType = static_cast<GrContextFactory::ContextType>(i); ContextInfo ctxInfo = testFactory.getContextInfo(ctxType); @@ -841,7 +839,7 @@ DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { // Case #1: Create image, free image { - sk_sp<SkImage> refImg(SkImage::MakeCrossContextFromEncoded(ctx, data, false, nullptr)); + sk_sp<SkImage> refImg(imageMaker(ctx)); refImg.reset(nullptr); // force a release of the image } @@ -851,7 +849,7 @@ DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { // Case #2: Create image, draw, flush, free image { - sk_sp<SkImage> refImg(SkImage::MakeCrossContextFromEncoded(ctx, data, false, nullptr)); + sk_sp<SkImage> refImg(imageMaker(ctx)); canvas->drawImage(refImg, 0, 0); canvas->flush(); @@ -861,7 +859,7 @@ DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { // Case #3: Create image, draw, free image, flush { - sk_sp<SkImage> refImg(SkImage::MakeCrossContextFromEncoded(ctx, data, false, nullptr)); + sk_sp<SkImage> refImg(imageMaker(ctx)); canvas->drawImage(refImg, 0, 0); refImg.reset(nullptr); // force a release of the image @@ -887,7 +885,7 @@ DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { // Case #4: Create image, draw*, flush*, free image { testContext->makeCurrent(); - sk_sp<SkImage> refImg(SkImage::MakeCrossContextFromEncoded(ctx, data, false, nullptr)); + sk_sp<SkImage> refImg(imageMaker(ctx)); otherTestContext->makeCurrent(); canvas->drawImage(refImg, 0, 0); @@ -900,7 +898,7 @@ DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { // Case #5: Create image, draw*, free image, flush* { testContext->makeCurrent(); - sk_sp<SkImage> refImg(SkImage::MakeCrossContextFromEncoded(ctx, data, false, nullptr)); + sk_sp<SkImage> refImg(imageMaker(ctx)); otherTestContext->makeCurrent(); canvas->drawImage(refImg, 0, 0); @@ -923,7 +921,7 @@ DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { // Case #6: Verify that only one context can be using the image at a time { testContext->makeCurrent(); - sk_sp<SkImage> refImg(SkImage::MakeCrossContextFromEncoded(ctx, data, false, nullptr)); + sk_sp<SkImage> refImg(imageMaker(ctx)); // Any context should be able to borrow the texture at this point sk_sp<SkColorSpace> texColorSpace; @@ -960,6 +958,25 @@ DEF_GPUTEST(SkImage_MakeCrossContextRelease, reporter, /*factory*/) { } } +DEF_GPUTEST(SkImage_MakeCrossContextFromEncodedRelease, reporter, /*factory*/) { + sk_sp<SkData> data = GetResourceAsData("mandrill_128.png"); + SkASSERT(data.get()); + + test_cross_context_image(reporter, [&data](GrContext* ctx) { + return SkImage::MakeCrossContextFromEncoded(ctx, data, false, nullptr); + }); +} + +DEF_GPUTEST(SkImage_MakeCrossContextFromPixmapRelease, reporter, /*factory*/) { + SkBitmap bitmap; + SkPixmap pixmap; + SkAssertResult(GetResourceAsBitmap("mandrill_128.png", &bitmap) && bitmap.peekPixels(&pixmap)); + + test_cross_context_image(reporter, [&pixmap](GrContext* ctx) { + return SkImage::MakeCrossContextFromPixmap(ctx, pixmap, false, nullptr); + }); +} + static void check_images_same(skiatest::Reporter* reporter, const SkImage* a, const SkImage* b) { if (a->width() != b->width() || a->height() != b->height()) { ERRORF(reporter, "Images must have the same size"); |