Issue #2255 - Use Maybe<> in the Performance API.

This commit is contained in:
Brian Smith 2023-07-12 14:25:06 -05:00 • committed by roytam1
commit 1f5eaee101
2 changed files with 19 additions and 17 deletions

View file

@ -413,16 +413,16 @@ DOMHighResTimeStamp Performance::ConvertNameToTimestamp(const nsAString& aName,
DOMHighResTimeStamp DOMHighResTimeStamp
Performance::ResolveEndTimeForMeasure( Performance::ResolveEndTimeForMeasure(
const Optional<nsAString>& aEndMark, const Optional<nsAString>& aEndMark,
const PerformanceMeasureOptions* aOptions, const Maybe<const PerformanceMeasureOptions&>& aOptions,
ErrorResult& aRv) ErrorResult& aRv)
{ {
DOMHighResTimeStamp endTime; DOMHighResTimeStamp endTime;
if (aEndMark.WasPassed()) { if (aEndMark.WasPassed()) {
endTime = ConvertMarkToTimestampWithString(aEndMark.Value(), aRv); endTime = ConvertMarkToTimestampWithString(aEndMark.Value(), aRv);
} else if (aOptions != nullptr && aOptions->mEnd.WasPassed()) { } else if (aOptions && aOptions->mEnd.WasPassed()) {
endTime = ConvertMarkToTimestamp(ResolveTimestampAttribute::End, endTime = ConvertMarkToTimestamp(ResolveTimestampAttribute::End,
aOptions->mEnd.Value(), aRv); aOptions->mEnd.Value(), aRv);
} else if (aOptions != nullptr && aOptions->mStart.WasPassed() && } else if (aOptions && aOptions->mStart.WasPassed() &&
aOptions->mDuration.WasPassed()) { aOptions->mDuration.WasPassed()) {
const DOMHighResTimeStamp start = ConvertMarkToTimestamp( const DOMHighResTimeStamp start = ConvertMarkToTimestamp(
ResolveTimestampAttribute::Start, aOptions->mStart.Value(), aRv); ResolveTimestampAttribute::Start, aOptions->mStart.Value(), aRv);
@ -447,16 +447,16 @@ Performance::ResolveEndTimeForMeasure(
DOMHighResTimeStamp DOMHighResTimeStamp
Performance::ResolveStartTimeForMeasure( Performance::ResolveStartTimeForMeasure(
const nsAString* aStartMark, const Maybe<const nsAString&>& aStartMark,
const PerformanceMeasureOptions* aOptions, const Maybe<const PerformanceMeasureOptions&>& aOptions,
ErrorResult& aRv) ErrorResult& aRv)
{ {
DOMHighResTimeStamp startTime; DOMHighResTimeStamp startTime;
if (aOptions != nullptr && aOptions->mStart.WasPassed()) { if (aOptions && aOptions->mStart.WasPassed()) {
startTime = ConvertMarkToTimestamp(ResolveTimestampAttribute::Start, startTime = ConvertMarkToTimestamp(ResolveTimestampAttribute::Start,
aOptions->mStart.Value(), aOptions->mStart.Value(),
aRv); aRv);
} else if (aOptions != nullptr && aOptions->mDuration.WasPassed() && } else if (aOptions && aOptions->mDuration.WasPassed() &&
aOptions->mEnd.WasPassed()) { aOptions->mEnd.WasPassed()) {
const DOMHighResTimeStamp duration = const DOMHighResTimeStamp duration =
ConvertMarkToTimestampWithDOMHighResTimeStamp( ConvertMarkToTimestampWithDOMHighResTimeStamp(
@ -474,7 +474,7 @@ Performance::ResolveStartTimeForMeasure(
} }
startTime = end - duration; startTime = end - duration;
} else if (aStartMark != nullptr) { } else if (aStartMark) {
startTime = ConvertMarkToTimestampWithString(*aStartMark, aRv); startTime = ConvertMarkToTimestampWithString(*aStartMark, aRv);
} else { } else {
startTime = 0; startTime = 0;
@ -496,13 +496,14 @@ Performance::Measure(JSContext* aCx,
return nullptr; return nullptr;
} }
const PerformanceMeasureOptions* options = nullptr; // Maybe is more readable than using the union type directly.
Maybe<const PerformanceMeasureOptions&> options;
if (aStartOrMeasureOptions.IsPerformanceMeasureOptions()) { if (aStartOrMeasureOptions.IsPerformanceMeasureOptions()) {
options = &aStartOrMeasureOptions.GetAsPerformanceMeasureOptions(); options.emplace(aStartOrMeasureOptions.GetAsPerformanceMeasureOptions());
} }
const bool isOptionsNotEmpty = const bool isOptionsNotEmpty =
(options != nullptr) && options.isSome() &&
(!options->mDetail.isUndefined() || options->mStart.WasPassed() || (!options->mDetail.isUndefined() || options->mStart.WasPassed() ||
options->mEnd.WasPassed() || options->mDuration.WasPassed()); options->mEnd.WasPassed() || options->mDuration.WasPassed());
if (isOptionsNotEmpty) { if (isOptionsNotEmpty) {
@ -529,9 +530,10 @@ Performance::Measure(JSContext* aCx,
return nullptr; return nullptr;
} }
const nsAString* startMark = nullptr; // Convert to Maybe for consistency with options.
Maybe<const nsAString&> startMark;
if (aStartOrMeasureOptions.IsString()) { if (aStartOrMeasureOptions.IsString()) {
startMark = &aStartOrMeasureOptions.GetAsString(); startMark.emplace(aStartOrMeasureOptions.GetAsString());
} }
const DOMHighResTimeStamp startTime = const DOMHighResTimeStamp startTime =
ResolveStartTimeForMeasure(startMark, options, aRv); ResolveStartTimeForMeasure(startMark, options, aRv);
@ -540,7 +542,7 @@ Performance::Measure(JSContext* aCx,
} }
JS::Rooted<JS::Value> detail(aCx); JS::Rooted<JS::Value> detail(aCx);
if (options != nullptr && !options->mDetail.isNullOrUndefined()) { if (options && !options->mDetail.isNullOrUndefined()) {
StructuredSerializeOptions serializeOptions; StructuredSerializeOptions serializeOptions;
JS::Rooted<JS::Value> valueToClone(aCx, options->mDetail); JS::Rooted<JS::Value> valueToClone(aCx, options->mDetail);
nsContentUtils::StructuredClone(aCx, GetParentObject(), valueToClone, nsContentUtils::StructuredClone(aCx, GetParentObject(), valueToClone,

View file

@ -195,11 +195,11 @@ private:
DOMHighResTimeStamp ResolveEndTimeForMeasure( DOMHighResTimeStamp ResolveEndTimeForMeasure(
const Optional<nsAString>& aEndMark, const Optional<nsAString>& aEndMark,
const PerformanceMeasureOptions* aOptions, const Maybe<const PerformanceMeasureOptions&>& aOptions,
ErrorResult& aRv); ErrorResult& aRv);
DOMHighResTimeStamp ResolveStartTimeForMeasure( DOMHighResTimeStamp ResolveStartTimeForMeasure(
const nsAString* aStartMark, const Maybe<const nsAString&>& aStartMark,
const PerformanceMeasureOptions* aOptions, const Maybe<const PerformanceMeasureOptions&>& aOptions,
ErrorResult& aRv); ErrorResult& aRv);
}; };