// @flow import React, { forwardRef, useCallback, useContext, useMemo } from 'react'; import AutoSizer from 'react-virtualized-auto-sizer'; import { FixedSizeList } from 'react-window'; import { ProfilerContext } from './ProfilerContext'; import NoCommitData from './NoCommitData'; import CommitFlamegraphListItem from './CommitFlamegraphListItem'; import { scale } from './utils'; import { StoreContext } from '../context'; import { SettingsContext } from '../Settings/SettingsContext'; import styles from './CommitFlamegraph.css'; import type { ChartData, ChartNode } from './FlamegraphChartBuilder'; import type { CommitTree } from './types'; export type ItemData = {| chartData: ChartData, scaleX: (value: number, fallbackValue: number) => number, selectedChartNode: ChartNode | null, selectedChartNodeIndex: number, selectFiber: (id: number | null, name: string | null) => void, width: number, |}; export default function CommitFlamegraphAutoSizer(_: {||}) { const { profilerStore } = useContext(StoreContext); const { rootID, selectedCommitIndex, selectFiber } = useContext( ProfilerContext ); const { profilingCache } = profilerStore; const deselectCurrentFiber = useCallback( event => { event.stopPropagation(); selectFiber(null, null); }, [selectFiber] ); let commitTree: CommitTree | null = null; let chartData: ChartData | null = null; if (selectedCommitIndex !== null) { commitTree = profilingCache.getCommitTree({ commitIndex: selectedCommitIndex, rootID: ((rootID: any): number), }); chartData = profilingCache.getFlamegraphChartData({ commitIndex: selectedCommitIndex, commitTree, rootID: ((rootID: any): number), }); } if (commitTree != null && chartData != null && chartData.depth > 0) { return (