diff options
author | 2016-02-29 11:15:06 -0800 | |
---|---|---|
committer | 2016-02-29 11:15:06 -0800 | |
commit | 10d8fc29bc1605c134e98f5b58c2efb73cef6073 (patch) | |
tree | 702f20b251cfa0dfb6c858269ed148ec9e0ee62c /tools/debugger | |
parent | 790d5132620d86813380d3df251e80dd2b41a409 (diff) |
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
Diffstat (limited to 'tools/debugger')
-rw-r--r-- | tools/debugger/SkDebugCanvas.cpp | 62 | ||||
-rw-r--r-- | tools/debugger/SkDebugCanvas.h | 5 |
2 files changed, 66 insertions, 1 deletions
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp index cc1733b705..4fc6d14625 100644 --- a/tools/debugger/SkDebugCanvas.cpp +++ b/tools/debugger/SkDebugCanvas.cpp @@ -13,6 +13,12 @@ #include "SkPaintFilterCanvas.h" #include "SkOverdrawMode.h" +#if SK_SUPPORT_GPU +#include "GrAuditTrail.h" +#include "GrContext.h" +#include "GrRenderTarget.h" +#endif + #define SKDEBUGCANVAS_VERSION 1 #define SKDEBUGCANVAS_ATTRIBUTE_VERSION "version" #define SKDEBUGCANVAS_ATTRIBUTE_COMMANDS "commands" @@ -68,7 +74,8 @@ SkDebugCanvas::SkDebugCanvas(int width, int height) , fOverdrawViz(false) , fOverrideFilterQuality(false) , fFilterQuality(kNone_SkFilterQuality) - , fClipVizColor(SK_ColorTRANSPARENT) { + , fClipVizColor(SK_ColorTRANSPARENT) + , fDrawGpuBatchBounds(true) { fUserMatrix.reset(); // SkPicturePlayback uses the base-class' quickReject calls to cull clipped @@ -209,16 +216,36 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { if (fPaintFilterCanvas) { fPaintFilterCanvas->addCanvas(canvas); canvas = fPaintFilterCanvas.get(); + } if (fMegaVizMode) { this->markActiveCommands(index); } + + // 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) { + GrContext* ctx = rt->getContext(); + if (ctx) { + at = ctx->getAuditTrail(); + } + } +#endif for (int i = 0; i <= index; i++) { if (i == index && fFilter) { canvas->clear(0xAAFFFFFF); } + +#if SK_SUPPORT_GPU + GrAuditTrail::AutoCollectBatches* acb = nullptr; + if (at) { + acb = new GrAuditTrail::AutoCollectBatches(at, i); + } +#endif if (fCommandVector[i]->isVisible()) { if (fMegaVizMode && fCommandVector[i]->active()) { @@ -232,6 +259,11 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { fCommandVector[i]->execute(canvas); } } +#if SK_SUPPORT_GPU + if (at && acb) { + delete acb; + } +#endif } if (SkColorGetA(fClipVizColor) != 0) { @@ -294,6 +326,34 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { if (fPaintFilterCanvas) { fPaintFilterCanvas->removeAll(); } + +#if SK_SUPPORT_GPU + // draw any batches if required and issue a full reset onto GrAuditTrail + if (at) { + GrAuditTrail::AutoEnable ae(at); + SkTArray<GrAuditTrail::BatchInfo> childrenBounds; + at->getBoundsByClientID(&childrenBounds, index); + SkPaint paint; + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(1); + for (int i = 0; i < childrenBounds.count(); i++) { + paint.setColor(SK_ColorBLACK); + canvas->drawRect(childrenBounds[i].fBounds, paint); + for (int j = 0; j < childrenBounds[i].fBatches.count(); j++) { + const GrAuditTrail::BatchInfo::Batch& batch = childrenBounds[i].fBatches[j]; + if (batch.fClientID != index) { + paint.setColor(SK_ColorBLUE); + } else { + paint.setColor(SK_ColorRED); + } + canvas->drawRect(batch.fBounds, paint); + } + } + + at->fullReset(); + } + +#endif } void SkDebugCanvas::deleteDrawCommandAt(int index) { diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h index d06637d42b..9549cb06ad 100644 --- a/tools/debugger/SkDebugCanvas.h +++ b/tools/debugger/SkDebugCanvas.h @@ -43,6 +43,10 @@ public: void setClipVizColor(SkColor clipVizColor) { this->fClipVizColor = clipVizColor; } SkColor getClipVizColor() const { return fClipVizColor; } + void setDrawGpuBatchBounds(bool drawGpuBatchBounds) { + fDrawGpuBatchBounds = drawGpuBatchBounds; + } + bool getAllowSimplifyClip() const { return fAllowSimplifyClip; } void setPicture(SkPicture* picture) { fPicture = picture; } @@ -245,6 +249,7 @@ private: bool fOverrideFilterQuality; SkFilterQuality fFilterQuality; SkColor fClipVizColor; + bool fDrawGpuBatchBounds; SkAutoTUnref<SkNWayCanvas> fPaintFilterCanvas; |