From ae0526fda0d1cdcf6f02d3c6e4c5e4f61d955c99 Mon Sep 17 00:00:00 2001 From: faiface Date: Sun, 2 Jul 2017 19:04:20 +0200 Subject: [PATCH] add ToRGBA, sprite.Draw(batch) and Matrix benchmarks --- color_test.go | 25 ++++++++++++++++++++ drawer_test.go | 15 ++++++++++++ matrix_test.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 color_test.go create mode 100644 drawer_test.go create mode 100644 matrix_test.go diff --git a/color_test.go b/color_test.go new file mode 100644 index 0000000..c89679e --- /dev/null +++ b/color_test.go @@ -0,0 +1,25 @@ +package pixel_test + +import ( + "fmt" + "image/color" + "testing" + + "github.com/faiface/pixel" +) + +func BenchmarkColorToRGBA(b *testing.B) { + types := []color.Color{ + color.NRGBA{R: 124, G: 14, B: 230, A: 42}, // slowest + color.RGBA{R: 62, G: 32, B: 14, A: 63}, // faster + pixel.RGB(0.8, 0.2, 0.5).Scaled(0.712), // fastest + } + for _, col := range types { + col := col + b.Run(fmt.Sprintf("From %T", col), func(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = pixel.ToRGBA(col) + } + }) + } +} diff --git a/drawer_test.go b/drawer_test.go new file mode 100644 index 0000000..a1220b8 --- /dev/null +++ b/drawer_test.go @@ -0,0 +1,15 @@ +package pixel_test + +import ( + "testing" + + "github.com/faiface/pixel" +) + +func BenchmarkSpriteDrawBatch(b *testing.B) { + sprite := pixel.NewSprite(nil, pixel.R(0, 0, 64, 64)) + batch := pixel.NewBatch(&pixel.TrianglesData{}, nil) + for i := 0; i < b.N; i++ { + sprite.Draw(batch, pixel.IM) + } +} diff --git a/matrix_test.go b/matrix_test.go new file mode 100644 index 0000000..e8d0ec9 --- /dev/null +++ b/matrix_test.go @@ -0,0 +1,63 @@ +package pixel_test + +import ( + "math/rand" + "testing" + + "github.com/faiface/pixel" +) + +func BenchmarkMatrix(b *testing.B) { + b.Run("Moved", func(b *testing.B) { + m := pixel.IM + for i := 0; i < b.N; i++ { + m = m.Moved(pixel.V(4.217, -132.99)) + } + }) + b.Run("ScaledXY", func(b *testing.B) { + m := pixel.IM + for i := 0; i < b.N; i++ { + m = m.ScaledXY(pixel.V(-5.1, 9.3), pixel.V(2.1, 0.98)) + } + }) + b.Run("Rotated", func(b *testing.B) { + m := pixel.IM + for i := 0; i < b.N; i++ { + m = m.Rotated(pixel.V(-5.1, 9.3), 1.4) + } + }) + b.Run("Chained", func(b *testing.B) { + var m1, m2 pixel.Matrix + for i := range m1 { + m1[i] = rand.Float64() + m2[i] = rand.Float64() + } + for i := 0; i < b.N; i++ { + m1 = m1.Chained(m2) + } + }) + b.Run("Project", func(b *testing.B) { + var m pixel.Matrix + for i := range m { + m[i] = rand.Float64() + } + u := pixel.V(1, 1) + for i := 0; i < b.N; i++ { + u = m.Project(u) + } + }) + b.Run("Unproject", func(b *testing.B) { + again: + var m pixel.Matrix + for i := range m { + m[i] = rand.Float64() + } + if (m[0]*m[3])-(m[1]*m[2]) == 0 { // zero determinant, not invertible + goto again + } + u := pixel.V(1, 1) + for i := 0; i < b.N; i++ { + u = m.Unproject(u) + } + }) +}