// Copyright 2022 The Parca Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import {Fragment, useState} from 'react'; import {Popover, Transition} from '@headlessui/react'; import {usePopper} from 'react-popper'; import {selectDarkMode, useAppSelector} from '@parca/store'; import {TEST_IDS, testId} from '@parca/test-utils'; import {getIncreasedSpanColor, getNewSpanColor, getReducedSpanColor} from '@parca/utilities'; const transparencyValues = [-100, -80, -60, -40, -20, 0, 20, 40, 60, 80, 100]; const DiffLegendBar = ({ onMouseEnter, onMouseLeave, }: { onMouseEnter: () => void; onMouseLeave: () => void; }): JSX.Element => { const isDarkMode = useAppSelector(selectDarkMode); return (
{transparencyValues.map(value => { const valueAsPercentage = value / 100; const absoluteValue = Math.abs(valueAsPercentage); return (
0 ? getIncreasedSpanColor(absoluteValue, isDarkMode) : getReducedSpanColor(absoluteValue, isDarkMode), }} >
); })}
); }; const DiffLegend = (): JSX.Element => { const [showLegendTooltip, setShowLegendTooltip] = useState(false); const [popperElement, setPopperElement] = useState(null); const [referenceElement, setReferenceElement] = useState(null); const {styles, attributes} = usePopper(referenceElement, popperElement, { placement: 'auto-start', strategy: 'absolute', }); const handleMouseEnter = (): void => { setShowLegendTooltip(true); }; const handleMouseLeave = (): void => { setShowLegendTooltip(false); }; return (
Better Worse
{() => (
This is a differential flame graph, where a purple-colored node means unchanged, and the darker the red, the worse the node got, and the darker the green, the better the node got.
)}
); }; export default DiffLegend;