From 6ceaafa7b9292ba2db52c105cc9692bda9970f08 Mon Sep 17 00:00:00 2001 From: Robert Phillips Date: Thu, 15 Mar 2018 16:53:06 -0400 Subject: Handle GrContext creation failure in DDL TBR=bsalomon@google.com Change-Id: Ib34448a60cb127ef89bcb0b1f85d07abc91af582 Reviewed-on: https://skia-review.googlesource.com/114569 Reviewed-by: Brian Salomon Reviewed-by: Greg Daniel Commit-Queue: Robert Phillips --- tests/DeferredDisplayListTest.cpp | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'tests/DeferredDisplayListTest.cpp') diff --git a/tests/DeferredDisplayListTest.cpp b/tests/DeferredDisplayListTest.cpp index 896a64a5a9..b85388f9c9 100644 --- a/tests/DeferredDisplayListTest.cpp +++ b/tests/DeferredDisplayListTest.cpp @@ -404,5 +404,46 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLWrapBackendTest, reporter, ctxInfo) { gpu->deleteTestingOnlyBackendTexture(backendTex); } +static void dummy_fulfill_proc(void*, GrBackendTexture*) { SkASSERT(0); } +static void dummy_release_proc(void*) { SkASSERT(0); } + +// Test out the behavior of an invalid DDLRecorder +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLInvalidRecorder, reporter, ctxInfo) { + GrContext* context = ctxInfo.grContext(); + + { + SkImageInfo ii = SkImageInfo::MakeN32Premul(32, 32); + sk_sp s = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii); + + SkSurfaceCharacterization characterization; + SkAssertResult(s->characterize(&characterization)); + + // never calling getCanvas means the backing surface is never allocated + SkDeferredDisplayListRecorder recorder(characterization); + } + + { + SkSurfaceCharacterization invalid; + + SkDeferredDisplayListRecorder recorder(invalid); + + const SkSurfaceCharacterization c = recorder.characterization(); + REPORTER_ASSERT(reporter, !c.isValid()); + REPORTER_ASSERT(reporter, !recorder.getCanvas()); + REPORTER_ASSERT(reporter, !recorder.detach()); + + GrBackendFormat format; + sk_sp image = recorder.makePromiseTexture(format, 32, 32, GrMipMapped::kNo, + kTopLeft_GrSurfaceOrigin, + kRGBA_8888_SkColorType, + kPremul_SkAlphaType, nullptr, + dummy_fulfill_proc, + dummy_release_proc, + nullptr); + REPORTER_ASSERT(reporter, !image); + } + +} + #endif -- cgit v1.2.3