You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							39 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							39 lines
						
					
					
						
							1.5 KiB
						
					
					
				"use strict"; | 
						|
 | 
						|
// This files implements the calculation of the offset between the global monotonic clock and UNIX time. This value is | 
						|
// known as |t1| in the calculation of "time origin timestamp" in the spec. This value needs to be calculated once and | 
						|
// can be used in all subsequent Performance instances. | 
						|
// | 
						|
// However, if the clock is not fast enough, the export is undefined to signify that we should use Date.now() to get the | 
						|
// time origin timestamp with millisecond accuracy, per spec. | 
						|
 | 
						|
const { getGlobalMonotonicClockMS } = require("./global-monotonic-clock"); | 
						|
const clockIsAccurate = require("./clock-is-accurate"); | 
						|
 | 
						|
// This function assumes the clock is accurate. | 
						|
function calculateClockOffset() { | 
						|
  const start = Date.now(); | 
						|
  let cur = start; | 
						|
  // Limit the iterations, just in case we're running in an environment where Date.now() has been mocked and is | 
						|
  // constant. | 
						|
  for (let i = 0; i < 1e6 && cur === start; i++) { | 
						|
    cur = Date.now(); | 
						|
  } | 
						|
 | 
						|
  // At this point |cur| "just" became equal to the next millisecond -- the unseen digits after |cur| are approximately | 
						|
  // all 0, and |cur| is the closest to the actual value of the UNIX time. Now, get the current global monotonic clock | 
						|
  // value and do the remaining calculations. | 
						|
 | 
						|
  return cur - getGlobalMonotonicClockMS(); | 
						|
} | 
						|
 | 
						|
if (clockIsAccurate) { | 
						|
  // Warm up the function. | 
						|
  calculateClockOffset(); | 
						|
  calculateClockOffset(); | 
						|
  calculateClockOffset(); | 
						|
 | 
						|
  module.exports = calculateClockOffset; | 
						|
} else { | 
						|
  module.exports = undefined; | 
						|
}
 | 
						|
 |