@@ -13,6 +13,7 @@ import androidx.compose.ui.Modifier
13
13
import com.squareup.moshi.JsonAdapter
14
14
import com.squareup.workflow1.traceviewer.TraceMode
15
15
import com.squareup.workflow1.traceviewer.model.Node
16
+ import com.squareup.workflow1.traceviewer.model.NodeUpdate
16
17
import com.squareup.workflow1.traceviewer.ui.DrawTree
17
18
18
19
/* *
@@ -25,30 +26,32 @@ import com.squareup.workflow1.traceviewer.ui.DrawTree
25
26
internal fun RenderTrace (
26
27
traceSource : TraceMode ,
27
28
frameInd : Int ,
28
- onFileParse : (List < Node > ) -> Unit ,
29
- onNodeSelect : (Node , Node ? ) -> Unit ,
29
+ onFileParse : (Int ) -> Unit ,
30
+ onNodeSelect : (NodeUpdate ) -> Unit ,
30
31
onNewFrame : () -> Unit ,
32
+ onNewData : (String ) -> Unit ,
31
33
modifier : Modifier = Modifier
32
34
) {
33
35
var isLoading by remember(traceSource) { mutableStateOf(true ) }
34
36
var error by remember(traceSource) { mutableStateOf<String ?>(null ) }
35
- val frames = remember { mutableStateListOf<Node >() }
36
- val fullTree = remember { mutableStateListOf<Node >() }
37
- val affectedNodes = remember { mutableStateListOf<Set <Node >>() }
37
+ val frames = remember (traceSource) { mutableStateListOf<Node >() }
38
+ val fullTree = remember (traceSource) { mutableStateListOf<Node >() }
39
+ val affectedNodes = remember (traceSource) { mutableStateListOf<Set <Node >>() }
38
40
39
41
// Updates current state with the new data from trace source.
40
42
fun addToStates (frame : List <Node >, tree : List <Node >, affected : List <Set <Node >>) {
41
43
frames.addAll(frame)
42
44
fullTree.addAll(tree)
43
45
affectedNodes.addAll(affected)
44
46
isLoading = false
45
- onFileParse(frame)
47
+ onFileParse(frame.size )
46
48
}
47
49
48
50
// Handles the result of parsing a trace, either from file or live. Live mode includes callback
49
51
// for when a new frame is received.
50
52
fun handleParseResult (
51
53
parseResult : ParseResult ,
54
+ rawRenderPass : String? = null,
52
55
onNewFrame : (() -> Unit )? = null
53
56
) {
54
57
when (parseResult) {
@@ -62,7 +65,9 @@ internal fun RenderTrace(
62
65
tree = parseResult.trees,
63
66
affected = parseResult.affectedNodes
64
67
)
68
+ // Only increment the frame index and add the raw data during Live tracing mode
65
69
onNewFrame?.invoke()
70
+ rawRenderPass?.let { onNewData(it) }
66
71
}
67
72
}
68
73
}
@@ -82,7 +87,7 @@ internal fun RenderTrace(
82
87
streamRenderPassesFromDevice { renderPass ->
83
88
val currentTree = fullTree.lastOrNull()
84
89
val parseResult = parseLiveTrace(renderPass, adapter, currentTree)
85
- handleParseResult(parseResult, onNewFrame)
90
+ handleParseResult(parseResult, renderPass, onNewFrame)
86
91
}
87
92
error = " Socket has already been closed or is not available."
88
93
}
@@ -98,7 +103,7 @@ internal fun RenderTrace(
98
103
val previousFrame = if (frameInd > 0 ) fullTree[frameInd - 1 ] else null
99
104
DrawTree (
100
105
node = fullTree[frameInd],
101
- previousNode = previousFrame,
106
+ previousFrameNode = previousFrame,
102
107
affectedNodes = affectedNodes[frameInd],
103
108
expandedNodes = remember(frameInd) { mutableStateMapOf() },
104
109
onNodeSelect = onNodeSelect,
0 commit comments