From 3787158dbab7142f887bfe0e9124f0d775b06ba5 Mon Sep 17 00:00:00 2001 From: Lukas Herman Date: Sat, 31 Oct 2020 01:12:14 -0700 Subject: [PATCH] WIP --- mediadevices_bench_test.go | 80 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 mediadevices_bench_test.go diff --git a/mediadevices_bench_test.go b/mediadevices_bench_test.go new file mode 100644 index 00000000..4574c3c2 --- /dev/null +++ b/mediadevices_bench_test.go @@ -0,0 +1,80 @@ +package mediadevices + +import ( + "image" + "sync" + "testing" + + "github.com/pion/mediadevices/pkg/codec/x264" + "github.com/pion/mediadevices/pkg/frame" +) + +type mockVideoSource struct { + width, height int + pool sync.Pool + decoder frame.Decoder +} + +func newMockVideoSource(width, height int) *mockVideoSource { + decoder, err := frame.NewDecoder(frame.FormatYUY2) + if err != nil { + panic(err) + } + + return &mockVideoSource{ + width: width, + height: height, + pool: sync.Pool{ + New: func() interface{} { + resolution := width * height + return make([]byte, resolution*2) + }, + }, + decoder: decoder, + } +} + +func (source *mockVideoSource) ID() string { return "" } +func (source *mockVideoSource) Close() error { return nil } +func (source *mockVideoSource) Read() (image.Image, func(), error) { + raw := source.pool.Get().([]byte) + decoded, release, err := source.decoder.Decode(raw, source.width, source.height) + source.pool.Put(raw) + if err != nil { + return nil, nil, err + } + + return decoded, release, nil +} + +func BenchmarkEndToEnd(b *testing.B) { + params, err := x264.NewParams() + if err != nil { + b.Fatal(err) + } + params.BitRate = 300_000 + + videoSource := newMockVideoSource(1920, 1080) + track := NewVideoTrack(videoSource, nil).(*VideoTrack) + defer track.Close() + + reader := track.NewReader(false) + inputProp, err := detectCurrentVideoProp(track.Broadcaster) + if err != nil { + b.Fatal(err) + } + + encodedReader, err := params.BuildVideoEncoder(reader, inputProp) + if err != nil { + b.Fatal(err) + } + defer encodedReader.Close() + + for i := 0; i < b.N; i++ { + _, release, err := encodedReader.Read() + if err != nil { + b.Fatal(err) + } + release() + } +}