Reland "Support sharing promise images between DDLs"
This reverts commit 38b9a4bc3e3c11e0f17545d15e714a74c10211e3.
Reason for revert: Fixed ASAN, TSAN, and other bugs via other CLs.
Original change's description:
> Revert "Support sharing promise images between DDLs"
>
> This reverts commit 07e11d48cb02ba9a3845e653c1772c25021e65a3.
>
> Reason for revert: Broke DDL3_ASAN and DDL3_TSAN
>
> Original change's description:
> > Support sharing promise images between DDLs
> >
> > - Migrate our code to SkImage::MakePromiseTexture
> > - Have DDLTileHelper share one SKP and one set of promise images across all tiles.
> > - Disallow on-the-fly allocation of mips for promise textures.
> >
> > Bug: skia:10286
> > Change-Id: Ie35976958454fc520f3c9d860e6285441260c9f7
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291938
> > Commit-Queue: Adlai Holler <adlai@google.com>
> > Reviewed-by: Robert Phillips <robertphillips@google.com>
>
> TBR=robertphillips@google.com,adlai@google.com
>
> Change-Id: I939b14875d1a20e4a92eab94680adcfe9596ad81
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:10286
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/375738
> Reviewed-by: Adlai Holler <adlai@google.com>
> Commit-Queue: Adlai Holler <adlai@google.com>
Bug: skia:10286
Change-Id: Ibfd7dfcd72f10a4e29a87fa8c610f2dfd018e0db
Cq-Include-Trybots: luci.skia.skia.primary:Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN,Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/375739
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Adlai Holler <adlai@google.com>
diff --git a/tools/DDLPromiseImageHelper.cpp b/tools/DDLPromiseImageHelper.cpp
index 66af4cb..1a4119c 100644
--- a/tools/DDLPromiseImageHelper.cpp
+++ b/tools/DDLPromiseImageHelper.cpp
@@ -278,13 +278,13 @@
}
sk_sp<SkPicture> DDLPromiseImageHelper::reinflateSKP(
- SkDeferredDisplayListRecorder* recorder,
+ sk_sp<GrContextThreadSafeProxy> threadSafeProxy,
SkData* compressedPictureData,
SkTArray<sk_sp<SkImage>>* promiseImages) const {
- PerRecorderContext perRecorderContext { recorder, this, promiseImages };
+ DeserialImageProcContext procContext { std::move(threadSafeProxy), this, promiseImages };
SkDeserialProcs procs;
- procs.fImageCtx = (void*) &perRecorderContext;
+ procs.fImageCtx = (void*) &procContext;
procs.fImageProc = CreatePromiseImages;
return SkPicture::MakeFromData(compressedPictureData, &procs);
@@ -295,9 +295,8 @@
// promise images referring to the same GrBackendTexture.
sk_sp<SkImage> DDLPromiseImageHelper::CreatePromiseImages(const void* rawData,
size_t length, void* ctxIn) {
- PerRecorderContext* perRecorderContext = static_cast<PerRecorderContext*>(ctxIn);
- const DDLPromiseImageHelper* helper = perRecorderContext->fHelper;
- SkDeferredDisplayListRecorder* recorder = perRecorderContext->fRecorder;
+ DeserialImageProcContext* procContext = static_cast<DeserialImageProcContext*>(ctxIn);
+ const DDLPromiseImageHelper* helper = procContext->fHelper;
SkASSERT(length == sizeof(int));
@@ -331,13 +330,13 @@
backendFormats,
GrMipmapped::kNo,
kTopLeft_GrSurfaceOrigin);
-
- image = recorder->makeYUVAPromiseTexture(
- yuvaBackendTextures,
- curImage.refOverallColorSpace(),
- PromiseImageCallbackContext::PromiseImageFulfillProc,
- PromiseImageCallbackContext::PromiseImageReleaseProc,
- contexts);
+ image = SkImage::MakePromiseYUVATexture(
+ procContext->fThreadSafeProxy,
+ yuvaBackendTextures,
+ curImage.refOverallColorSpace(),
+ PromiseImageCallbackContext::PromiseImageFulfillProc,
+ PromiseImageCallbackContext::PromiseImageReleaseProc,
+ contexts);
if (!image) {
return nullptr;
}
@@ -349,22 +348,20 @@
const GrBackendFormat& backendFormat = curImage.backendFormat(0);
SkASSERT(backendFormat.isValid());
- // Each DDL recorder gets its own ref on the promise callback context for the
- // promise images it creates.
- image = recorder->makePromiseTexture(backendFormat,
- curImage.overallWidth(),
- curImage.overallHeight(),
- curImage.mipMapped(0),
- GrSurfaceOrigin::kTopLeft_GrSurfaceOrigin,
- curImage.overallColorType(),
- curImage.overallAlphaType(),
- curImage.refOverallColorSpace(),
- PromiseImageCallbackContext::PromiseImageFulfillProc,
- PromiseImageCallbackContext::PromiseImageReleaseProc,
- (void*)curImage.refCallbackContext(0).release());
+ image = SkImage::MakePromiseTexture(procContext->fThreadSafeProxy,
+ backendFormat,
+ curImage.overallDimensions(),
+ curImage.mipMapped(0),
+ GrSurfaceOrigin::kTopLeft_GrSurfaceOrigin,
+ curImage.overallColorType(),
+ curImage.overallAlphaType(),
+ curImage.refOverallColorSpace(),
+ PromiseImageCallbackContext::PromiseImageFulfillProc,
+ PromiseImageCallbackContext::PromiseImageReleaseProc,
+ (void*)curImage.refCallbackContext(0).release());
curImage.callbackContext(0)->wasAddedToImage();
}
- perRecorderContext->fPromiseImages->push_back(image);
+ procContext->fPromiseImages->push_back(image);
SkASSERT(image);
return image;
}