v0.6.1 b45de7b

benchmark_test.go RawHistoryFolder

1package wlturbo
2
3import "testing"
4
5// BenchmarkWireDispatch isolates framed typed dispatch from socket scheduling.
6func BenchmarkWireDispatch(b *testing.B) {
7	d := newDisplay(&chunkConn{})
8	p := &benchProxy{BaseProxy: BaseProxy{id: 7, context: d.context}}
9	d.context.Register(p)
10	f := receivedFrame{object: 7, opcode: 0, body: []byte{1, 0, 0, 0}}
11	b.ReportAllocs()
12	b.ResetTimer()
13	for i := 0; i < b.N; i++ {
14		if err := d.dispatchFrame(f); err != nil {
15			b.Fatal(err)
16		}
17	}
18}
19
20// BenchmarkDispatchCoalesced measures framing when one read carries many
21// messages; per-frame cost must not grow with the amount buffered.
22func BenchmarkDispatchCoalesced(b *testing.B) {
23	var chunk []byte
24	for len(chunk)+12 <= readChunkSize {
25		chunk = append(chunk, message(7, 0, []byte{1, 0, 0, 0})...)
26	}
27	frames := len(chunk) / 12
28	b.ReportAllocs()
29	for i := 0; i < b.N; i++ {
30		b.StopTimer()
31		d := newDisplay(&chunkConn{chunks: [][]byte{append([]byte(nil), chunk...)}})
32		d.context.Register(&benchProxy{BaseProxy: BaseProxy{id: 7, context: d.context}})
33		b.StartTimer()
34		for j := 0; j < frames; j++ {
35			if err := d.Dispatch(); err != nil {
36				b.Fatal(err)
37			}
38		}
39	}
40	b.ReportMetric(float64(b.Elapsed().Nanoseconds())/float64(b.N*frames), "ns/frame")
41}
42
43type benchProxy struct {
44	BaseProxy
45	value uint32
46}
47
48func (p *benchProxy) EventSignature(op uint16) (string, bool) { return "uint,", op == 0 }
49func (p *benchProxy) Dispatch(e *Event)                       { p.value = e.Uint32() }
50
51// BenchmarkSendRequest measures marshaling a typical fixed-size request.
52func BenchmarkSendRequest(b *testing.B) {
53	d := newDisplay(&chunkConn{})
54	b.ReportAllocs()
55	for i := 0; i < b.N; i++ {
56		if err := d.SendRequest(9, 0, uint32(1), int32(2), Fixed(3)); err != nil {
57			b.Fatal(err)
58		}
59	}
60}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 8

↑↓ moveenter openesc close