main
js 99 lines 2.82 KB
Raw
1 /**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @flow
8 */
9
10 import ProfilerStore from './ProfilerStore';
11 import {
12 getCommitTree,
13 invalidateCommitTrees,
14 } from 'react-devtools-shared/src/devtools/views/Profiler/CommitTreeBuilder';
15 import {
16 getChartData as getFlamegraphChartData,
17 invalidateChartData as invalidateFlamegraphChartData,
18 } from 'react-devtools-shared/src/devtools/views/Profiler/FlamegraphChartBuilder';
19 import {
20 getChartData as getRankedChartData,
21 invalidateChartData as invalidateRankedChartData,
22 } from 'react-devtools-shared/src/devtools/views/Profiler/RankedChartBuilder';
23
24 import type {CommitTree} from 'react-devtools-shared/src/devtools/views/Profiler/types';
25 import type {ChartData as FlamegraphChartData} from 'react-devtools-shared/src/devtools/views/Profiler/FlamegraphChartBuilder';
26 import type {ChartData as RankedChartData} from 'react-devtools-shared/src/devtools/views/Profiler/RankedChartBuilder';
27
28 export default class ProfilingCache {
29 _fiberCommits: Map<number, Array<number>> = new Map();
30 _profilerStore: ProfilerStore;
31
32 constructor(profilerStore: ProfilerStore) {
33 this._profilerStore = profilerStore;
34 }
35
36 getCommitTree: ({commitIndex: number, rootID: number}) => CommitTree = ({
37 commitIndex,
38 rootID,
39 }) =>
40 getCommitTree({
41 commitIndex,
42 profilerStore: this._profilerStore,
43 rootID,
44 });
45
46 getFiberCommits: ({fiberID: number, rootID: number}) => Array<number> = ({
47 fiberID,
48 rootID,
49 }) => {
50 const cachedFiberCommits = this._fiberCommits.get(fiberID);
51 if (cachedFiberCommits != null) {
52 return cachedFiberCommits;
53 }
54
55 const fiberCommits = [];
56 const dataForRoot = this._profilerStore.getDataForRoot(rootID);
57 dataForRoot.commitData.forEach((commitDatum, commitIndex) => {
58 if (commitDatum.fiberActualDurations.has(fiberID)) {
59 fiberCommits.push(commitIndex);
60 }
61 });
62
63 this._fiberCommits.set(fiberID, fiberCommits);
64
65 return fiberCommits;
66 };
67
68 getFlamegraphChartData: ({
69 commitIndex: number,
70 commitTree: CommitTree,
71 rootID: number,
72 }) => FlamegraphChartData = ({commitIndex, commitTree, rootID}) =>
73 getFlamegraphChartData({
74 commitIndex,
75 commitTree,
76 profilerStore: this._profilerStore,
77 rootID,
78 });
79
80 getRankedChartData: ({
81 commitIndex: number,
82 commitTree: CommitTree,
83 rootID: number,
84 }) => RankedChartData = ({commitIndex, commitTree, rootID}) =>
85 getRankedChartData({
86 commitIndex,
87 commitTree,
88 profilerStore: this._profilerStore,
89 rootID,
90 });
91
92 invalidate() {
93 this._fiberCommits.clear();
94
95 invalidateCommitTrees();
96 invalidateFlamegraphChartData();
97 invalidateRankedChartData();
98 }
99 }