1package core
2
3import (
4 "testing"
5 "time"
6
7 "github.com/bnema/neferwl/internal/ports"
8)
9
10// BenchmarkRefreshShown is one publish's layout build on a screen of 24
11// windows, 20 of them with a rect motion and 6 more leaving: the cost of
12// matching the motions to the layout every frame. The layout is built in the
13// screen's reused buffers: 0 allocs/op (33 before).
14func BenchmarkRefreshShown(b *testing.B) {
15 var cfg ports.Config
16 cfg.Keyboard.CmdKey = "super"
17 cfg.Layout.MaxColumns = 4
18 cfg.Animations.On = true
19 cfg.Animations.Slowdown = 10
20 c, err := New(cfg, Channels{Scenes: make(chan []ports.Scene, 1), Commands: make(chan ports.ClientCommand, 64)})
21 if err != nil {
22 b.Fatal(err)
23 }
24 c.addScreen(ports.OutputInfo{Name: "A", Width: 3000, Height: 2000})
25 sc := c.cur()
26 for id := WindowID(1); id <= 30; id++ {
27 sc.mon.AddWindow(id)
28 }
29 sc.arrange()
30 c.refreshShown()
31 t0 := time.Now()
32 sc.rects = make(map[WindowID]rectMotion, 26)
33 sp := viewSpring(100, 0)
34 for i, p := range sc.settledLayout {
35 if i >= 20 {
36 break
37 }
38 sc.rects[p.ID] = rectMotion{
39 x: c.spring(sp, t0), y: c.spring(sp, t0), w: c.spring(sp, t0), h: c.spring(sp, t0),
40 dx: 100, dy: 100, dw: 100, dh: 100,
41 fade: c.spring(levelSpring(0.5, 0), t0), df: 0.5, scale: true,
42 }
43 }
44 for _, p := range sc.settledLayout[24:] {
45 sc.mon.RemoveWindow(p.ID)
46 c.leaveFrom(sc, p, nil, t0)
47 }
48 sc.rectsWS = sc.mon.Current()
49 c.refreshShown()
50 if len(sc.rects) != 26 {
51 b.Fatalf("rects %d", len(sc.rects))
52 }
53 b.ReportAllocs()
54 b.ResetTimer()
55 for range b.N {
56 c.refreshShown()
57 }
58 if len(sc.rects) != 26 {
59 b.Fatalf("rects %d after", len(sc.rects))
60 }
61}