Index: src/gpu/GrAuditTrail.cpp |
diff --git a/src/gpu/GrAuditTrail.cpp b/src/gpu/GrAuditTrail.cpp |
index 6b20876807406a42e8c47cc2e7823f98dd599c1c..d46387315eba1f0dbbeaab7f28a6700a2593653e 100644 |
--- a/src/gpu/GrAuditTrail.cpp |
+++ b/src/gpu/GrAuditTrail.cpp |
@@ -10,6 +10,32 @@ |
const int GrAuditTrail::kGrAuditTrailInvalidID = -1; |
+void GrAuditTrail::addBatch(const char* name, const SkRect& bounds) { |
+ SkASSERT(fEnabled); |
+ Batch* batch = new Batch; |
+ fBatchPool.emplace_back(batch); |
+ batch->fName = name; |
+ batch->fBounds = bounds; |
+ batch->fClientID = kGrAuditTrailInvalidID; |
+ batch->fBatchListID = kGrAuditTrailInvalidID; |
+ batch->fChildID = kGrAuditTrailInvalidID; |
+ fCurrentBatch = batch; |
+ |
+ if (fClientID != kGrAuditTrailInvalidID) { |
+ batch->fClientID = fClientID; |
+ Batches** batchesLookup = fClientIDLookup.find(fClientID); |
+ Batches* batches = nullptr; |
+ if (!batchesLookup) { |
+ batches = new Batches; |
+ fClientIDLookup.set(fClientID, batches); |
+ } else { |
+ batches = *batchesLookup; |
+ } |
+ |
+ batches->push_back(fCurrentBatch); |
+ } |
+} |
+ |
void GrAuditTrail::batchingResultCombined(GrBatch* combiner) { |
int* indexPtr = fIDLookup.find(combiner); |
SkASSERT(indexPtr); |
@@ -75,6 +101,15 @@ void GrAuditTrail::getBoundsByClientID(SkTArray<BatchInfo>* outInfo, int clientI |
} |
} |
+void GrAuditTrail::fullReset() { |
+ SkASSERT(fEnabled); |
+ fBatchList.reset(); |
+ fIDLookup.reset(); |
+ // free all client batches |
+ fClientIDLookup.foreach([](const int&, Batches** batches) { delete *batches; }); |
+ fClientIDLookup.reset(); |
+ fBatchPool.reset(); // must be last, frees all of the memory |
+} |
template <typename T> |
void GrAuditTrail::JsonifyTArray(SkString* json, const char* name, const T& array, |