mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-07 02:51:50 +00:00
chore(tui): /clean recent perf work — KISS/DRY pass
24 files, -319 LoC. Behaviour preserved, 369/369 tests green. - hermes-ink caches: shared lruEvict helper for the four parallel LRU caches (stringWidth, wrapText, sliceAnsi, lineWidth); touch-on-read stays inlined per cache; tightened output.ts skip-slice fast path. - wheelAccel: trimmed provenance header, collapsed env parsing, ternary dispatch in computeWheelStep. - perfPane: folded ensureLogDir into once-flag, spread-with-overrides for fastPath/phases instead of full rebuilds. - env: extracted truthy() (used 4×). - virtualHeights: collapsed user/diff/slash height bumps; trail+todos estimate. - useInputHandlers: scrollIdleTimer cleanup on unmount, ?? undefined shorthand. - useMainApp: dropped dead liveTailVisible IIFE and liveProgress indirection. - appLayout, markdown, messageLine, entry: vertical rhythm, dropped narration comments, inlined one-shot vars. - fix: empty catch blocks → /* best-effort */ for no-empty lint.
This commit is contained in:
parent
527ac351b4
commit
b1c49d5e73
32 changed files with 259 additions and 547 deletions
|
|
@ -1,10 +1,4 @@
|
|||
// FPS counter overlay — renders in the bottom-right corner when
|
||||
// HERMES_TUI_FPS=1. Zero-cost when disabled (returns null at the
|
||||
// top of the component; React skips the whole subtree).
|
||||
//
|
||||
// Subscribes to $fpsState via nanostores. The store is only updated
|
||||
// when the env flag is on (trackFrame is undefined otherwise), so we
|
||||
// also gate the subscription on SHOW_FPS to avoid a useless listener.
|
||||
// FPS counter overlay (HERMES_TUI_FPS=1). Zero-cost when disabled.
|
||||
|
||||
import { Text } from '@hermes/ink'
|
||||
import { useStore } from '@nanostores/react'
|
||||
|
|
@ -12,17 +6,7 @@ import { useStore } from '@nanostores/react'
|
|||
import { SHOW_FPS } from '../config/env.js'
|
||||
import { $fpsState } from '../lib/fpsStore.js'
|
||||
|
||||
const fpsColor = (fps: number) => {
|
||||
if (fps >= 50) {
|
||||
return 'green'
|
||||
}
|
||||
|
||||
if (fps >= 30) {
|
||||
return 'yellow'
|
||||
}
|
||||
|
||||
return 'red'
|
||||
}
|
||||
const fpsColor = (fps: number) => (fps >= 50 ? 'green' : fps >= 30 ? 'yellow' : 'red')
|
||||
|
||||
export function FpsOverlay() {
|
||||
if (!SHOW_FPS) {
|
||||
|
|
@ -35,14 +19,10 @@ export function FpsOverlay() {
|
|||
function FpsOverlayInner() {
|
||||
const { fps, lastDurationMs, totalFrames } = useStore($fpsState)
|
||||
|
||||
// Zero-pad to stable width so the corner doesn't jitter as digits
|
||||
// come and go. Format: " 62fps 0.3ms #12345"
|
||||
const fpsStr = fps.toFixed(1).padStart(5)
|
||||
const durStr = lastDurationMs.toFixed(1).padStart(5)
|
||||
|
||||
// Zero-pad widths so digit churn doesn't jitter the corner.
|
||||
return (
|
||||
<Text color={fpsColor(fps)}>
|
||||
{fpsStr}fps · {durStr}ms · #{totalFrames}
|
||||
{fps.toFixed(1).padStart(5)}fps · {lastDurationMs.toFixed(1).padStart(5)}ms · #{totalFrames}
|
||||
</Text>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue