Fix Performance.mark and measure

Closes https://github.com/dart-lang/sdk/issues/48430

Adds overloads for both methods to accept additional/different options.
Also changes return types:
- mark returns a PerformanceEntry
- measure returns a PerformanceMeasure, but this may be undefined, so it's
  marked as nullable

Change-Id: I189c4613b19e214a1f5bcc5bbd780d9dc447d9e1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/235286
Reviewed-by: Riley Porter <rileyporter@google.com>
Commit-Queue: Srujan Gaddam <srujzs@google.com>
This commit is contained in:
Srujan Gaddam 2022-03-21 18:58:38 +00:00 committed by Commit Bot
parent 22304c3015
commit 2444bcca59
5 changed files with 76 additions and 3 deletions

View file

@ -27,6 +27,12 @@
`Element.scrollIntoViewIfNeeded` should use the new `scrollIntoViewIfNeeded`
definition instead.
- Change `Performance.mark` and `Performance.measure` to accept their different
overloads. `mark` can now accept a `markOptions` map, and `measure` can now
accept a `startMark` and `endMark`, or a `measureOptions` map. Both methods
return their correct return types now as well - `PerformanceEntry` and
`PerformanceMeasure?`, respectively.
#### `dart:indexed_db`
- `IdbFactory.supportsDatabaseNames` has been deprecated. It will always return

View file

@ -25239,9 +25239,50 @@ class Performance extends EventTarget {
List<PerformanceEntry> getEntriesByType(String entryType) native;
void mark(String markName) native;
PerformanceEntry mark(String markName, [Map? markOptions]) {
if (markOptions != null) {
var markOptions_1 = convertDartToNative_Dictionary(markOptions);
return _mark_1(markName, markOptions_1);
}
return _mark_2(markName);
}
void measure(String measureName, String? startMark, String? endMark) native;
@JSName('mark')
PerformanceEntry _mark_1(markName, markOptions) native;
@JSName('mark')
PerformanceEntry _mark_2(markName) native;
PerformanceMeasure? measure(String measureName,
[measureOptions_OR_startMark, String? endMark]) {
if (measureOptions_OR_startMark == null && endMark == null) {
return _measure_1(measureName);
}
if ((measureOptions_OR_startMark is String ||
measureOptions_OR_startMark == null) &&
endMark == null) {
return _measure_2(measureName, measureOptions_OR_startMark);
}
if ((measureOptions_OR_startMark is String ||
measureOptions_OR_startMark == null)) {
return _measure_3(measureName, measureOptions_OR_startMark, endMark);
}
if ((measureOptions_OR_startMark is Map) && endMark == null) {
var measureOptions_1 =
convertDartToNative_Dictionary(measureOptions_OR_startMark);
return _measure_4(measureName, measureOptions_1);
}
throw new ArgumentError("Incorrect number or type of arguments");
}
@JSName('measure')
PerformanceMeasure? _measure_1(measureName) native;
@JSName('measure')
PerformanceMeasure? _measure_2(measureName, String? startMark) native;
@JSName('measure')
PerformanceMeasure? _measure_3(measureName, String? startMark, endMark)
native;
@JSName('measure')
PerformanceMeasure? _measure_4(measureName, measureOptions) native;
double now() native;

View file

@ -30,5 +30,16 @@ main() {
var loadEventStart = window.performance.timing.loadEventStart;
}, expectation);
});
test('markAndMeasure', () {
window.performance.mark('mark1');
window.performance.mark('mark2', {'detail': 'metadata'});
window.performance.measure('measure1');
window.performance.measure('measure2', 'mark1');
window.performance.measure('measure3', 'mark1', 'mark2');
window.performance.measure('measure4', null, 'mark2');
window.performance.measure('measure5', 'mark1', null);
window.performance.measure('measure6', null, null);
window.performance.measure('measure7', {'start': 'mark1'});
});
});
}

View file

@ -1,4 +1,3 @@
// @dart = 2.9
import 'dart:html';
@ -28,5 +27,16 @@ main() {
var loadEventStart = window.performance.timing.loadEventStart;
}, expectation);
});
test('markAndMeasure', () {
window.performance.mark('mark1');
window.performance.mark('mark2', {'detail': 'metadata'});
window.performance.measure('measure1');
window.performance.measure('measure2', 'mark1');
window.performance.measure('measure3', 'mark1', 'mark2');
window.performance.measure('measure4', null, 'mark2');
window.performance.measure('measure5', 'mark1', null);
window.performance.measure('measure6', null, null);
window.performance.measure('measure7', {'start': 'mark1'});
});
});
}

View file

@ -600,6 +600,11 @@ interface Performance {
// Marked as nullable to address browser compatibility. See 41905.
[DartSuppress, Measure] readonly attribute MemoryInfo memory;
[Measure] readonly attribute MemoryInfo? memory;
[DartSuppress] void mark(DOMString markName);
PerformanceEntry mark(DOMString markName, optional Dictionary markOptions);
[DartSuppress] void measure(DOMString measureName, optional DOMString startMark = null, optional DOMString endMark = null);
PerformanceMeasure? measure(DOMString measureName, optional DOMString? startMark, optional DOMString? endMark);
PerformanceMeasure? measure(DOMString measureName, Dictionary measureOptions);
};
[DartSupplemental]