@@ -82,7 +82,11 @@ export default function TraceReplayerMain({
82
82
83
83
const [ timeline , setTimeline ] = useState < TraceNode [ ] > ( [ ] ) ;
84
84
const [ ready , setReady ] = useState < boolean > ( false ) ;
85
- let entities : Map < string , AnimationEntity > = new Map ( ) ;
85
+ const [ entities , setEntities ] = useState < Map < string , AnimationEntity > > (
86
+ new Map ( )
87
+ ) ;
88
+ const [ delta , setDelta ] = useState ( 1 ) ;
89
+ const [ frame , setFrame ] = useState ( 0 ) ;
86
90
const [ tabs , setTabs ] = useState < Tab [ ] > ( [ ] ) ;
87
91
const [ afterimage , setAfterimage ] = useState < boolean > ( true ) ;
88
92
const [ eager , setEager ] = useState < boolean > ( true ) ;
@@ -95,9 +99,9 @@ export default function TraceReplayerMain({
95
99
96
100
let speed = useRef < number > ( 5 ) ;
97
101
let cursor = useRef < number > ( 0 ) ;
98
- let paused = true ;
99
- let stopped = true ;
100
- const observer : ( ( cursor : number ) => void ) [ ] = [ ] ;
102
+ const [ paused , setPaused ] = useState ( true ) ;
103
+ const [ stopped , setStopped ] = useState ( true ) ;
104
+ const [ observer , setObserver ] = useState < ( ( cursor : number ) => void ) [ ] > ( [ ] ) ;
101
105
const trace = getSortedTraceSpans ( selectedTrace ) ;
102
106
const tree = new TraceTreeBuilder ( trace , classMap ) . build ( ) ;
103
107
@@ -164,24 +168,25 @@ export default function TraceReplayerMain({
164
168
} ;
165
169
166
170
const callbackCursor = ( c : number ) => {
167
- stop ( ) ;
171
+ // setStopped(true );
168
172
cursor . current = c ;
169
- start ( ) ;
170
- tick ( 0 ) ;
171
- if ( paused ) {
172
- pause ( ) ;
173
- }
173
+ // setStopped(false);
174
+ setDelta ( 0 ) ;
175
+ setFrame ( frame + 1 ) ;
176
+ // if (paused) {
177
+ // setPaused(true);
178
+ // }
174
179
} ;
175
180
176
181
// Function that is called each frame to animate traces
177
- const tick = ( delta : number ) => {
182
+ useEffect ( ( ) => {
178
183
if ( stopped || paused ) {
179
184
return ;
180
185
}
181
186
182
187
// Nothing left to animate
183
188
if ( entities . size <= 0 ) {
184
- stop ( ) ;
189
+ setStopped ( true ) ;
185
190
return ;
186
191
}
187
192
@@ -279,17 +284,22 @@ export default function TraceReplayerMain({
279
284
entity . callee . mesh . turnOpaque ( ) ;
280
285
turnAncestorsTransparent ( entity . callee . clazz . parent , 1 , 0.1 ) ;
281
286
} ) ;
282
- } ;
287
+ } , [ delta , frame ] ) ;
283
288
284
- const start = ( ) => {
285
- paused = false ;
286
- if ( ! stopped ) {
289
+ // start()
290
+ useEffect ( ( ) => {
291
+ if ( stopped ) {
287
292
return ;
288
293
}
289
- stopped = false ;
294
+
295
+ setPaused ( false ) ;
296
+
290
297
renderingLoop . tickCallbacks . push ( {
291
298
id : 'trace-player' ,
292
- callback : ( delta ) => tick ( delta ) ,
299
+ callback : ( delta ) => {
300
+ setDelta ( delta ) ;
301
+ setFrame ( frame + 1 ) ;
302
+ } ,
293
303
} ) ;
294
304
295
305
configuration . setIsCommRendered ( false ) ;
@@ -344,28 +354,24 @@ export default function TraceReplayerMain({
344
354
tab . active = true ;
345
355
setTabs ( [ ...tabs , tab ] ) ;
346
356
} ) ;
347
- } ;
357
+ } , [ stopped ] ) ;
348
358
349
- const pause = ( ) => {
350
- paused = true ;
351
- } ;
352
-
353
- const stop = ( ) => {
354
- if ( stopped ) {
359
+ // stop()
360
+ useEffect ( ( ) => {
361
+ if ( ! stopped ) {
355
362
return ;
356
363
}
364
+
357
365
renderingLoop . tickCallbacks = renderingLoop . tickCallbacks . filter (
358
366
( callback ) => {
359
367
return callback . id !== 'trace-player' ;
360
368
}
361
369
) ;
362
370
363
- if ( configuration . isCommRendered ) {
364
- configuration . setIsCommRendered ( true ) ;
365
- appRenderer . addCommunicationForAllApplications ( ) ;
366
- }
371
+ configuration . setIsCommRendered ( true ) ;
372
+ appRenderer . addCommunicationForAllApplications ( ) ;
367
373
368
- turnTransparent ( 1 ) ;
374
+ // turnTransparent(1);
369
375
370
376
entities . forEach ( ( entity ) => {
371
377
entity . destroy ( ) ;
@@ -383,8 +389,9 @@ export default function TraceReplayerMain({
383
389
// selectedTrace.spanList[0].spanId
384
390
// );
385
391
}
386
- stopped = true ;
387
- } ;
392
+
393
+ setPaused ( true ) ;
394
+ } , [ stopped ] ) ;
388
395
389
396
const toggleEager = ( ) => {
390
397
setEager ( ( prev : boolean ) => ! prev ) ;
@@ -413,7 +420,10 @@ export default function TraceReplayerMain({
413
420
< Button
414
421
className = "th-btn mx-2"
415
422
title = "Play"
416
- onClick = { start }
423
+ onClick = { ( ) => {
424
+ setStopped ( false ) ;
425
+ setPaused ( false ) ;
426
+ } }
417
427
type = "button"
418
428
>
419
429
< PlayIcon size = "small" />
@@ -422,7 +432,7 @@ export default function TraceReplayerMain({
422
432
< Button
423
433
className = "th-btn mx-2 navbar-highlight playing"
424
434
title = "Stop"
425
- onClick = { pause }
435
+ onClick = { ( ) => setPaused ( true ) }
426
436
type = "button"
427
437
>
428
438
< PlayIcon size = "small" />
@@ -474,9 +484,9 @@ export default function TraceReplayerMain({
474
484
< div className = "mb-3" >
475
485
< TraceTimeline
476
486
timeline = { timeline }
477
- select = { true }
487
+ select = { false }
478
488
cursor = { true }
479
- observer = { [ ] }
489
+ observer = { observer }
480
490
selection = { ( start : number , end : number ) => { } }
481
491
callback = { callbackCursor }
482
492
/>
0 commit comments