Gecko [0]: accurate to 20us
Edge [1]: accurate to 20us, with an additional 20us of noise
Chrome [2]: accurate to 100us (thanks mkeblx for finding this)
Safari [OP]: accurate to 1000us
[0] https://blog.mozilla.org/security/2018/01/03/mitigations-lan...
[1] https://blogs.windows.com/msedgedev/2018/01/03/speculative-e...
[2] https://chromium-review.googlesource.com/c/chromium/src/+/85...
e.g. if you have a tight loop that just increments a counter, couldn't you just run that for a second (interrupted by a lower frequency timer source), then find out how many counts/second the JIT can perform, presumably millions or billions. To time operation 'X', you then just perform X and run the tight loop again, and compare how many fewer tight loops you completed.
For WebGL, don't you just rely on requestAnimationFrame to call you at the right times, and draw your frame as quickly as possible? What's the benefit of being able to measure the frame time to the nearest microsecond, rather than the nearest millisecond?
Maybe you want to measure the frame rate precisely? That is certainly something you can do, but not usually something you need to do.