Current section
Files
Jump to
Current section
Files
src/gossamer/performance/measure.ffi.mjs
// src/gossamer/performance/measure.ffi.ts
import * as $measure from "./measure.mjs";
import { Option$None } from "../../../gleam_stdlib/gleam/option.mjs";
import { fromArrayMapped } from "../../utils/list.ffi.mjs";
import { setIfSome, toOption } from "../../utils/option.ffi.mjs";
import { durationToMs, msToDuration } from "../../utils/time.ffi.mjs";
function projectMeasure(entry) {
return $measure.Measure$Measure(
entry.name,
msToDuration(entry.startTime),
msToDuration(entry.duration),
// @ts-expect-error PerformanceMeasure adds detail.
toOption(entry.detail)
);
}
var from_raw = (raw) => {
return projectMeasure(raw);
};
var between = (name, from, to) => {
const startMs = Math.max(0, durationToMs(from));
const endMs = Math.max(0, durationToMs(to));
return $measure.Measure$Measure(
name,
msToDuration(startMs),
msToDuration(Math.max(0, endMs - startMs)),
Option$None()
);
};
var record = (name, startTime, duration, detail) => {
const options = {
start: Math.max(0, durationToMs(startTime)),
duration: Math.max(0, durationToMs(duration))
};
setIfSome(options, "detail", detail);
performance.measure(name, options);
};
var entries = () => {
return fromArrayMapped(
performance.getEntriesByType("measure"),
projectMeasure
);
};
var entries_by_name = (name) => {
return fromArrayMapped(
performance.getEntriesByName(name, "measure"),
projectMeasure
);
};
export {
between,
entries,
entries_by_name,
from_raw,
record
};