Notify RTC when OpsTask is closed so it can drop ownership
Change-Id: I95d32ed89447995541f33bf80730876ce9c0747a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/284519
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrOpsTask.cpp b/src/gpu/GrOpsTask.cpp
index 7f26afc..c5f52fb 100644
--- a/src/gpu/GrOpsTask.cpp
+++ b/src/gpu/GrOpsTask.cpp
@@ -10,6 +10,7 @@
#include "include/private/GrRecordingContext.h"
#include "src/core/SkExchange.h"
#include "src/core/SkRectPriv.h"
+#include "src/core/SkScopeExit.h"
#include "src/core/SkTraceEvent.h"
#include "src/gpu/GrAuditTrail.h"
#include "src/gpu/GrCaps.h"
@@ -39,6 +40,10 @@
////////////////////////////////////////////////////////////////////////////////
+GrOpsTaskClosedObserver::~GrOpsTaskClosedObserver() = default;
+
+////////////////////////////////////////////////////////////////////////////////
+
static inline bool can_reorder(const SkRect& a, const SkRect& b) { return !GrRectsOverlap(a, b); }
////////////////////////////////////////////////////////////////////////////////
@@ -359,7 +364,6 @@
: GrRenderTask(std::move(view))
, fArenas(arenas)
, fAuditTrail(auditTrail)
- , fLastClipStackGenID(SK_InvalidUniqueID)
SkDEBUGCODE(, fNumClips(0)) {
fTargetView.proxy()->setLastRenderTask(this);
}
@@ -874,6 +878,12 @@
GrRenderTask::ExpectedOutcome GrOpsTask::onMakeClosed(
const GrCaps& caps, SkIRect* targetUpdateBounds) {
this->forwardCombine(caps);
+ SkScopeExit triggerObserver([&] {
+ if (fClosedObserver) {
+ fClosedObserver->wasClosed(*this);
+ fClosedObserver = nullptr;
+ }
+ });
if (!this->isNoOp()) {
GrSurfaceProxy* proxy = fTargetView.proxy();
SkRect clippedContentBounds = proxy->getBoundsRect();