77 lines
2 KiB
TypeScript
77 lines
2 KiB
TypeScript
import Stats from 'stats.js'
|
|
import StatsGl from 'stats-gl'
|
|
import { isCypress } from './standaloneUtils'
|
|
|
|
const stats = new Stats()
|
|
const stats2 = new Stats()
|
|
const hasRamPanel = stats2.dom.children.length === 3
|
|
const statsGl = new StatsGl({ minimal: true })
|
|
// in my case values are good: gpu: < 0.5, cpu < 0.15
|
|
|
|
stats2.showPanel(2)
|
|
|
|
// prod or small screen
|
|
const denseMode = process.env.NODE_ENV === 'production' || window.innerHeight < 500
|
|
|
|
let total = 0
|
|
const addStat = (dom, size = 80) => {
|
|
dom.style.position = 'absolute'
|
|
if (denseMode) dom.style.height = '12px'
|
|
dom.style.overflow = 'hidden'
|
|
dom.style.left = ''
|
|
dom.style.top = 0
|
|
dom.style.right = `${total}px`
|
|
dom.style.width = '80px'
|
|
dom.style.zIndex = 1
|
|
dom.style.opacity = '0.8'
|
|
document.body.appendChild(dom)
|
|
total += size
|
|
}
|
|
const addStatsGlStat = (canvas) => {
|
|
const container = document.createElement('div')
|
|
canvas.style.position = 'static'
|
|
canvas.style.display = 'block'
|
|
container.appendChild(canvas)
|
|
addStat(container)
|
|
}
|
|
addStat(stats.dom)
|
|
if (hasRamPanel) {
|
|
addStat(stats2.dom)
|
|
}
|
|
|
|
const hideStats = localStorage.hideStats || isCypress()
|
|
if (hideStats) {
|
|
stats.dom.style.display = 'none'
|
|
stats2.dom.style.display = 'none'
|
|
statsGl.container.style.display = 'none'
|
|
}
|
|
|
|
export const initWithRenderer = (canvas) => {
|
|
if (hideStats) return
|
|
statsGl.init(canvas)
|
|
// if (statsGl.gpuPanel && process.env.NODE_ENV !== 'production') {
|
|
// addStatsGlStat(statsGl.gpuPanel.canvas)
|
|
// }
|
|
// addStatsGlStat(statsGl.msPanel.canvas)
|
|
statsGl.container.style.display = 'flex'
|
|
statsGl.container.style.justifyContent = 'flex-end'
|
|
let i = 0
|
|
for (const _child of statsGl.container.children) {
|
|
const child = _child as HTMLElement
|
|
if (i++ === 0) {
|
|
child.style.display = 'none'
|
|
}
|
|
child.style.position = ''
|
|
}
|
|
}
|
|
|
|
export const statsStart = () => {
|
|
stats.begin()
|
|
stats2.begin()
|
|
statsGl.begin()
|
|
}
|
|
export const statsEnd = () => {
|
|
stats.end()
|
|
stats2.end()
|
|
statsGl.end()
|
|
}
|