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 <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-09-09 20:00:03 +02:00
parent f842178ac7
commit 9e6ed3cb96
2 changed files with 7 additions and 2 deletions
+5
View File
@@ -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()
+2 -2
View File
@@ -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
}