Skip to content

Commit c243292

Browse files
committed
Highlight each render pass detail within the full tree
1 parent ef6ba80 commit c243292

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/ui/WorkflowTree.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.squareup.workflow1.traceviewer.ui
22

3+
import androidx.compose.foundation.background
34
import androidx.compose.foundation.border
45
import androidx.compose.foundation.clickable
56
import androidx.compose.foundation.layout.Arrangement
@@ -36,11 +37,11 @@ internal fun RenderDiagram(
3637
onNodeSelect: (Node) -> Unit,
3738
modifier: Modifier = Modifier
3839
) {
39-
var frames by remember { mutableStateOf<List<Node>>(emptyList()) }
4040
var isLoading by remember(traceFile) { mutableStateOf(true) }
4141
var error by remember(traceFile) { mutableStateOf<Throwable?>(null) }
42-
var mainTree by remember { mutableStateOf<Node?>(null) }
42+
var frames by remember { mutableStateOf<List<Node>>(emptyList()) }
4343
var fullTree by remember { mutableStateOf<List<Node>>(emptyList()) }
44+
var affectedNodes by remember { mutableStateOf<List<Set<Node>>>(emptyList()) }
4445

4546
LaunchedEffect(traceFile) {
4647
val parseResult = parseTrace(traceFile)
@@ -52,8 +53,8 @@ internal fun RenderDiagram(
5253
is ParseResult.Success -> {
5354
val parsedFrames = parseResult.trace ?: emptyList()
5455
frames = parsedFrames
55-
mainTree = parseResult.trees.first()
5656
fullTree = parseResult.trees
57+
affectedNodes = parseResult.affectedNodes
5758
onFileParse(parsedFrames)
5859
isLoading = false
5960
}
@@ -66,8 +67,8 @@ internal fun RenderDiagram(
6667
}
6768

6869
if (!isLoading) {
69-
// DrawTree(frames[frameInd], onNodeSelect)
70-
DrawTree(fullTree[frameInd], onNodeSelect)
70+
// DrawTree(frames[frameInd], affectedNodes[frameInd], onNodeSelect)
71+
DrawTree(fullTree[frameInd], affectedNodes[frameInd], onNodeSelect)
7172
}
7273
}
7374

@@ -78,6 +79,7 @@ internal fun RenderDiagram(
7879
@Composable
7980
private fun DrawTree(
8081
node: Node,
82+
affectedNodes: Set<Node>,
8183
onNodeSelect: (Node) -> Unit,
8284
modifier: Modifier = Modifier,
8385
) {
@@ -88,15 +90,16 @@ private fun DrawTree(
8890
.fillMaxSize(),
8991
horizontalAlignment = Alignment.CenterHorizontally,
9092
) {
91-
DrawNode(node, onNodeSelect)
93+
val isAffected = affectedNodes.contains(node)
94+
DrawNode(node, isAffected, onNodeSelect)
9295

9396
// Draws the node's children recursively.
9497
Row(
9598
horizontalArrangement = Arrangement.Center,
9699
verticalAlignment = Alignment.Top
97100
) {
98101
node.children.forEach { childNode ->
99-
DrawTree(childNode, onNodeSelect)
102+
DrawTree(childNode, affectedNodes, onNodeSelect)
100103
}
101104
}
102105
}
@@ -108,10 +111,12 @@ private fun DrawTree(
108111
@Composable
109112
private fun DrawNode(
110113
node: Node,
114+
isAffected: Boolean,
111115
onNodeSelect: (Node) -> Unit,
112116
) {
113117
Box(
114118
modifier = Modifier
119+
.background(if (isAffected) Color.Green else Color.Transparent)
115120
.clickable {
116121
// Selecting a node will bubble back up to the main view to handle the selection
117122
onNodeSelect(node)

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/util/JsonParser.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ internal suspend fun parseTrace(
4848
frameTrees.add(mergedTree)
4949
mergedTree
5050
}
51-
return ParseResult.Success(parsedTrace, frameTrees)
51+
return ParseResult.Success(parsedTrace, frameTrees, parsedRenderPasses)
5252
}
5353

5454
/**
@@ -116,6 +116,8 @@ internal fun mergeFrameIntoMainTree(
116116
}
117117

118118
internal sealed interface ParseResult {
119-
class Success(val trace: List<Node>?, val trees: List<Node>) : ParseResult
119+
class Success(val trace: List<Node>?, val trees: List<Node>, affectedNodes: List<List<Node>>) : ParseResult {
120+
val affectedNodes = affectedNodes.map { it.toSet() }
121+
}
120122
class Failure(val error: Throwable) : ParseResult
121123
}

0 commit comments

Comments
 (0)