aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/DeviceTest.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2016-07-18 08:31:31 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-07-18 08:31:31 -0700
commit6451a0cea6007aff54565ec82e2f86cb1d32ecc7 (patch)
treec9643e2e2cfc4e8152be249ea5ab4716ed43825e /tests/DeviceTest.cpp
parentf023e6879c63e5d223e89707a714f18688a93a4a (diff)
Add makeSpecial calls to SkGpuDevice
Diffstat (limited to 'tests/DeviceTest.cpp')
-rw-r--r--tests/DeviceTest.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/tests/DeviceTest.cpp b/tests/DeviceTest.cpp
new file mode 100644
index 0000000000..d6bd1bfe47
--- /dev/null
+++ b/tests/DeviceTest.cpp
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkBitmapDevice.h"
+#include "SkDevice.h"
+#include "SkSpecialImage.h"
+
+#if SK_SUPPORT_GPU
+#include "SkGpuDevice.h"
+#endif
+
+#include "Test.h"
+
+class DeviceTestingAccess {
+public:
+ static sk_sp<SkSpecialImage> MakeSpecial(SkBaseDevice* dev, const SkBitmap& bm) {
+ return dev->makeSpecial(bm);
+ }
+
+ static sk_sp<SkSpecialImage> MakeSpecial(SkBaseDevice* dev, SkImage* img) {
+ return dev->makeSpecial(img);
+ }
+
+ static sk_sp<SkSpecialImage> SnapSpecial(SkBaseDevice* dev) {
+ return dev->snapSpecial();
+ }
+};
+
+// TODO: re-enable this when Raster methods are implemented
+#if 0
+DEF_TEST(SpecialImage_BitmapDevice, reporter) {
+ static const int kWidth = 100;
+ static const int kHeight = 90;
+
+ SkImageInfo ii = SkImageInfo::MakeN32Premul(2*kWidth, 2*kHeight);
+
+ SkAutoTUnref<SkBaseDevice> bmDev(SkBitmapDevice::Create(ii));
+
+ SkBitmap bm;
+ bm.tryAllocN32Pixels(kWidth, kHeight);
+
+ // Create a raster-backed special image from a raster-backed SkBitmap
+ sk_sp<SkSpecialImage> special = DeviceTestingAccess::MakeSpecial(bmDev.get(), bm);
+ SkASSERT(!special->isTextureBacked());
+ SkASSERT(kWidth == special->width());
+ SkASSERT(kHeight == special->height());
+ SkASSERT(bm.getGenerationID() == special->uniqueID());
+ SkASSERT(SkIRect::MakeWH(kWidth, kHeight) == special->subset());
+
+ // Create a raster-backed special image from a raster-backed SkImage
+ sk_sp<SkImage> image(SkImage::MakeFromBitmap(bm));
+ special = DeviceTestingAccess::MakeSpecial(bmDev.get(), image.get());
+ SkASSERT(!special->isTextureBacked());
+ SkASSERT(kWidth == special->width());
+ SkASSERT(kHeight == special->height());
+ SkASSERT(bm.getGenerationID() == special->uniqueID());
+ SkASSERT(SkIRect::MakeWH(kWidth, kHeight) == special->subset());
+
+ // Snap the device as a raster-backed special image
+ special = DeviceTestingAccess::SnapSpecial(bmDev.get());
+ SkASSERT(!special->isTextureBacked());
+ SkASSERT(2*kWidth == special->width());
+ SkASSERT(2*kHeight == special->height());
+ SkASSERT(SkIRect::MakeWH(2*kWidth, 2*kHeight) == special->subset());
+}
+#endif
+
+
+#if SK_SUPPORT_GPU
+
+DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_GPUDevice, reporter, ctxInfo) {
+ GrContext* context = ctxInfo.grContext();
+
+ static const int kWidth = 100;
+ static const int kHeight = 90;
+
+ SkImageInfo ii = SkImageInfo::MakeN32Premul(2*kWidth, 2*kHeight);
+
+ sk_sp<SkBaseDevice> gpuDev(SkGpuDevice::Make(context, SkBudgeted::kNo, ii,
+ 0, nullptr, SkGpuDevice::kClear_InitContents));
+
+ SkBitmap bm;
+ SkAssertResult(bm.tryAllocN32Pixels(kWidth, kHeight));
+
+ // Create a gpu-backed special image from a raster-backed SkBitmap
+ sk_sp<SkSpecialImage> special = DeviceTestingAccess::MakeSpecial(gpuDev.get(), bm);
+ SkASSERT(special->isTextureBacked());
+ SkASSERT(kWidth == special->width());
+ SkASSERT(kHeight == special->height());
+ SkASSERT(bm.getGenerationID() == special->uniqueID());
+ SkASSERT(SkIRect::MakeWH(kWidth, kHeight) == special->subset());
+
+ // Create a gpu-backed special image from a raster-backed SkImage
+ sk_sp<SkImage> image(SkImage::MakeFromBitmap(bm));
+ special = DeviceTestingAccess::MakeSpecial(gpuDev.get(), image.get());
+ SkASSERT(special->isTextureBacked());
+ SkASSERT(kWidth == special->width());
+ SkASSERT(kHeight == special->height());
+ // TODO: Hmmm, this is a bit unexpected
+ SkASSERT(image->uniqueID() != special->uniqueID());
+ SkASSERT(SkIRect::MakeWH(kWidth, kHeight) == special->subset());
+
+ // Create a gpu-backed special image from a gpu-backed SkImage
+ image = image->makeTextureImage(context);
+ special = DeviceTestingAccess::MakeSpecial(gpuDev.get(), image.get());
+ SkASSERT(special->isTextureBacked());
+ SkASSERT(kWidth == special->width());
+ SkASSERT(kHeight == special->height());
+ SkASSERT(image->uniqueID() == special->uniqueID());
+ SkASSERT(SkIRect::MakeWH(kWidth, kHeight) == special->subset());
+
+ // Snap the device as a gpu-backed special image
+ special = DeviceTestingAccess::SnapSpecial(gpuDev.get());
+ SkASSERT(special->isTextureBacked());
+ SkASSERT(2*kWidth == special->width());
+ SkASSERT(2*kHeight == special->height());
+ SkASSERT(SkIRect::MakeWH(2*kWidth, 2*kHeight) == special->subset());
+}
+
+#endif