aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/ImageTest.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-11-07 10:37:00 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-07 15:59:38 +0000
commit63bc48d09323a62c8c67237fc66ad6ec7105e973 (patch)
tree465e2fafce0cdf0763de0aa28f3e42e283cf2deb /tests/ImageTest.cpp
parent14efcbf3497e6a280cc141e6dec179b4ad4565af (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.cpp37
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");