Skip to content

Commit e969569

Browse files
author
rocketraccoon
committed
fix: timeline error
1 parent 0c55c85 commit e969569

File tree

1 file changed

+40
-30
lines changed

1 file changed

+40
-30
lines changed

src/browser/history/rrweb.ts

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,43 @@ export async function installRrwebAndCollectEvents(
1919
return runWithoutHistory<Promise<eventWithTime[]>>({ callstack }, () =>
2020
session.execute(
2121
(rrwebRecordFnCode, serverTime) => {
22-
// @ts-expect-error
23-
if (!window.__testplaneTiming) {
24-
// @ts-expect-error
25-
window.__testplaneTiming = {
26-
serverTime: serverTime,
27-
baseRaf: null,
28-
initialized: true,
29-
};
22+
const getRealTimestamp = (fallbackTime: number = 0): number => {
23+
const nativeCode = "[native code]";
3024

31-
requestAnimationFrame(timestamp => {
32-
// @ts-expect-error
33-
window.__testplaneTiming.baseRaf = timestamp;
34-
});
35-
}
25+
try {
26+
if (Date.now.toString().includes(nativeCode)) {
27+
return Date.now();
28+
}
29+
} catch (e) {
30+
/**/
31+
}
32+
33+
try {
34+
if (new Date().getTime.toString().includes(nativeCode)) {
35+
return new Date().getTime();
36+
}
37+
} catch (e) {
38+
/**/
39+
}
40+
41+
try {
42+
if (new Date().valueOf.toString().includes(nativeCode)) {
43+
return new Date().valueOf();
44+
}
45+
} catch (e) {
46+
/**/
47+
}
48+
49+
try {
50+
if (performance.now.toString().includes(nativeCode)) {
51+
return Math.floor(performance.timeOrigin + performance.now());
52+
}
53+
} catch (e) {
54+
/**/
55+
}
56+
57+
return fallbackTime;
58+
};
3659

3760
try {
3861
// @ts-expect-error
@@ -47,23 +70,10 @@ export async function installRrwebAndCollectEvents(
4770
window.rrweb.record({
4871
// @ts-expect-error
4972
emit(event) {
50-
// We use this complex RAF-based timing, because users might have Date.now() stubbed
51-
requestAnimationFrame(currentRaf => {
52-
// @ts-expect-error
53-
const baseRaf = window.__testplaneTiming.baseRaf;
54-
// @ts-expect-error
55-
const serverTime = window.__testplaneTiming.serverTime;
56-
57-
if (baseRaf !== null) {
58-
event.timestamp = Math.floor(serverTime + (currentRaf - baseRaf));
59-
} else {
60-
// RAF not ready, use server time
61-
event.timestamp = serverTime;
62-
}
63-
64-
// @ts-expect-error
65-
window.rrwebEvents.push(event);
66-
});
73+
event.timestamp = getRealTimestamp(serverTime);
74+
75+
// @ts-expect-error
76+
window.rrwebEvents.push(event);
6777
},
6878
});
6979

0 commit comments

Comments
 (0)