@magic-circle/performance
Version:
Magic Circle performance management
107 lines (106 loc) • 3.98 kB
JSX
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
return cooked;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
import { useState, useEffect, useMemo } from 'react';
import styled from 'styled-components';
import { Metric } from '@magic-circle/styles';
import { useStore } from '@magic-circle/state';
import Chart from './Chart';
var Container = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n width: 100%;\n"], ["\n display: flex;\n flex-direction: column;\n width: 100%;\n"])));
var displayMetric = function (value, unit) {
if (!value)
return 'N/A';
return "".concat(Math.round(value)).concat(unit);
};
var Sidebar = function (_a) {
var performance = _a.performance;
var loadTimes = useStore(performance.loadTimes);
var fps = useStore(performance.fps);
var renderTime = useStore(performance.renderTime);
var memory = useStore(performance.memory);
var _b = useState(0), width = _b[0], setWidth = _b[1];
var _c = useState(0), height = _c[0], setHeight = _c[1];
useEffect(function () {
var setSize = function () {
var frame = document.querySelector('#frame');
if (frame) {
setWidth(frame.clientWidth);
setHeight(frame.clientHeight);
}
};
setSize();
window.addEventListener('resize', setSize);
return function () {
window.removeEventListener('resize', setSize);
};
}, []);
var maxRenderTime = useMemo(function () {
return Math.max.apply(Math, __spreadArray(__spreadArray([], renderTime, true), [20], false));
}, [renderTime]);
return (<Container>
<Metric.Container>
Frames per second
<Metric.Value>{displayMetric(fps[fps.length - 1], 'fps')}</Metric.Value>
</Metric.Container>
<Chart max={60} values={fps}/>
<Metric.Container>
Render time
<Metric.Value>
{displayMetric(renderTime[renderTime.length - 1], 'ms')}
</Metric.Value>
</Metric.Container>
<Chart max={maxRenderTime} values={renderTime}/>
<Metric.Container>
Memory
<Metric.Value>{displayMetric(memory, 'mb')}</Metric.Value>
</Metric.Container>
<Metric.Container>
First paint
<Metric.Value>
{loadTimes.firstPaint
? displayMetric(loadTimes.firstPaint, 'ms')
: '?'}
</Metric.Value>
</Metric.Container>
<Metric.Container>
First contentful paint
<Metric.Value>
{loadTimes.firstContentfulPaint
? displayMetric(loadTimes.firstContentfulPaint, 'ms')
: '?'}
</Metric.Value>
</Metric.Container>
<Metric.Container>
Load time
<Metric.Value>
{loadTimes.loadingTime
? displayMetric(loadTimes.loadingTime || 0, 'ms')
: '?'}
</Metric.Value>
</Metric.Container>
<Metric.Container>
Frame width
<Metric.Value>{displayMetric(width, 'px')}</Metric.Value>
</Metric.Container>
<Metric.Container>
Frame height
<Metric.Value>{displayMetric(height, 'px')}</Metric.Value>
</Metric.Container>
<Metric.Container>
Device pixel ratio
<Metric.Value>{window.devicePixelRatio}</Metric.Value>
</Metric.Container>
</Container>);
};
export default Sidebar;
var templateObject_1;