Files
go-pixelnebula/benchmark/style_theme_benchmark_test.go
2025-03-19 21:10:19 +08:00

127 lines
2.8 KiB
Go

package benchmark
import (
"testing"
"github.com/landaiqing/go-pixelnebula"
"github.com/landaiqing/go-pixelnebula/style"
"github.com/landaiqing/go-pixelnebula/theme"
)
// BenchmarkDifferentStyles 测试不同风格的生成性能
func BenchmarkDifferentStyles(b *testing.B) {
styles := []struct {
name string
style style.StyleType
}{
{"GirlStyle", style.GirlStyle},
{"AteamStyle", style.AteamStyle},
{"BlondStyle", style.BlondStyle},
{"FirehairStyle", style.FirehairStyle},
}
for _, s := range styles {
b.Run(s.name, func(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
pn := pixelnebula.NewPixelNebula()
pn.WithStyle(s.style)
pn.WithSize(231, 231)
_, err := pn.Generate("benchmark-style-"+s.name, false).ToSVG()
if err != nil {
b.Fatal(err)
}
}
})
}
}
// BenchmarkDifferentThemes 测试不同主题的生成性能
func BenchmarkDifferentThemes(b *testing.B) {
// 假设有5个内置主题索引
themeCount := 5
for i := 0; i < themeCount; i++ {
b.Run("Theme_"+Itoa(i), func(b *testing.B) {
b.ResetTimer()
for j := 0; j < b.N; j++ {
pn := pixelnebula.NewPixelNebula()
pn.WithStyle(style.GirlStyle)
pn.WithSize(231, 231)
_, err := pn.Generate("benchmark-theme-"+Itoa(i), false).SetTheme(i).Build().ToSVG()
if err != nil {
b.Fatal(err)
}
}
})
}
}
// BenchmarkCustomTheme 测试自定义主题的性能
func BenchmarkCustomTheme(b *testing.B) {
// 创建一个自定义主题
customTheme := []theme.Theme{
{
theme.ThemePart{
"env": []string{"#f0f0f0", "#e0e0e0"},
"head": []string{"#ffd699"},
"eyes": []string{"#555555", "#ffffff"},
"mouth": []string{"#ff6b6b"},
"top": []string{"#6b5b95", "#6b5b95"},
"clo": []string{"#88b04b"},
},
},
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
pn := pixelnebula.NewPixelNebula()
pn.WithStyle(style.GirlStyle)
pn.WithSize(231, 231)
pn.WithCustomizeTheme(customTheme)
_, err := pn.Generate("benchmark-custom-theme", false).ToSVG()
if err != nil {
b.Fatal(err)
}
}
}
// BenchmarkStyleThemeCombinations 测试不同风格和主题组合的性能
func BenchmarkStyleThemeCombinations(b *testing.B) {
styles := []style.StyleType{style.GirlStyle, style.AsianStyle}
themes := []int{0, 1, 2}
for _, s := range styles {
for _, t := range themes {
styleName := "Unknown"
switch s {
case style.GirlStyle:
styleName = "Girl"
case style.AsianStyle:
styleName = "Asian"
}
b.Run(styleName+"_Theme"+Itoa(t), func(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
pn := pixelnebula.NewPixelNebula()
pn.WithStyle(s)
pn.WithSize(231, 231)
_, err := pn.Generate("benchmark-combo", false).SetTheme(t).Build().ToSVG()
if err != nil {
b.Fatal(err)
}
}
})
}
}
}