Add abilitly to query audit trail for batches by draw op
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1745513002
Committed: https://skia.googlesource.com/skia/+/9b48a6e3f862076018cc7d63b180b6340f4873cd
Review URL: https://codereview.chromium.org/1745513002
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp
index 34e582e..cc1733b 100644
--- a/tools/debugger/SkDebugCanvas.cpp
+++ b/tools/debugger/SkDebugCanvas.cpp
@@ -336,7 +336,8 @@
result[SKDEBUGCANVAS_ATTRIBUTE_VERSION] = Json::Value(SKDEBUGCANVAS_VERSION);
Json::Value commands = Json::Value(Json::arrayValue);
for (int i = 0; i < this->getSize() && i <= n; i++) {
- commands[i] = this->getDrawCommandAt(i)->drawToAndCollectJSON(canvas, urlDataManager);
+ commands[i] = this->getDrawCommandAt(i)->drawToAndCollectJSON(canvas, urlDataManager,
+ i);
}
result[SKDEBUGCANVAS_ATTRIBUTE_COMMANDS] = commands;
return result;
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp
index 33e49ce..1af2998 100644
--- a/tools/debugger/SkDrawCommand.cpp
+++ b/tools/debugger/SkDrawCommand.cpp
@@ -228,7 +228,8 @@
}
Json::Value SkDrawCommand::drawToAndCollectJSON(SkCanvas* canvas,
- UrlDataManager& urlDataManager) const {
+ UrlDataManager& urlDataManager,
+ int opIndex) const {
Json::Value result = this->toJSON(urlDataManager);
SkASSERT(canvas);
@@ -239,19 +240,18 @@
GrContext* ctx = rt->getContext();
if(ctx) {
GrAuditTrail* at = ctx->getAuditTrail();
- GrAuditTrail::AutoEnable enable(at);
+ GrAuditTrail::AutoCollectBatches enable(at, opIndex);
this->execute(canvas);
// TODO if this is inefficient we could add a method to GrAuditTrail which takes
// a Json::Value and is only compiled in this file
Json::Value parsedFromString;
Json::Reader reader;
- SkDEBUGCODE(bool parsingSuccessful = )reader.parse(at->toJson().c_str(),
+ SkDEBUGCODE(bool parsingSuccessful = )reader.parse(at->toJson(opIndex).c_str(),
parsedFromString);
SkASSERT(parsingSuccessful);
result[SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL] = parsedFromString;
- at->reset();
}
}
#endif
diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h
index 34832a7..74c2b2c 100644
--- a/tools/debugger/SkDrawCommand.h
+++ b/tools/debugger/SkDrawCommand.h
@@ -102,7 +102,8 @@
virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
- Json::Value drawToAndCollectJSON(SkCanvas*, UrlDataManager& urlDataManager) const;
+ Json::Value drawToAndCollectJSON(SkCanvas*, UrlDataManager& urlDataManager,
+ int opIndex) const;
/* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It
* is the caller's responsibility to delete this object. This method may return null if an error
diff --git a/tools/skiaserve/Request.cpp b/tools/skiaserve/Request.cpp
index c5a36cb..98b3b03 100644
--- a/tools/skiaserve/Request.cpp
+++ b/tools/skiaserve/Request.cpp
@@ -152,6 +152,28 @@
return true;
}
+GrAuditTrail* Request::getAuditTrail(SkCanvas* canvas) {
+ GrAuditTrail* at = nullptr;
+#if SK_SUPPORT_GPU
+ GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget();
+ if (rt) {
+ GrContext* ctx = rt->getContext();
+ if (ctx) {
+ at = ctx->getAuditTrail();
+ }
+ }
+#endif
+ return at;
+}
+
+void Request::cleanupAuditTrail(SkCanvas* canvas) {
+ GrAuditTrail* at = this->getAuditTrail(canvas);
+ if (at) {
+ GrAuditTrail::AutoEnable ae(at);
+ at->fullReset();
+ }
+}
+
SkData* Request::getJsonOps(int n) {
SkCanvas* canvas = this->getCanvas();
Json::Value root = fDebugCanvas->toJSON(fUrlDataManager, n, canvas);
@@ -159,6 +181,8 @@
SkDynamicMemoryWStream stream;
stream.writeText(Json::FastWriter().write(root).c_str());
+ this->cleanupAuditTrail(canvas);
+
return stream.copyToData();
}
@@ -170,11 +194,7 @@
// a Json::Value and is only compiled in this file
Json::Value parsedFromString;
#if SK_SUPPORT_GPU
- GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget();
- SkASSERT(rt);
- GrContext* ctx = rt->getContext();
- SkASSERT(ctx);
- GrAuditTrail* at = ctx->getAuditTrail();
+ GrAuditTrail* at = this->getAuditTrail(canvas);
GrAuditTrail::AutoManageBatchList enable(at);
fDebugCanvas->drawTo(canvas, n);
diff --git a/tools/skiaserve/Request.h b/tools/skiaserve/Request.h
index fd015dc..60a59a7 100644
--- a/tools/skiaserve/Request.h
+++ b/tools/skiaserve/Request.h
@@ -60,6 +60,8 @@
void drawToCanvas(int n);
SkSurface* createCPUSurface();
SkSurface* createGPUSurface();
+ GrAuditTrail* getAuditTrail(SkCanvas*);
+ void cleanupAuditTrail(SkCanvas*);
SkAutoTUnref<SkPicture> fPicture;
SkAutoTDelete<GrContextFactory> fContextFactory;