Index: tools/debugger/SkDebugCanvas.cpp |
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp |
index 7bb70c29405730082cdd3c49afd15abbcc8001b8..cf2652cce4c625f2d03c4351d20262bff1106255 100644 |
--- a/tools/debugger/SkDebugCanvas.cpp |
+++ b/tools/debugger/SkDebugCanvas.cpp |
@@ -226,16 +226,10 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index, int m) { |
} |
// If we have a GPU backend we can also visualize the batching information |
-#if SK_SUPPORT_GPU |
GrAuditTrail* at = nullptr; |
- GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget(); |
- if (rt && (fDrawGpuBatchBounds || m != -1)) { |
- GrContext* ctx = rt->getContext(); |
- if (ctx) { |
- at = ctx->getAuditTrail(); |
- } |
+ if (fDrawGpuBatchBounds || m != -1) { |
+ at = this->getAuditTrail(canvas); |
} |
-#endif |
for (int i = 0; i <= index; i++) { |
if (i == index && fFilter) { |
@@ -375,11 +369,9 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index, int m) { |
canvas->drawRect(batch.fBounds, paint); |
} |
} |
- |
- at->fullReset(); |
} |
- |
#endif |
+ this->cleanupAuditTrail(canvas); |
} |
void SkDebugCanvas::deleteDrawCommandAt(int index) { |
@@ -417,32 +409,55 @@ SkTDArray <SkDrawCommand*>& SkDebugCanvas::getDrawCommands() { |
return fCommandVector; |
} |
-Json::Value SkDebugCanvas::toJSON(UrlDataManager& urlDataManager, int n, SkCanvas* canvas) { |
+GrAuditTrail* SkDebugCanvas::getAuditTrail(SkCanvas* canvas) { |
+ GrAuditTrail* at = nullptr; |
#if SK_SUPPORT_GPU |
GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget(); |
- GrAuditTrail* at = nullptr; |
if (rt) { |
GrContext* ctx = rt->getContext(); |
- if(ctx) { |
+ if (ctx) { |
at = ctx->getAuditTrail(); |
+ } |
+ } |
+#endif |
+ return at; |
+} |
- // loop over all of the commands and draw them, this is to collect reordering |
- // information |
- for (int i = 0; i < this->getSize() && i <= n; i++) { |
- GrAuditTrail::AutoCollectBatches enable(at, i); |
- fCommandVector[i]->execute(canvas); |
- } |
+void SkDebugCanvas::drawAndCollectBatches(int n, SkCanvas* canvas) { |
+ GrAuditTrail* at = this->getAuditTrail(canvas); |
+ if (at) { |
+#if SK_SUPPORT_GPU |
+ // loop over all of the commands and draw them, this is to collect reordering |
+ // information |
+ for (int i = 0; i < this->getSize() && i <= n; i++) { |
+ GrAuditTrail::AutoCollectBatches enable(at, i); |
+ fCommandVector[i]->execute(canvas); |
+ } |
- // in case there is some kind of global reordering |
- { |
- GrAuditTrail::AutoEnable ae(at); |
- canvas->flush(); |
- } |
+ // in case there is some kind of global reordering |
+ { |
+ GrAuditTrail::AutoEnable ae(at); |
+ canvas->flush(); |
} |
+#endif |
} |
+} |
+ |
+void SkDebugCanvas::cleanupAuditTrail(SkCanvas* canvas) { |
+ GrAuditTrail* at = this->getAuditTrail(canvas); |
+ if (at) { |
+#if SK_SUPPORT_GPU |
+ GrAuditTrail::AutoEnable ae(at); |
+ at->fullReset(); |
#endif |
+ } |
+} |
+ |
+Json::Value SkDebugCanvas::toJSON(UrlDataManager& urlDataManager, int n, SkCanvas* canvas) { |
+ this->drawAndCollectBatches(n, canvas); |
// now collect json |
+ GrAuditTrail* at = this->getAuditTrail(canvas); |
Json::Value result = Json::Value(Json::objectValue); |
result[SKDEBUGCANVAS_ATTRIBUTE_VERSION] = Json::Value(SKDEBUGCANVAS_VERSION); |
Json::Value commands = Json::Value(Json::arrayValue); |
@@ -460,14 +475,25 @@ Json::Value SkDebugCanvas::toJSON(UrlDataManager& urlDataManager, int n, SkCanva |
} |
#endif |
} |
+ this->cleanupAuditTrail(canvas); |
+ result[SKDEBUGCANVAS_ATTRIBUTE_COMMANDS] = commands; |
+ return result; |
+} |
+ |
+Json::Value SkDebugCanvas::toJSONBatchList(int n, SkCanvas* canvas) { |
+ this->drawAndCollectBatches(n, canvas); |
+ |
+ Json::Value parsedFromString; |
+ GrAuditTrail* at = this->getAuditTrail(canvas); |
#if SK_SUPPORT_GPU |
if (at) { |
- GrAuditTrail::AutoEnable ae(at); |
- at->fullReset(); |
+ GrAuditTrail::AutoManageBatchList enable(at); |
+ Json::Reader reader; |
+ SkAssertResult(reader.parse(at->toJson().c_str(), parsedFromString)); |
} |
#endif |
- result[SKDEBUGCANVAS_ATTRIBUTE_COMMANDS] = commands; |
- return result; |
+ this->cleanupAuditTrail(canvas); |
+ return parsedFromString; |
} |
void SkDebugCanvas::updatePaintFilterCanvas() { |