Files
aego/core/trace/pacing_test.go
sanspie 48d1eabef2
ci / checks (push) Failing after 5m21s
ci-platforms / windows amd64 smoke (push) Skipped
ci-platforms / darwin amd64 smoke (push) Skipped
ci-platforms / darwin arm64 smoke (push) Skipped
ci / build (amd64, linux, ubuntu-24.04) (push) Failing after 7m49s
ci / release (push) Skipped
profiler: report actual FPS and idle waits
2026-11-06 12:27:31 +03:00

57 lines
1.7 KiB
Go

package trace
import (
"bytes"
"encoding/json"
"testing"
"time"
)
func TestPaceWaitMetadataSurvivesOverflowAndResets(t *testing.T) {
tr := New(Options{Frames: 2, Events: 1})
tr.SetEnabled(true)
zone := tr.Zone("test")
tr.BeginFrame()
tr.Begin(zone).End()
tr.Begin(zone).End() // No room for the pacing event itself.
tr.AddPaceWait(10*time.Millisecond, false)
tr.AddPaceWait(60*time.Millisecond, true)
tr.AddPaceWait(-time.Second, true)
tr.EndFrame()
f := tr.Frame(0)
if f.Dropped != 1 || f.PaceWaitNS != int64(70*time.Millisecond) || f.IdleWaitNS != int64(60*time.Millisecond) {
t.Fatalf("dropped=%d pace=%d idle=%d", f.Dropped, f.PaceWaitNS, f.IdleWaitNS)
}
snapshot := tr.Snapshot(1)
for range 2 {
tr.BeginFrame()
tr.EndFrame()
}
if f = tr.Frame(0); f.PaceWaitNS != 0 || f.IdleWaitNS != 0 {
t.Fatalf("reused frame retained wait: %+v", f)
}
if snapshot[0].PaceWaitNS != int64(70*time.Millisecond) || snapshot[0].IdleWaitNS != int64(60*time.Millisecond) {
t.Fatal("snapshot lost pacing metadata")
}
var out bytes.Buffer
if err := WriteChrome(&out, tr, snapshot); err != nil {
t.Fatal(err)
}
var exported struct {
Events []struct {
Args struct {
PaceWaitNS int64 `json:"paceWaitNs"`
IdleWaitNS int64 `json:"idleWaitNs"`
} `json:"args"`
} `json:"traceEvents"`
}
if err := json.Unmarshal(out.Bytes(), &exported); err != nil {
t.Fatal(err)
}
if len(exported.Events) < 2 || exported.Events[1].Args.PaceWaitNS != int64(70*time.Millisecond) || exported.Events[1].Args.IdleWaitNS != int64(60*time.Millisecond) {
t.Fatalf("exported pacing metadata: %+v", exported.Events)
}
var nilTracer *Tracer
nilTracer.AddPaceWait(time.Second, true)
}