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
//! 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 [`Timer::scope`].
//!
//! ```no_run
//! use gloo_console::Timer;
//!
//! let value = Timer::scope("foo", || {
//! // Place code to be measured here
//! // Optionally return a value.
//! });
//! ```
//!
//! ## RAII-Style Measurement
//!
//! For scenarios where [`Timer::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;
//! use gloo_timers::callback::Timeout;
//!
//! // Start timing a new operation.
//! let timer = Timer::new("foo");
//!
//! // And then asynchronously finish timing.
//! let timeout = Timeout::new(1_000, move || {
//! drop(timer);
//! });
//! ```
use console;
/// A console time measurement.
///
/// See [`Timer::scope`] for starting a labeled time measurement
/// of code wrapped in a closure.