| Index: tools/debugger/SkDebugCanvas.cpp
|
| diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp
|
| index a58db14d7dad8b9d2257007fe88e3deeec4c8b14..9915c1baa20ee409df928018a35e8e55adadcec9 100644
|
| --- a/tools/debugger/SkDebugCanvas.cpp
|
| +++ b/tools/debugger/SkDebugCanvas.cpp
|
| @@ -20,9 +20,10 @@
|
| #include "SkGpuDevice.h"
|
| #endif
|
|
|
| -#define SKDEBUGCANVAS_VERSION 1
|
| -#define SKDEBUGCANVAS_ATTRIBUTE_VERSION "version"
|
| -#define SKDEBUGCANVAS_ATTRIBUTE_COMMANDS "commands"
|
| +#define SKDEBUGCANVAS_VERSION 1
|
| +#define SKDEBUGCANVAS_ATTRIBUTE_VERSION "version"
|
| +#define SKDEBUGCANVAS_ATTRIBUTE_COMMANDS "commands"
|
| +#define SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL "auditTrail"
|
|
|
| class DebugPaintFilterCanvas : public SkPaintFilterCanvas {
|
| public:
|
| @@ -331,6 +332,10 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index, int m) {
|
| #if SK_SUPPORT_GPU
|
| // draw any batches if required and issue a full reset onto GrAuditTrail
|
| if (at) {
|
| + // just in case there is global reordering, we flush the canvas before querying
|
| + // GrAuditTrail
|
| + canvas->flush();
|
| +
|
| // we pick three colorblind-safe colors, 75% alpha
|
| static const SkColor kTotalBounds = SkColorSetARGB(0xC0, 0x6A, 0x3D, 0x9A);
|
| static const SkColor kOpBatchBounds = SkColorSetARGB(0xC0, 0xE3, 0x1A, 0x1C);
|
| @@ -413,13 +418,50 @@ SkTDArray <SkDrawCommand*>& SkDebugCanvas::getDrawCommands() {
|
| }
|
|
|
| Json::Value SkDebugCanvas::toJSON(UrlDataManager& urlDataManager, int n, SkCanvas* canvas) {
|
| +#if SK_SUPPORT_GPU
|
| + GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget();
|
| + GrAuditTrail* at = nullptr;
|
| + if (rt) {
|
| + GrContext* ctx = rt->getContext();
|
| + if(ctx) {
|
| + at = ctx->getAuditTrail();
|
| +
|
| + // 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
|
| + canvas->flush();
|
| + }
|
| + }
|
| +#endif
|
| +
|
| + // now collect json
|
| Json::Value result = Json::Value(Json::objectValue);
|
| 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,
|
| - i);
|
| + commands[i] = this->getDrawCommandAt(i)->toJSON(urlDataManager);
|
| +#if SK_SUPPORT_GPU
|
| + if (at) {
|
| + // 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;
|
| + SkAssertResult(reader.parse(at->toJson(i).c_str(), parsedFromString));
|
| +
|
| + commands[i][SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL] = parsedFromString;
|
| + }
|
| +#endif
|
| + }
|
| +#if SK_SUPPORT_GPU
|
| + if (at) {
|
| + at->fullReset();
|
| }
|
| +#endif
|
| result[SKDEBUGCANVAS_ATTRIBUTE_COMMANDS] = commands;
|
| return result;
|
| }
|
|
|