aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/debugger
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2016-02-17 11:20:26 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-17 11:20:26 -0800
commit6b3cf73af525fdbf6fd093304db840bb998e3dd6 (patch)
tree59b9b55fee42e6041f6f87cadca2efec108c0150 /tools/debugger
parent91e457d17f8c6c06de33eb2bb430a90ba472eda5 (diff)
Add batch information to json
Diffstat (limited to 'tools/debugger')
-rw-r--r--tools/debugger/SkDebugCanvas.cpp4
-rw-r--r--tools/debugger/SkDebugCanvas.h2
-rw-r--r--tools/debugger/SkDrawCommand.cpp38
-rw-r--r--tools/debugger/SkDrawCommand.h2
4 files changed, 43 insertions, 3 deletions
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp
index 89e53e1e7c..9c0465d928 100644
--- a/tools/debugger/SkDebugCanvas.cpp
+++ b/tools/debugger/SkDebugCanvas.cpp
@@ -331,12 +331,12 @@ SkTDArray <SkDrawCommand*>& SkDebugCanvas::getDrawCommands() {
return fCommandVector;
}
-Json::Value SkDebugCanvas::toJSON(UrlDataManager& urlDataManager, int n) {
+Json::Value SkDebugCanvas::toJSON(UrlDataManager& urlDataManager, int n, SkCanvas* canvas) {
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)->toJSON(urlDataManager);
+ commands[i] = this->getDrawCommandAt(i)->drawToAndCollectJSON(canvas, urlDataManager);
}
result[SKDEBUGCANVAS_ATTRIBUTE_COMMANDS] = commands;
return result;
diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h
index ac2f0d4207..d06637d42b 100644
--- a/tools/debugger/SkDebugCanvas.h
+++ b/tools/debugger/SkDebugCanvas.h
@@ -151,7 +151,7 @@ public:
SkDebugCanvas::getSize(). The encoder may use the UrlDataManager to store binary data such
as images, referring to them via URLs embedded in the JSON.
*/
- Json::Value toJSON(UrlDataManager& urlDataManager, int n);
+ Json::Value toJSON(UrlDataManager& urlDataManager, int n, SkCanvas*);
////////////////////////////////////////////////////////////////////////////////
// Inherited from SkCanvas
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp
index f23c41a0e9..674a359cbb 100644
--- a/tools/debugger/SkDrawCommand.cpp
+++ b/tools/debugger/SkDrawCommand.cpp
@@ -8,6 +8,7 @@
#include "SkDrawCommand.h"
+
#include "SkBlurMaskFilter.h"
#include "SkColorFilter.h"
#include "SkDashPathEffect.h"
@@ -24,7 +25,13 @@
#include "SkValidatingReadBuffer.h"
#include "SkWriteBuffer.h"
+#if SK_SUPPORT_GPU
+#include "GrContext.h"
+#include "GrRenderTarget.h"
+#endif
+
#define SKDEBUGCANVAS_ATTRIBUTE_COMMAND "command"
+#define SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL "auditTrail"
#define SKDEBUGCANVAS_ATTRIBUTE_MATRIX "matrix"
#define SKDEBUGCANVAS_ATTRIBUTE_COORDS "coords"
#define SKDEBUGCANVAS_ATTRIBUTE_BOUNDS "bounds"
@@ -218,6 +225,37 @@ Json::Value SkDrawCommand::toJSON(UrlDataManager& urlDataManager) const {
return result;
}
+Json::Value SkDrawCommand::drawToAndCollectJSON(SkCanvas* canvas,
+ UrlDataManager& urlDataManager) const {
+ Json::Value result;
+ result[SKDEBUGCANVAS_ATTRIBUTE_COMMAND] = this->GetCommandString(fOpType);
+
+ SkASSERT(canvas);
+
+#if SK_SUPPORT_GPU
+ GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget();
+ if (rt) {
+ GrContext* ctx = rt->getContext();
+ if(ctx) {
+ this->execute(canvas);
+ GrAuditTrail* at = ctx->getAuditTrail();
+
+ // 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(),
+ parsedFromString);
+ SkASSERT(parsingSuccessful);
+
+ result[SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL] = parsedFromString;
+ at->reset();
+ }
+ }
+#endif
+ return result;
+}
+
#define INSTALL_FACTORY(name) factories.set(SkString(GetCommandString(k ## name ##_OpType)), \
(FROM_JSON) Sk ## name ## Command::fromJSON)
SkDrawCommand* SkDrawCommand::fromJSON(Json::Value& command, UrlDataManager& urlDataManager) {
diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h
index ff1e1c5248..34832a7cf1 100644
--- a/tools/debugger/SkDrawCommand.h
+++ b/tools/debugger/SkDrawCommand.h
@@ -102,6 +102,8 @@ public:
virtual Json::Value toJSON(UrlDataManager& urlDataManager) const;
+ Json::Value drawToAndCollectJSON(SkCanvas*, UrlDataManager& urlDataManager) 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
* occurs.