From cc3c69b95364268610858f4a149d84c4cfee1a5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20W=C3=BClker?= Date: Mon, 9 Sep 2024 18:48:49 +0200 Subject: [PATCH] implement `console.timeLog` (#33377) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implement console.timeLog Signed-off-by: Simon Wülker * Adjust WPT expectations Signed-off-by: Simon Wülker --------- Signed-off-by: Simon Wülker --- components/script/dom/console.rs | 19 +++++++++++++---- components/script/dom/globalscope.rs | 15 +++++++++++++ components/script/dom/webidls/Console.webidl | 5 +++-- .../console-label-conversion.any.js.ini | 14 ------------- .../console-label-conversion.any.js.ini | 14 ------------- tests/wpt/meta/console/idlharness.any.js.ini | 21 +------------------ 6 files changed, 34 insertions(+), 54 deletions(-) delete mode 100644 tests/wpt/meta-legacy-layout/console/console-label-conversion.any.js.ini delete mode 100644 tests/wpt/meta/console/console-label-conversion.any.js.ini diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index 13bbe1005a2..6c6dedc9890 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -271,18 +271,29 @@ impl Console { }; } - // https://developer.mozilla.org/en-US/docs/Web/API/Console/time + // https://console.spec.whatwg.org/#time pub fn Time(global: &GlobalScope, label: DOMString) { if let Ok(()) = global.time(label.clone()) { - let message = DOMString::from(format!("{}: timer started", label)); + let message = DOMString::from(format!("{label}: timer started")); console_message(global, message, LogLevel::Log); } } - // https://developer.mozilla.org/en-US/docs/Web/API/Console/timeEnd + // https://console.spec.whatwg.org/#timelog + pub fn TimeLog(_cx: JSContext, global: &GlobalScope, label: DOMString, data: Vec) { + if let Ok(delta) = global.time_log(&label) { + let message = DOMString::from(format!( + "{label}: {delta}ms {}", + stringify_handle_values(data) + )); + console_message(global, message, LogLevel::Log); + } + } + + // https://console.spec.whatwg.org/#timeend pub fn TimeEnd(global: &GlobalScope, label: DOMString) { if let Ok(delta) = global.time_end(&label) { - let message = DOMString::from(format!("{}: {}ms", label, delta)); + let message = DOMString::from(format!("{label}: {delta}ms")); console_message(global, message, LogLevel::Log); } } diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs index 2caf00da4cf..a14a750015c 100644 --- a/components/script/dom/globalscope.rs +++ b/components/script/dom/globalscope.rs @@ -2285,6 +2285,21 @@ impl GlobalScope { } } + /// Computes the delta time since a label has been created + /// + /// Returns an error if the label does not exist. + pub fn time_log(&self, label: &str) -> Result { + self.console_timers + .borrow() + .get(label) + .ok_or(()) + .map(|&start| (Instant::now() - start).as_millis() as u64) + } + + /// Computes the delta time since a label has been created and stops + /// tracking the label. + /// + /// Returns an error if the label does not exist. pub fn time_end(&self, label: &str) -> Result { self.console_timers .borrow_mut() diff --git a/components/script/dom/webidls/Console.webidl b/components/script/dom/webidls/Console.webidl index fe0435476cb..b6d2d91fd14 100644 --- a/components/script/dom/webidls/Console.webidl +++ b/components/script/dom/webidls/Console.webidl @@ -26,6 +26,7 @@ namespace console { undefined groupEnd(); // Timing - undefined time(DOMString message); - undefined timeEnd(DOMString message); + undefined time(optional DOMString label = "default"); + undefined timeLog(optional DOMString label = "default", any... data); + undefined timeEnd(optional DOMString label = "default"); }; diff --git a/tests/wpt/meta-legacy-layout/console/console-label-conversion.any.js.ini b/tests/wpt/meta-legacy-layout/console/console-label-conversion.any.js.ini deleted file mode 100644 index 172f06032c8..00000000000 --- a/tests/wpt/meta-legacy-layout/console/console-label-conversion.any.js.ini +++ /dev/null @@ -1,14 +0,0 @@ -[console-label-conversion.any.html] - [console.timeLog()'s label gets converted to string via label.toString() when label is an object] - expected: FAIL - - [console.timeLog() throws exceptions generated by erroneous label.toString() conversion] - expected: FAIL - - -[console-label-conversion.any.worker.html] - [console.timeLog()'s label gets converted to string via label.toString() when label is an object] - expected: FAIL - - [console.timeLog() throws exceptions generated by erroneous label.toString() conversion] - expected: FAIL diff --git a/tests/wpt/meta/console/console-label-conversion.any.js.ini b/tests/wpt/meta/console/console-label-conversion.any.js.ini deleted file mode 100644 index 172f06032c8..00000000000 --- a/tests/wpt/meta/console/console-label-conversion.any.js.ini +++ /dev/null @@ -1,14 +0,0 @@ -[console-label-conversion.any.html] - [console.timeLog()'s label gets converted to string via label.toString() when label is an object] - expected: FAIL - - [console.timeLog() throws exceptions generated by erroneous label.toString() conversion] - expected: FAIL - - -[console-label-conversion.any.worker.html] - [console.timeLog()'s label gets converted to string via label.toString() when label is an object] - expected: FAIL - - [console.timeLog() throws exceptions generated by erroneous label.toString() conversion] - expected: FAIL diff --git a/tests/wpt/meta/console/idlharness.any.js.ini b/tests/wpt/meta/console/idlharness.any.js.ini index 2d14758cca3..310175711d1 100644 --- a/tests/wpt/meta/console/idlharness.any.js.ini +++ b/tests/wpt/meta/console/idlharness.any.js.ini @@ -14,16 +14,6 @@ [console namespace: operation dirxml(any...)] expected: FAIL - [console namespace: operation time(optional DOMString)] - expected: FAIL - - [console namespace: operation timeLog(optional DOMString, any...)] - expected: FAIL - - [console namespace: operation timeEnd(optional DOMString)] - expected: FAIL - - [idlharness.any.worker.html] [console namespace: operation assert(optional boolean, any...)] expected: FAIL @@ -38,13 +28,4 @@ expected: FAIL [console namespace: operation dirxml(any...)] - expected: FAIL - - [console namespace: operation time(optional DOMString)] - expected: FAIL - - [console namespace: operation timeLog(optional DOMString, any...)] - expected: FAIL - - [console namespace: operation timeEnd(optional DOMString)] - expected: FAIL + expected: FAIL \ No newline at end of file