/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import memoize from 'memoize-one'; import type { BatchUID, Milliseconds, ReactMeasure, TimelineData, } from '../types'; function unmemoizedGetBatchRange( batchUID: BatchUID, data: TimelineData, minStartTime?: number = 0, ): [Milliseconds, Milliseconds] { const measures = data.batchUIDToMeasuresMap.get(batchUID); if (measures == null || measures.length === 0) { throw Error(`Could not find measures with batch UID "${batchUID}"`); } const lastMeasure = ((measures[measures.length - 1]: any): ReactMeasure); const stopTime = lastMeasure.timestamp + lastMeasure.duration; if (stopTime < minStartTime) { return [0, 0]; } let startTime = minStartTime; for (let index = 0; index < measures.length; index++) { const measure = measures[index]; if (measure.timestamp >= minStartTime) { startTime = measure.timestamp; break; } } return [startTime, stopTime]; } export const getBatchRange: ( batchUID: BatchUID, data: TimelineData, minStartTime?: number, ) => [Milliseconds, Milliseconds] = memoize(unmemoizedGetBatchRange);