Revert "Revert "Change promise image contract to for when Release and Done are called.""
This reverts commit d716d4402aa3cb939d697c4b05f17df87f2c3df0.
Bug: skia:8800
Change-Id: Ic16cd4e960be2c3d2462bdf2b54b2e32abbd9f78
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/199081
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/image/SkImage_GpuBase.cpp b/src/image/SkImage_GpuBase.cpp
index 6e29471..fe3d5ba 100644
--- a/src/image/SkImage_GpuBase.cpp
+++ b/src/image/SkImage_GpuBase.cpp
@@ -386,7 +386,8 @@
PromiseImageTextureFulfillProc fulfillProc,
PromiseImageTextureReleaseProc releaseProc,
PromiseImageTextureDoneProc doneProc,
- PromiseImageTextureContext textureContext) {
+ PromiseImageTextureContext textureContext,
+ PromiseImageApiVersion version) {
SkASSERT(context);
SkASSERT(width > 0 && height > 0);
SkASSERT(doneProc);
@@ -425,8 +426,12 @@
PromiseImageTextureReleaseProc releaseProc,
PromiseImageTextureDoneProc doneProc,
PromiseImageTextureContext context,
- GrPixelConfig config)
- : fFulfillProc(fulfillProc), fReleaseProc(releaseProc), fConfig(config) {
+ GrPixelConfig config,
+ PromiseImageApiVersion version)
+ : fFulfillProc(fulfillProc)
+ , fReleaseProc(releaseProc)
+ , fConfig(config)
+ , fVersion(version) {
fDoneCallback = sk_make_sp<GrRefCntedCallback>(doneProc, context);
}
PromiseLazyInstantiateCallback(PromiseLazyInstantiateCallback&&) = default;
@@ -492,7 +497,10 @@
return sk_sp<GrTexture>();
}
}
- tex->addIdleProc(std::move(releaseCallback), GrTexture::IdleState::kFinished);
+ auto releaseIdleState = fVersion == PromiseImageApiVersion::kLegacy
+ ? GrTexture::IdleState::kFinished
+ : GrTexture::IdleState::kFlushed;
+ tex->addIdleProc(std::move(releaseCallback), releaseIdleState);
tex->addIdleProc(std::move(fDoneCallback), GrTexture::IdleState::kFinished);
promiseTexture->addKeyToInvalidate(tex->getContext()->priv().contextID(), key);
fTexture = tex.get();
@@ -513,7 +521,8 @@
GrTexture* fTexture = nullptr;
uint32_t fTextureContextID = SK_InvalidUniqueID;
GrPixelConfig fConfig;
- } callback(fulfillProc, releaseProc, doneProc, textureContext, config);
+ PromiseImageApiVersion fVersion;
+ } callback(fulfillProc, releaseProc, doneProc, textureContext, config, version);
GrProxyProvider* proxyProvider = context->priv().proxyProvider();