test: pin allocation-free numeric request and dispatch paths
- commit
- 328be2b2795fffc218b78ad4499d5431ef61203b
- author
- brice · · 2026-10-01 05:55 UTC
- parent
- b340c38
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +42 -0
A alloc_test.go +42 -0
| @@ -0,0 +1,42 @@ | |||
| 1 | + | package wlturbo | |
| 2 | + | ||
| 3 | + | import "testing" | |
| 4 | + | ||
| 5 | + | // The README promises allocation-free numeric paths. Pin both halves: a typed | |
| 6 | + | // numeric request and the dispatch of a numeric event to a proxy. | |
| 7 | + | func TestNumericPathsDoNotAllocate(t *testing.T) { | |
| 8 | + | t.Run("RequestArgs", func(t *testing.T) { | |
| 9 | + | d := newDisplay(&chunkConn{}) | |
| 10 | + | p := &BaseProxy{id: d.AllocateID(), context: d.context} | |
| 11 | + | d.context.Register(p) | |
| 12 | + | req := Request{Proxy: p, Opcode: 1, Name: "test.numeric"} | |
| 13 | + | send := func() { | |
| 14 | + | if err := d.context.RequestArgs(req, ArgUint(1), ArgInt(-2), ArgFixed(3)); err != nil { | |
| 15 | + | t.Fatal(err) | |
| 16 | + | } | |
| 17 | + | } | |
| 18 | + | send() // warm up buffers | |
| 19 | + | if n := testing.AllocsPerRun(100, send); n != 0 { | |
| 20 | + | t.Fatalf("RequestArgs allocated %v times per call, want 0", n) | |
| 21 | + | } | |
| 22 | + | }) | |
| 23 | + | ||
| 24 | + | t.Run("DispatchEvent", func(t *testing.T) { | |
| 25 | + | d := newDisplay(&chunkConn{}) | |
| 26 | + | p := &benchProxy{BaseProxy: BaseProxy{id: 7, context: d.context}} | |
| 27 | + | d.context.Register(p) | |
| 28 | + | f := receivedFrame{object: 7, opcode: 0, body: []byte{42, 0, 0, 0}} | |
| 29 | + | dispatch := func() { | |
| 30 | + | if err := d.dispatchFrame(f); err != nil { | |
| 31 | + | t.Fatal(err) | |
| 32 | + | } | |
| 33 | + | } | |
| 34 | + | dispatch() // warm up eventPool | |
| 35 | + | if n := testing.AllocsPerRun(100, dispatch); n != 0 { | |
| 36 | + | t.Fatalf("numeric event dispatch allocated %v times per call, want 0", n) | |
| 37 | + | } | |
| 38 | + | if p.value != 42 { | |
| 39 | + | t.Fatalf("proxy received %d, want 42", p.value) | |
| 40 | + | } | |
| 41 | + | }) | |
| 42 | + | } | |
| @@ -0,0 +1,42 @@ | |||||
| 1 | + | package wlturbo | |||
| 2 | + | ||||
| 3 | + | import "testing" | |||
| 4 | + | ||||
| 5 | + | // The README promises allocation-free numeric paths. Pin both halves: a typed | |||
| 6 | + | // numeric request and the dispatch of a numeric event to a proxy. | |||
| 7 | + | func TestNumericPathsDoNotAllocate(t *testing.T) { | |||
| 8 | + | t.Run("RequestArgs", func(t *testing.T) { | |||
| 9 | + | d := newDisplay(&chunkConn{}) | |||
| 10 | + | p := &BaseProxy{id: d.AllocateID(), context: d.context} | |||
| 11 | + | d.context.Register(p) | |||
| 12 | + | req := Request{Proxy: p, Opcode: 1, Name: "test.numeric"} | |||
| 13 | + | send := func() { | |||
| 14 | + | if err := d.context.RequestArgs(req, ArgUint(1), ArgInt(-2), ArgFixed(3)); err != nil { | |||
| 15 | + | t.Fatal(err) | |||
| 16 | + | } | |||
| 17 | + | } | |||
| 18 | + | send() // warm up buffers | |||
| 19 | + | if n := testing.AllocsPerRun(100, send); n != 0 { | |||
| 20 | + | t.Fatalf("RequestArgs allocated %v times per call, want 0", n) | |||
| 21 | + | } | |||
| 22 | + | }) | |||
| 23 | + | ||||
| 24 | + | t.Run("DispatchEvent", func(t *testing.T) { | |||
| 25 | + | d := newDisplay(&chunkConn{}) | |||
| 26 | + | p := &benchProxy{BaseProxy: BaseProxy{id: 7, context: d.context}} | |||
| 27 | + | d.context.Register(p) | |||
| 28 | + | f := receivedFrame{object: 7, opcode: 0, body: []byte{42, 0, 0, 0}} | |||
| 29 | + | dispatch := func() { | |||
| 30 | + | if err := d.dispatchFrame(f); err != nil { | |||
| 31 | + | t.Fatal(err) | |||
| 32 | + | } | |||
| 33 | + | } | |||
| 34 | + | dispatch() // warm up eventPool | |||
| 35 | + | if n := testing.AllocsPerRun(100, dispatch); n != 0 { | |||
| 36 | + | t.Fatalf("numeric event dispatch allocated %v times per call, want 0", n) | |||
| 37 | + | } | |||
| 38 | + | if p.value != 42 { | |||
| 39 | + | t.Fatalf("proxy received %d, want 42", p.value) | |||
| 40 | + | } | |||
| 41 | + | }) | |||
| 42 | + | } | |||