Move op memory storage to GrContext (take 2)
TBR=bsalomon@google.com
Change-Id: I4a448694d4114d83cd3a720cfc8bd37de51733d1
Reviewed-on: https://skia-review.googlesource.com/135707
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrTextureOpList.cpp b/src/gpu/GrTextureOpList.cpp
index a868b5d..6a601aa 100644
--- a/src/gpu/GrTextureOpList.cpp
+++ b/src/gpu/GrTextureOpList.cpp
@@ -11,6 +11,7 @@
#include "GrContext.h"
#include "GrContextPriv.h"
#include "GrGpu.h"
+#include "GrMemoryPool.h"
#include "GrResourceAllocator.h"
#include "GrTextureProxy.h"
#include "SkStringUtils.h"
@@ -19,12 +20,28 @@
////////////////////////////////////////////////////////////////////////////////
GrTextureOpList::GrTextureOpList(GrResourceProvider* resourceProvider,
+ sk_sp<GrOpMemoryPool> opMemoryPool,
GrTextureProxy* proxy,
GrAuditTrail* auditTrail)
- : INHERITED(resourceProvider, proxy, auditTrail) {
+ : INHERITED(resourceProvider, std::move(opMemoryPool), proxy, auditTrail) {
+ SkASSERT(fOpMemoryPool);
+}
+
+void GrTextureOpList::deleteOp(int index) {
+ SkASSERT(index >= 0 && index < fRecordedOps.count());
+ fOpMemoryPool->release(std::move(fRecordedOps[index]));
+}
+
+void GrTextureOpList::deleteOps() {
+ for (int i = 0; i < fRecordedOps.count(); ++i) {
+ fOpMemoryPool->release(std::move(fRecordedOps[i]));
+ }
+ fRecordedOps.reset();
+ fOpMemoryPool = nullptr;
}
GrTextureOpList::~GrTextureOpList() {
+ this->deleteOps();
}
////////////////////////////////////////////////////////////////////////////////
@@ -107,7 +124,7 @@
}
void GrTextureOpList::endFlush() {
- fRecordedOps.reset();
+ this->deleteOps();
INHERITED::endFlush();
}
@@ -152,7 +169,7 @@
}
if (hasUninstantiatedProxy) {
// When instantiation of the proxy fails we drop the Op
- fRecordedOps[i] = nullptr;
+ this->deleteOp(i);
}
}
}