[JS + docs] improve std/monotimes module (#17103)

This commit is contained in:
flywind 2021-02-22 04:09:25 -06:00 • committed by GitHub
commit f07a072691
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 43 deletions

View file

@ -8,17 +8,21 @@
#
##[
The ``std/monotimes`` module implements monotonic timestamps. A monotonic
The `std/monotimes` module implements monotonic timestamps. A monotonic
timestamp represents the time that has passed since some system defined
point in time. The monotonic timestamps are guaranteed to always increase,
meaning that that the following is guaranteed to work:
]##
runnableExamples:
import std/os
.. code-block:: nim
let a = getMonoTime()
# ... do some work
sleep(10)
let b = getMonoTime()
assert a <= b
assert a < b
##[
This is not guaranteed for the `times.Time` type! This means that the
`MonoTime` should be used when measuring durations of time with
high precision.
@ -35,7 +39,7 @@
* `times module <times.html>`_
]##
import times
import std/times
type
MonoTime* = object ## Represents a monotonic timestamp.
@ -53,18 +57,16 @@ when defined(macosx):
when defined(js):
proc getJsTicks: float =
## Returns ticks in the unit seconds
## Returns ticks in the unit seconds.
when defined(nodejs):
{.emit: """
var isNode = typeof module !== 'undefined' && module.exports
if (isNode) {
var process = require('process');
var time = process.hrtime()
return time[0] + time[1] / 1000000000;
} else {
return window.performance.now() / 1000;
}
let process = require('process');
let time = process.hrtime();
`result` = time[0] + time[1] / 1000000000;
""".}
else:
proc jsNow(): float {.importjs: "window.performance.now()".}
result = jsNow() / 1000
# Workaround for #6752.
{.push overflowChecks: off.}
@ -75,7 +77,7 @@ when defined(js):
{.pop.}
elif defined(posix) and not defined(osx):
import posix
import std/posix
elif defined(windows):
proc QueryPerformanceCounter(res: var uint64) {.
@ -84,11 +86,11 @@ elif defined(windows):
importc: "QueryPerformanceFrequency", stdcall, dynlib: "kernel32".}
proc getMonoTime*(): MonoTime {.tags: [TimeEffect].} =
## Get the current `MonoTime` timestamp.
## Returns the current `MonoTime` timestamp.
##
## When compiled with the JS backend and executed in a browser,
## this proc calls `window.performance.now()`, which is not supported by
## older browsers. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now)
## this proc calls `window.performance.now()`.
## See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now)
## for more information.
when defined(js):
let ticks = getJsTicks()

View file

@ -1,4 +1,8 @@
import std/monotimes, times
discard """
targets: "c js"
"""
import std/[monotimes, times]
let d = initDuration(nanoseconds = 10)
let t1 = getMonoTime()