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

Unified Diff: tests/ImageTest.cpp

Issue 1631053003: Add SkImage factory method that forces image to be resolved to a texture. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: static->class method Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/image/SkImage_Gpu.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/ImageTest.cpp
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index 575fc1c287b6fd30a868b5a580031dbbb4229ade..1bf56c53a2d85acdf1dd17fda7ec59ff9870e020 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -5,6 +5,9 @@
* found in the LICENSE file.
*/
+#include <functional>
+#include "DMGpuSupport.h"
+
#include "SkBitmap.h"
#include "SkCanvas.h"
#include "SkData.h"
@@ -21,12 +24,6 @@
#include "SkUtils.h"
#include "Test.h"
-#if SK_SUPPORT_GPU
-#include "GrContext.h"
-#include "gl/GrGLInterface.h"
-#include "gl/GrGLUtil.h"
-#endif
-
static void assert_equal(skiatest::Reporter* reporter, SkImage* a, const SkIRect* subsetA,
SkImage* b) {
const int widthA = subsetA ? subsetA->width() : a->width();
@@ -87,6 +84,15 @@ static SkImage* create_data_image() {
SkAutoTUnref<SkData> data(create_image_data(&info));
return SkImage::NewRasterData(info, data, info.minRowBytes());
}
+#if SK_SUPPORT_GPU // not gpu-specific but currently only used in GPU tests
+static SkImage* create_picture_image() {
+ SkPictureRecorder recorder;
+ SkCanvas* canvas = recorder.beginRecording(10, 10);
+ canvas->clear(SK_ColorCYAN);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
+ return SkImage::NewFromPicture(picture, SkISize::Make(10, 10), nullptr, nullptr);
+};
+#endif
// Want to ensure that our Release is called when the owning image is destroyed
struct RasterDataHolder {
RasterDataHolder() : fReleaseCount(0) {}
@@ -376,6 +382,64 @@ DEF_GPUTEST_FOR_NATIVE_CONTEXT(SkImage_Gpu2Cpu, reporter, context) {
REPORTER_ASSERT(reporter, !SkBitmapCache::Find(uniqueID, &cachedBitmap));
}
}
+
+DEF_GPUTEST_FOR_NATIVE_CONTEXT(SkImage_newTextureImage, reporter, context, glContext) {
+ GrContextFactory otherFactory;
+ GrContextFactory::ContextInfo otherContextInfo =
+ otherFactory.getContextInfo(GrContextFactory::kNative_GLContextType);
+ glContext->makeCurrent();
+
+ std::function<SkImage*()> imageFactories[] = {
+ create_image,
+ create_codec_image,
+ create_data_image,
+ // Create an image from a picture.
+ create_picture_image,
+ // Create a texture image.
+ [context] { return create_gpu_image(context); },
+ // Create a texture image in a another GrContext.
+ [glContext, otherContextInfo] {
+ otherContextInfo.fGLContext->makeCurrent();
+ SkImage* otherContextImage = create_gpu_image(otherContextInfo.fGrContext);
+ glContext->makeCurrent();
+ return otherContextImage;
+ }
+ };
+
+ for (auto factory : imageFactories) {
+ SkAutoTUnref<SkImage> image(factory());
+ if (!image) {
+ ERRORF(reporter, "Error creating image.");
+ continue;
+ }
+ GrTexture* origTexture = as_IB(image)->peekTexture();
+
+ SkAutoTUnref<SkImage> texImage(image->newTextureImage(context));
+ if (!texImage) {
+ // We execpt to fail if image comes from a different GrContext.
+ if (!origTexture || origTexture->getContext() == context) {
+ ERRORF(reporter, "newTextureImage failed.");
+ }
+ continue;
+ }
+ GrTexture* copyTexture = as_IB(texImage)->peekTexture();
+ if (!copyTexture) {
+ ERRORF(reporter, "newTextureImage returned non-texture image.");
+ continue;
+ }
+ if (origTexture) {
+ if (origTexture != copyTexture) {
+ ERRORF(reporter, "newTextureImage made unnecessary texture copy.");
+ }
+ }
+ if (image->width() != texImage->width() || image->height() != texImage->height()) {
+ ERRORF(reporter, "newTextureImage changed the image size.");
+ }
+ if (image->isOpaque() != texImage->isOpaque()) {
+ ERRORF(reporter, "newTextureImage changed image opaqueness.");
+ }
+ }
+}
#endif
// https://bug.skia.org/4390
« no previous file with comments | « src/image/SkImage_Gpu.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698