aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2018-03-08 10:13:17 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-03-08 15:34:41 +0000
commitf7778979343998e4c10df8ebe43f02e60c700f0d (patch)
treed87e36994c7c74c1df49002bcb7d7b76b262c28a /tests
parentc7c2baf0cf264b9d0d9c0f67cfb827a7e4a5e32c (diff)
Delazify wrapped backend textures/render target proxies
These methods will fail on DDL contexts. This is in preparation for removing the ability to specify origin for lazy proxies. Change-Id: Iadcedfd4fce8ea2590729c974128e5c58cec38a8 Reviewed-on: https://skia-review.googlesource.com/112802 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/DeferredDisplayListTest.cpp163
-rw-r--r--tests/ProxyTest.cpp14
2 files changed, 47 insertions, 130 deletions
diff --git a/tests/DeferredDisplayListTest.cpp b/tests/DeferredDisplayListTest.cpp
index 4b425aed7e..b0c80c32ef 100644
--- a/tests/DeferredDisplayListTest.cpp
+++ b/tests/DeferredDisplayListTest.cpp
@@ -358,143 +358,50 @@ enum class DDLStage { kMakeImage, kDrawImage, kDetach, kDrawDDL };
DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLWrapBackendTest, reporter, ctxInfo) {
GrContext* context = ctxInfo.grContext();
GrGpu* gpu = context->contextPriv().getGpu();
- for (auto lastStage : { DDLStage::kMakeImage, DDLStage::kDrawImage,
- DDLStage::kDetach, DDLStage::kDrawDDL } ) {
- for (auto earlyImageReset : { false , true } ) {
- GrBackendTexture backendTex = gpu->createTestingOnlyBackendTexture(
- nullptr, kSize, kSize, kRGBA_8888_GrPixelConfig, false, GrMipMapped::kNo);
- if (!backendTex.isValid()) {
- continue;
- }
-
- SurfaceParameters params;
-
- sk_sp<SkSurface> s = params.make(context);
- if (!s) {
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- continue;
- }
-
- SkSurfaceCharacterization c;
- SkAssertResult(s->characterize(&c));
-
- std::unique_ptr<SkDeferredDisplayListRecorder> recorder(
- new SkDeferredDisplayListRecorder(c));
-
- SkCanvas* canvas = recorder->getCanvas();
- if (!canvas) {
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- continue;
- }
-
- GrContext* deferredContext = canvas->getGrContext();
- if (!deferredContext) {
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- continue;
- }
-
- sk_sp<SkImage> image = SkImage::MakeFromAdoptedTexture(deferredContext, backendTex,
- kTopLeft_GrSurfaceOrigin,
- kRGBA_8888_SkColorType,
- kPremul_SkAlphaType, nullptr);
- // Adopted Textures are not supported in DDL
- REPORTER_ASSERT(reporter, !image);
-
- TextureReleaseChecker releaseChecker;
- image = SkImage::MakeFromTexture(deferredContext, backendTex,
- kTopLeft_GrSurfaceOrigin,
- kRGBA_8888_SkColorType,
- kPremul_SkAlphaType, nullptr,
- TextureReleaseChecker::Release, &releaseChecker);
-
- REPORTER_ASSERT(reporter, image);
- if (!image) {
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- continue;
- }
+ GrBackendTexture backendTex = gpu->createTestingOnlyBackendTexture(
+ nullptr, kSize, kSize, kRGBA_8888_GrPixelConfig, false, GrMipMapped::kNo);
+ if (!backendTex.isValid()) {
+ return;
+ }
- if (DDLStage::kMakeImage == lastStage) {
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- image.reset();
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- recorder.reset();
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- continue;
- }
+ SurfaceParameters params;
- canvas->drawImage(image.get(), 0, 0);
+ sk_sp<SkSurface> s = params.make(context);
+ if (!s) {
+ gpu->deleteTestingOnlyBackendTexture(&backendTex);
+ return;
+ }
- if (earlyImageReset) {
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- image.reset();
- // Ref should still be held by DDL recorder since we did the draw
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- }
+ SkSurfaceCharacterization c;
+ SkAssertResult(s->characterize(&c));
- if (DDLStage::kDrawImage == lastStage) {
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- recorder.reset();
- if (earlyImageReset) {
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- } else {
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- image.reset();
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- }
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- continue;
- }
+ std::unique_ptr<SkDeferredDisplayListRecorder> recorder(new SkDeferredDisplayListRecorder(c));
- std::unique_ptr<SkDeferredDisplayList> ddl = recorder->detach();
- if (DDLStage::kDetach == lastStage) {
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- recorder.reset();
-#ifndef SK_RASTER_RECORDER_IMPLEMENTATION
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-#endif
- ddl.reset();
- if (earlyImageReset) {
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- } else {
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- image.reset();
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- }
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- continue;
- }
+ SkCanvas* canvas = recorder->getCanvas();
+ if (!canvas) {
+ gpu->deleteTestingOnlyBackendTexture(&backendTex);
+ return;
+ }
- REPORTER_ASSERT(reporter, s->draw(ddl.get()));
+ GrContext* deferredContext = canvas->getGrContext();
+ if (!deferredContext) {
+ gpu->deleteTestingOnlyBackendTexture(&backendTex);
+ return;
+ }
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- recorder.reset();
-#ifndef SK_RASTER_RECORDER_IMPLEMENTATION
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-#endif
- ddl.reset();
-#ifndef SK_RASTER_RECORDER_IMPLEMENTATION
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
-#endif
+ // Wrapped Backend Textures are not supported in DDL
+ sk_sp<SkImage> image =
+ SkImage::MakeFromAdoptedTexture(deferredContext, backendTex, kTopLeft_GrSurfaceOrigin,
+ kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr);
+ REPORTER_ASSERT(reporter, !image);
- // Force all draws to flush and sync by calling a read pixels
- SkImageInfo imageInfo = SkImageInfo::Make(kSize, kSize, kRGBA_8888_SkColorType,
- kPremul_SkAlphaType);
- SkBitmap bitmap;
- bitmap.allocPixels(imageInfo);
- s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0);
-
- if (earlyImageReset) {
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- } else {
- REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
- image.reset();
- REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
- }
+ TextureReleaseChecker releaseChecker;
+ image = SkImage::MakeFromTexture(deferredContext, backendTex, kTopLeft_GrSurfaceOrigin,
+ kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr,
+ TextureReleaseChecker::Release, &releaseChecker);
+ REPORTER_ASSERT(reporter, !image);
- gpu->deleteTestingOnlyBackendTexture(&backendTex);
- }
- }
+ gpu->deleteTestingOnlyBackendTexture(&backendTex);
}
diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp
index 9d52281763..8f5eb13639 100644
--- a/tests/ProxyTest.cpp
+++ b/tests/ProxyTest.cpp
@@ -48,12 +48,17 @@ static void check_rendertarget(skiatest::Reporter* reporter,
REPORTER_ASSERT(reporter, rtProxy->numStencilSamples() == numSamples);
GrSurfaceProxy::UniqueID idBefore = rtProxy->uniqueID();
+ bool preinstantiated = rtProxy->priv().isInstantiated();
REPORTER_ASSERT(reporter, rtProxy->instantiate(provider));
GrRenderTarget* rt = rtProxy->priv().peekRenderTarget();
REPORTER_ASSERT(reporter, rtProxy->uniqueID() == idBefore);
// Deferred resources should always have a different ID from their instantiated rendertarget
- REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() != rt->uniqueID().asUInt());
+ if (preinstantiated) {
+ REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() == rt->uniqueID().asUInt());
+ } else {
+ REPORTER_ASSERT(reporter, rtProxy->uniqueID().asUInt() != rt->uniqueID().asUInt());
+ }
if (SkBackingFit::kExact == fit) {
REPORTER_ASSERT(reporter, rt->width() == rtProxy->width());
@@ -76,12 +81,17 @@ static void check_texture(skiatest::Reporter* reporter,
SkBackingFit fit) {
GrSurfaceProxy::UniqueID idBefore = texProxy->uniqueID();
+ bool preinstantiated = texProxy->priv().isInstantiated();
REPORTER_ASSERT(reporter, texProxy->instantiate(provider));
GrTexture* tex = texProxy->priv().peekTexture();
REPORTER_ASSERT(reporter, texProxy->uniqueID() == idBefore);
// Deferred resources should always have a different ID from their instantiated texture
- REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() != tex->uniqueID().asUInt());
+ if (preinstantiated) {
+ REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() == tex->uniqueID().asUInt());
+ } else {
+ REPORTER_ASSERT(reporter, texProxy->uniqueID().asUInt() != tex->uniqueID().asUInt());
+ }
if (SkBackingFit::kExact == fit) {
REPORTER_ASSERT(reporter, tex->width() == texProxy->width());