| 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,
|
|
|