add ToRGBA, sprite.Draw(batch) and Matrix benchmarks

This commit is contained in:
faiface 2017-07-02 19:04:20 +02:00
parent 578db5e284
commit 7f4bc89dc4
3 changed files with 103 additions and 0 deletions

25
color_test.go Normal file
View File

@ -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)
}
})
}
}

15
drawer_test.go Normal file
View File

@ -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)
}
}

63
matrix_test.go Normal file
View File

@ -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)
}
})
}