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.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							53 lines
						
					
					
						
							1.6 KiB
						
					
					
				"use strict"; | 
						|
 | 
						|
// Actual implementation of the Performance class. | 
						|
 | 
						|
const clockIsAccurate = require("./clock-is-accurate"); | 
						|
const calculateClockOffset = require("./calculate-clock-offset"); | 
						|
const { hrtime, toMS } = require("./utils"); | 
						|
 | 
						|
const kTimeOrigin = Symbol("time origin"); | 
						|
const kTimeOriginTimestamp = Symbol("time origin timestamp"); | 
						|
 | 
						|
class Performance { | 
						|
  constructor() { | 
						|
    // Time origin. | 
						|
    const timeOrigin = hrtime(); | 
						|
    this[kTimeOrigin] = timeOrigin; | 
						|
 | 
						|
    if (clockIsAccurate) { | 
						|
      // Let |t1| be the DOMHighResTimeStamp representing the high resolution Unix time at which the global monotonic | 
						|
      // clock is zero. This has to be calculated for every Performance object to account for clock drifts. | 
						|
      const t1 = calculateClockOffset(); | 
						|
 | 
						|
      // Let |t2| be the DOMHighResTimeStamp representing the high resolution time value of the global monotonic clock | 
						|
      // at global's time origin. | 
						|
      const t2 = toMS(timeOrigin); | 
						|
 | 
						|
      // Return the sum of |t1| and |t2|. | 
						|
      this[kTimeOriginTimestamp] = t1 + t2; | 
						|
    } else { | 
						|
      // Clock isn't accurate enough. Use millisecond accuracy per spec. | 
						|
      const cur = Date.now(); | 
						|
      this[kTimeOriginTimestamp] = cur; | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  // The timeOrigin getter actually returns the time origin timestamp, not the raw time origin. | 
						|
  get timeOrigin() { | 
						|
    return this[kTimeOriginTimestamp]; | 
						|
  } | 
						|
 | 
						|
  now() { | 
						|
    const diff = toMS(hrtime(this[kTimeOrigin])); | 
						|
    return clockIsAccurate ? diff : Math.round(diff); | 
						|
  } | 
						|
 | 
						|
  toJSON() { | 
						|
    return { | 
						|
      timeOrigin: this.timeOrigin | 
						|
    }; | 
						|
  } | 
						|
} | 
						|
 | 
						|
module.exports = { Performance };
 | 
						|
 |