This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
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.
37 lines
1.3 KiB
37 lines
1.3 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; |
|
while (cur === start) { |
|
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; |
|
}
|
|
|