implement console.timeLog (#33377)

* Implement console.timeLog

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Adjust WPT expectations

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
Simon Wülker 2024-09-09 18:48:49 +02:00 committed by GitHub
parent 8c0a566860
commit cc3c69b953
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 34 additions and 54 deletions

View file

@ -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<HandleValue>) {
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);
}
}

View file

@ -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<u64, ()> {
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<u64, ()> {
self.console_timers
.borrow_mut()

View file

@ -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");
};

View file

@ -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

View file

@ -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

View file

@ -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