@@ -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