Debugger changes to make layer inspection interactive
Change-Id: Ief4d8c2a90e8f459a64a3c07e97e16d2ef287bfa
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/260403
Commit-Queue: Nathaniel Nifong <nifong@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/tools/debugger/DebugLayerManager.cpp b/tools/debugger/DebugLayerManager.cpp
index c903d7b..26f419a 100644
--- a/tools/debugger/DebugLayerManager.cpp
+++ b/tools/debugger/DebugLayerManager.cpp
@@ -65,6 +65,12 @@
keys.push_back(k);
}
+void DebugLayerManager::drawLayerEventTo(SkCanvas* canvas, const int nodeId, const int frame) {
+ auto& evt = fDraws[{frame, nodeId}];
+ evt.debugCanvas->drawTo(canvas, evt.command);
+ canvas->flush();
+}
+
sk_sp<SkImage> DebugLayerManager::getLayerAsImage(const int nodeId, const int frame) {
// What is the last frame having an SkPicture for this layer? call it frame N
// have cached image of it? if so, return it.
@@ -100,23 +106,28 @@
// count back up with i
auto* canvas = surface->getCanvas();
for (; i<relevantFrames.size() && relevantFrames[i]<=frameN; i++) {
- auto& evt = fDraws[{relevantFrames[i], nodeId}];
- evt.debugCanvas->drawTo(canvas, evt.command);
- canvas->flush();
+ drawLayerEventTo(canvas, nodeId, relevantFrames[i]);
}
drawEvent.image = surface->makeImageSnapshot();
return drawEvent.image;
}
+DebugLayerManager::DrawEventSummary DebugLayerManager::event(int nodeId, int frame) const {
+ auto* evt = fDraws.find({frame, nodeId});
+ if (!evt) { return {}; }
+ return {
+ true, nodeId, evt->fullRedraw, evt->debugCanvas->getSize(),
+ evt->layerBounds.width(), evt->layerBounds.height()
+ };
+}
+
std::vector<DebugLayerManager::DrawEventSummary> DebugLayerManager::summarizeEvents(int frame) const {
std::vector<DrawEventSummary> result;
for (const auto& node : listNodesForFrame(frame)) {
- auto* evt = fDraws.find({frame, node});
- if (!evt) { continue; }
- result.push_back({
- node, evt->fullRedraw, evt->debugCanvas->getSize(),
- evt->layerBounds.width(), evt->layerBounds.height()
- });
+ auto summary = event(node, frame);
+ if (summary.found) {
+ result.push_back(summary);
+ }
}
return result;
}
@@ -140,3 +151,29 @@
}
return result;
}
+
+DebugCanvas* DebugLayerManager::getEventDebugCanvas(int nodeId, int frame) {
+ auto& evt = fDraws[{frame, nodeId}];
+ return evt.debugCanvas.get();
+}
+
+void DebugLayerManager::setOverdrawViz(bool overdrawViz) {
+ for (const auto& key : keys) {
+ auto& evt = fDraws[key];
+ evt.debugCanvas->setOverdrawViz(overdrawViz);
+ }
+}
+
+void DebugLayerManager::setClipVizColor(SkColor clipVizColor) {
+ for (const auto& key : keys) {
+ auto& evt = fDraws[key];
+ evt.debugCanvas->setClipVizColor(clipVizColor);
+ }
+}
+
+void DebugLayerManager::setDrawGpuOpBounds(bool drawGpuOpBounds) {
+ for (const auto& key : keys) {
+ auto& evt = fDraws[key];
+ evt.debugCanvas->setDrawGpuOpBounds(drawGpuOpBounds);
+ }
+}