package land import ( "log" "sync/atomic" "time" ) type PerformanceAnalyzer struct { tickCount int64 drawCount int64 } func (p *PerformanceAnalyzer) Tick() { atomic.AddInt64(&p.tickCount, 1) } func (p *PerformanceAnalyzer) Draw() { atomic.AddInt64(&p.drawCount, 1) } func (p *PerformanceAnalyzer) RunResetter(duration time.Duration) { ticker := time.NewTicker(duration) defer ticker.Stop() for { <-ticker.C log.Printf("TPS: %d FPS: %d\n", atomic.LoadInt64(&p.tickCount), atomic.LoadInt64(&p.drawCount)) atomic.StoreInt64(&p.tickCount, 0) atomic.StoreInt64(&p.drawCount, 0) } } func (p *PerformanceAnalyzer) GetTPS() int64 { return atomic.LoadInt64(&p.tickCount) } func (p *PerformanceAnalyzer) GetFPS() int64 { return atomic.LoadInt64(&p.drawCount) }