Move lastRenderTask into drawing manager
Bug: skia:10320
Change-Id: I5a25d8c0bf00b379a37c479e79d4ff16403e9dfe
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/294339
Commit-Queue: Adlai Holler <adlai@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrRenderTask.cpp b/src/gpu/GrRenderTask.cpp
index 7dc434b..1cf2efc 100644
--- a/src/gpu/GrRenderTask.cpp
+++ b/src/gpu/GrRenderTask.cpp
@@ -32,12 +32,20 @@
, fFlags(0) {
}
-GrRenderTask::~GrRenderTask() {
- GrSurfaceProxy* proxy = fTargetView.proxy();
- if (proxy && this == proxy->getLastRenderTask()) {
- // Ensure the target proxy doesn't keep hold of a dangling back pointer.
- proxy->setLastRenderTask(nullptr);
+void GrRenderTask::disown(GrDrawingManager* drawingMgr) {
+ if (this->isSetFlag(kDisowned_Flag)) {
+ return;
}
+ this->setFlag(kDisowned_Flag);
+ GrSurfaceProxy* proxy = fTargetView.proxy();
+ if (proxy && this == drawingMgr->getLastRenderTask(proxy)) {
+ // Ensure the drawing manager doesn't hold a dangling pointer.
+ drawingMgr->setLastRenderTask(proxy, nullptr);
+ }
+}
+
+GrRenderTask::~GrRenderTask() {
+ SkASSERT(this->isSetFlag(kDisowned_Flag));
}
#ifdef SK_DEBUG
@@ -111,13 +119,14 @@
}
// Convert from a GrSurface-based dependency to a GrRenderTask one
-void GrRenderTask::addDependency(GrSurfaceProxy* dependedOn, GrMipMapped mipMapped,
+void GrRenderTask::addDependency(GrDrawingManager* drawingMgr, GrSurfaceProxy* dependedOn,
+ GrMipMapped mipMapped,
GrTextureResolveManager textureResolveManager,
const GrCaps& caps) {
// If it is still receiving dependencies, this GrRenderTask shouldn't be closed
SkASSERT(!this->isClosed());
- GrRenderTask* dependedOnTask = dependedOn->getLastRenderTask();
+ GrRenderTask* dependedOnTask = drawingMgr->getLastRenderTask(dependedOn);
if (dependedOnTask == this) {
// self-read - presumably for dst reads. We don't need to do anything in this case. The
@@ -168,11 +177,11 @@
if (!fTextureResolveTask) {
fTextureResolveTask = textureResolveManager.newTextureResolveRenderTask(caps);
}
- fTextureResolveTask->addProxy(sk_ref_sp(dependedOn), resolveFlags, caps);
+ fTextureResolveTask->addProxy(drawingMgr, sk_ref_sp(dependedOn), resolveFlags, caps);
// addProxy() should have closed the texture proxy's previous task.
SkASSERT(!dependedOnTask || dependedOnTask->isClosed());
- SkASSERT(dependedOn->getLastRenderTask() == fTextureResolveTask);
+ SkASSERT(drawingMgr->getLastRenderTask(dependedOn) == fTextureResolveTask);
#ifdef SK_DEBUG
// addProxy() should have called addDependency (in this instance, recursively) on
@@ -192,7 +201,7 @@
if (textureProxy) {
SkASSERT(!textureProxy->mipMapsAreDirty());
}
- SkASSERT(dependedOn->getLastRenderTask() == fTextureResolveTask);
+ SkASSERT(drawingMgr->getLastRenderTask(dependedOn) == fTextureResolveTask);
#endif
return;
}