import { getTraceStats } from '../utils/traceLoader' interface TraceStatsProps { stats: ReturnType } export default function TraceStats({ stats }: TraceStatsProps) { const formatNumber = (num: number) => { return new Intl.NumberFormat().format(num) } const formatDuration = (microseconds: number) => { const milliseconds = microseconds / 1000 if (milliseconds < 1000) { return `${milliseconds.toFixed(2)}ms` } const seconds = milliseconds / 1000 return `${seconds.toFixed(2)}s` } const formatTimestamp = (timestamp: number) => { return new Date(timestamp / 1000).toLocaleString() } const getPhaseDescription = (phase: string) => { const descriptions: Record = { 'M': 'Metadata', 'X': 'Complete Events', 'I': 'Instant Events', 'B': 'Begin Events', 'E': 'End Events', 'D': 'Deprecated', 'b': 'Nestable Start', 'e': 'Nestable End', 'n': 'Nestable Instant', 'S': 'Async Start', 'T': 'Async Instant', 'F': 'Async End', 'P': 'Sample', 'C': 'Counter', 'R': 'Mark' } return descriptions[phase] || `Unknown (${phase})` } return (

Trace Statistics

{/* Overview Section */}

Overview

Total Events: {formatNumber(stats.totalEvents)}
Processes: {stats.processCount}
Threads: {stats.threadCount}
Duration: {formatDuration(stats.timeRange.duration)}
{/* Metadata Section */}

Metadata

Source: {stats.metadata.source}
Hardware Threads: {stats.metadata.hardwareConcurrency}
Start Time: {new Date(stats.metadata.startTime).toLocaleString()}
{/* Time Range Section */}

Time Range

Start: {formatTimestamp(stats.timeRange.start)}
End: {formatTimestamp(stats.timeRange.end)}
Duration: {formatDuration(stats.timeRange.duration)}
{/* Event Types Section */}

Events by Type

{Object.entries(stats.eventsByPhase) .sort(([, a], [, b]) => b - a) .map(([phase, count]) => (
{getPhaseDescription(phase)}
Phase: {phase}
{formatNumber(count)}
{((count / stats.totalEvents) * 100).toFixed(1)}%
))}
) }