1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*!
The `console.time` and `console.timeEnd` functions allow you to log the
timing of named operations to the browser's developer tools console. You
call `console.time("foo")` when the operation begins, and call
`console.timeEnd("foo")` when it finishes.
Additionally, these measurements will show up in your browser's profiler's
"timeline" or "waterfall" view.
[See MDN for more info](https://developer.mozilla.org/en-US/docs/Web/API/console#Timers).
This API wraps both the `time` and `timeEnd` calls into a single type
named `ConsoleTimer`, ensuring both are called.
## Scoped Measurement
Wrap code to be measured in a closure with `ConsoleTimer::scope`.
```no_run
use gloo_console_timer::ConsoleTimer;
let value = ConsoleTimer::scope("foo", || {
// Place code to be measured here
// Optionally return a value.
});
```
## RAII-Style Measurement
For scenarios where `ConsoleTimer::scope` can't be used, like with
asynchronous operations, you can use `ConsoleTimer::new` to create a timer.
The measurement ends when the timer object goes out of scope / is dropped.
```no_run
use gloo_console_timer::ConsoleTimer;
use gloo_timers::callback::Timeout;
// Start timing a new operation.
let timer = ConsoleTimer::new("foo");
// And then asynchronously finish timing.
let timeout = Timeout::new(1_000, move || {
drop(timer);
});
```
*/
use console;
/// A console time measurement.
///
/// See `ConsoleTimer::scope` for starting a labeled time measurement
/// of code wrapped in a closure.