Render batch bounds as stroke rects

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745063002

Review URL: https://codereview.chromium.org/1745063002
diff --git a/src/gpu/GrAuditTrail.cpp b/src/gpu/GrAuditTrail.cpp
index 4b90ea5..f17ada4 100644
--- a/src/gpu/GrAuditTrail.cpp
+++ b/src/gpu/GrAuditTrail.cpp
@@ -40,6 +40,40 @@
     fBatchList.emplace_back(batchNode);
 }
 
+void GrAuditTrail::getBoundsByClientID(SkTArray<BatchInfo>* outInfo, int clientID) {
+    Batches** batchesLookup = fClientIDLookup.find(clientID);
+    if (batchesLookup) {
+        // We track which batchlistID we're currently looking at.  If it changes, then we
+        // need to push back a new batch info struct.  We happen to know that batches are
+        // in sequential order in the batchlist, otherwise we'd have to do more bookkeeping
+        int currentBatchListID = kGrAuditTrailInvalidID;
+        for (int i = 0; i < (*batchesLookup)->count(); i++) {
+            const Batch* batch = (**batchesLookup)[i];
+
+            // Because we will copy out all of the batches associated with a given
+            // batch list id everytime the id changes, we only have to update our struct
+            // when the id changes.
+            if (kGrAuditTrailInvalidID == currentBatchListID ||
+                batch->fBatchListID != currentBatchListID) {
+                BatchInfo& outBatchInfo = outInfo->push_back();
+                currentBatchListID = batch->fBatchListID;
+                
+                // copy out all of the batches so the client can display them even if
+                // they have a different clientID
+                const BatchNode* bn = fBatchList[currentBatchListID];
+                outBatchInfo.fBounds = bn->fBounds;
+                for (int j = 0; j < bn->fChildren.count(); j++) {
+                    BatchInfo::Batch& outBatch = outBatchInfo.fBatches.push_back();
+                    const Batch* currentBatch = bn->fChildren[j];
+                    outBatch.fBounds = currentBatch->fBounds;
+                    outBatch.fClientID = currentBatch->fClientID;
+                }
+            }
+        }
+    }
+}
+
+
 template <typename T>
 void GrAuditTrail::JsonifyTArray(SkString* json, const char* name, const T& array,
                                  bool addComma) {