Skip to content

Commit 387bd0a

Browse files
committed
WIP: Fix trace replayer
1 parent c37d8ec commit 387bd0a

File tree

2 files changed

+47
-48
lines changed

2 files changed

+47
-48
lines changed

src/components/visualization/page-setup/sidebar/toolbar/trace-replayer/trace-replayer-main.tsx

Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,11 @@ export default function TraceReplayerMain({
8282

8383
const [timeline, setTimeline] = useState<TraceNode[]>([]);
8484
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);
8690
const [tabs, setTabs] = useState<Tab[]>([]);
8791
const [afterimage, setAfterimage] = useState<boolean>(true);
8892
const [eager, setEager] = useState<boolean>(true);
@@ -95,9 +99,9 @@ export default function TraceReplayerMain({
9599

96100
let speed = useRef<number>(5);
97101
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)[]>([]);
101105
const trace = getSortedTraceSpans(selectedTrace);
102106
const tree = new TraceTreeBuilder(trace, classMap).build();
103107

@@ -164,24 +168,25 @@ export default function TraceReplayerMain({
164168
};
165169

166170
const callbackCursor = (c: number) => {
167-
stop();
171+
// setStopped(true);
168172
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+
// }
174179
};
175180

176181
// Function that is called each frame to animate traces
177-
const tick = (delta: number) => {
182+
useEffect(() => {
178183
if (stopped || paused) {
179184
return;
180185
}
181186

182187
// Nothing left to animate
183188
if (entities.size <= 0) {
184-
stop();
189+
setStopped(true);
185190
return;
186191
}
187192

@@ -279,17 +284,22 @@ export default function TraceReplayerMain({
279284
entity.callee.mesh.turnOpaque();
280285
turnAncestorsTransparent(entity.callee.clazz.parent, 1, 0.1);
281286
});
282-
};
287+
}, [delta, frame]);
283288

284-
const start = () => {
285-
paused = false;
286-
if (!stopped) {
289+
// start()
290+
useEffect(() => {
291+
if (stopped) {
287292
return;
288293
}
289-
stopped = false;
294+
295+
setPaused(false);
296+
290297
renderingLoop.tickCallbacks.push({
291298
id: 'trace-player',
292-
callback: (delta) => tick(delta),
299+
callback: (delta) => {
300+
setDelta(delta);
301+
setFrame(frame + 1);
302+
},
293303
});
294304

295305
configuration.setIsCommRendered(false);
@@ -344,28 +354,24 @@ export default function TraceReplayerMain({
344354
tab.active = true;
345355
setTabs([...tabs, tab]);
346356
});
347-
};
357+
}, [stopped]);
348358

349-
const pause = () => {
350-
paused = true;
351-
};
352-
353-
const stop = () => {
354-
if (stopped) {
359+
// stop()
360+
useEffect(() => {
361+
if (!stopped) {
355362
return;
356363
}
364+
357365
renderingLoop.tickCallbacks = renderingLoop.tickCallbacks.filter(
358366
(callback) => {
359367
return callback.id !== 'trace-player';
360368
}
361369
);
362370

363-
if (configuration.isCommRendered) {
364-
configuration.setIsCommRendered(true);
365-
appRenderer.addCommunicationForAllApplications();
366-
}
371+
configuration.setIsCommRendered(true);
372+
appRenderer.addCommunicationForAllApplications();
367373

368-
turnTransparent(1);
374+
// turnTransparent(1);
369375

370376
entities.forEach((entity) => {
371377
entity.destroy();
@@ -383,8 +389,9 @@ export default function TraceReplayerMain({
383389
// selectedTrace.spanList[0].spanId
384390
// );
385391
}
386-
stopped = true;
387-
};
392+
393+
setPaused(true);
394+
}, [stopped]);
388395

389396
const toggleEager = () => {
390397
setEager((prev: boolean) => !prev);
@@ -413,7 +420,10 @@ export default function TraceReplayerMain({
413420
<Button
414421
className="th-btn mx-2"
415422
title="Play"
416-
onClick={start}
423+
onClick={() => {
424+
setStopped(false);
425+
setPaused(false);
426+
}}
417427
type="button"
418428
>
419429
<PlayIcon size="small" />
@@ -422,7 +432,7 @@ export default function TraceReplayerMain({
422432
<Button
423433
className="th-btn mx-2 navbar-highlight playing"
424434
title="Stop"
425-
onClick={pause}
435+
onClick={() => setPaused(true)}
426436
type="button"
427437
>
428438
<PlayIcon size="small" />
@@ -474,9 +484,9 @@ export default function TraceReplayerMain({
474484
<div className="mb-3">
475485
<TraceTimeline
476486
timeline={timeline}
477-
select={true}
487+
select={false}
478488
cursor={true}
479-
observer={[]}
489+
observer={observer}
480490
selection={(start: number, end: number) => {}}
481491
callback={callbackCursor}
482492
/>

src/components/visualization/page-setup/sidebar/toolbar/trace-replayer/trace-timeline.tsx

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,7 @@ export default function TraceTimeline({
166166
}
167167
};
168168
}
169-
}, [
170-
data,
171-
layout,
172-
options,
173-
cursor,
174-
select,
175-
observer,
176-
callback,
177-
selection,
178-
timeline,
179-
max,
180-
]);
169+
}, [timeline]);
181170

182171
return <div style={{ width: '100%' }} className="plotlyDiv" ref={divRef} />;
183172
}

0 commit comments

Comments
 (0)