From 9e6ed3cb96ef1daa33f7a8a424b4649afe56c76e Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Thu, 9 Sep 2021 20:00:03 +0200 Subject: [PATCH] gpu/internal/rendertest: clean up headless context immediately GPU contexts can hold on to a significant amount of resources. Clean them up immediately instead of at test cleanup. Signed-off-by: Elias Naur --- gpu/internal/rendertest/bench_test.go | 5 +++++ gpu/internal/rendertest/util_test.go | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gpu/internal/rendertest/bench_test.go b/gpu/internal/rendertest/bench_test.go index f28e5750..3a3ddf94 100644 --- a/gpu/internal/rendertest/bench_test.go +++ b/gpu/internal/rendertest/bench_test.go @@ -58,6 +58,7 @@ func BenchmarkDrawUICached(b *testing.B) { // As BenchmarkDraw but the same op.Ops every time that is not reset - this // should thus allow for maximal cache usage. gtx, w, th := setupBenchmark(b) + defer w.Release() drawCore(gtx, th) w.Frame(gtx.Ops) b.ResetTimer() @@ -73,6 +74,7 @@ func BenchmarkDrawUI(b *testing.B) { // resetting the ops and drawing, similar to how a typical UI would function. // This will allow font caching across frames. gtx, w, th := setupBenchmark(b) + defer w.Release() drawCore(gtx, th) w.Frame(gtx.Ops) b.ReportAllocs() @@ -95,6 +97,7 @@ func BenchmarkDrawUI(b *testing.B) { func BenchmarkDrawUITransformed(b *testing.B) { // Like BenchmarkDraw UI but transformed at every frame gtx, w, th := setupBenchmark(b) + defer w.Release() drawCore(gtx, th) w.Frame(gtx.Ops) b.ReportAllocs() @@ -120,6 +123,7 @@ func Benchmark1000Circles(b *testing.B) { // shapes will be possible and resets buffers on each operation to prevent caching // between frames. gtx, w, _ := setupBenchmark(b) + defer w.Release() draw1000Circles(gtx) w.Frame(gtx.Ops) b.ReportAllocs() @@ -136,6 +140,7 @@ func Benchmark1000CirclesInstanced(b *testing.B) { // Like Benchmark1000Circles but will record them and thus allow for caching between // them. gtx, w, _ := setupBenchmark(b) + defer w.Release() draw1000CirclesInstanced(gtx) w.Frame(gtx.Ops) b.ReportAllocs() diff --git a/gpu/internal/rendertest/util_test.go b/gpu/internal/rendertest/util_test.go index f6eac9b5..df8cfec3 100644 --- a/gpu/internal/rendertest/util_test.go +++ b/gpu/internal/rendertest/util_test.go @@ -62,6 +62,7 @@ func buildSquares(size int) paint.ImageOp { func drawImage(t *testing.T, size int, ops *op.Ops, draw func(o *op.Ops)) (im *image.RGBA, err error) { sz := image.Point{X: size, Y: size} w := newWindow(t, sz.X, sz.Y) + defer w.Release() draw(ops) if err := w.Frame(ops); err != nil { return nil, err @@ -109,6 +110,7 @@ func multiRun(t *testing.T, frames ...frameT) { var err error sz := image.Point{X: 128, Y: 128} w := newWindow(t, sz.X, sz.Y) + defer w.Release() ops := new(op.Ops) for i := range frames { ops.Reset() @@ -135,7 +137,6 @@ func multiRun(t *testing.T, frames ...frameT) { saveImage(t, name, img) } } - } func verifyRef(t *testing.T, img *image.RGBA, frame int) (ok bool) { @@ -275,7 +276,6 @@ func newWindow(t testing.TB, width, height int) *headless.Window { if err != nil { t.Skipf("failed to create headless window, skipping: %v", err) } - t.Cleanup(w.Release) return w }