1package phase23import (4 "context"5 "strings"6 "testing"7 "time"8)910func TestTimerMarksEachStepOnce(t *testing.T) {11 tm := New("tune 9.1 (antenna)", "antenna")12 tm.Mark("first data")13 time.Sleep(20 * time.Millisecond)14 tm.Mark("ready")15 tm.Mark("first data") // again: the first time counts16 ms := tm.Marks()17 if len(ms) != 2 || ms[0].Name != "first data" || ms[1].Name != "ready" || ms[1].At < 20*time.Millisecond || ms[1].MS != ms[1].At.Milliseconds() {18 t.Fatalf("marks %+v", ms)19 }20 if !tm.Has("ready") || tm.Has("first frame") {21 t.Error("Has")22 }23 if s := tm.String(); !strings.HasPrefix(s, "first data 0.0s, ready 0.") {24 t.Errorf("String %q", s)25 }2627 // A context without a timer marks nothing, and doesn't fail.28 Step(context.Background(), "x")29 var none *Timer30 none.Mark("x")31 if none.Has("x") || none.Marks() != nil {32 t.Error("a nil timer recorded a step")33 }34 ctx := NewContext(context.Background(), tm)35 Step(ctx, "opened")36 if !tm.Has("opened") || FromContext(ctx) != tm {37 t.Error("Step didn't reach the context's timer")38 }39}4041func TestStatsSummaries(t *testing.T) {42 var s Stats43 for i := 1; i <= 10; i++ {44 s.Add("folder", Ready, time.Duration(i)*100*time.Millisecond)45 }46 s.Add("folder", FirstFrame, 2*time.Second)47 s.Add("nonsense", Ready, time.Second) // not a kind48 s.Add("folder", "other", time.Second) // not a measure49 s.Add("antenna", Ready, -time.Second) // can't be50 s.Add("antenna", Ready, 10*time.Minute) // can't be either51 got := s.Summaries()52 if len(got) != 2 {53 t.Fatalf("summaries %+v", got)54 }55 r := got[0]56 if r.Kind != "folder" || r.Measure != Ready || r.Count != 10 || r.P50 != 0.5 || r.P90 != 0.9 || r.Max != 1 {57 t.Errorf("ready %+v", r)58 }59 if f := got[1]; f.Measure != FirstFrame || f.Count != 1 || f.P50 != 2 {60 t.Errorf("first frame %+v", f)61 }6263 // Only the last ones are kept.64 for range 2 * keep {65 s.Add("youtube", Ready, time.Second)66 }67 for _, x := range s.Summaries() {68 if x.Kind == "youtube" && x.Count != keep {69 t.Errorf("kept %d, want %d", x.Count, keep)70 }71 }72}