Files
ds-galo/backend/internal/photos/edit_bench_test.go
T
iu 6d3d7cbdd4 perf(photos): ускорить рендер правок в 9 раз
Расчёт правок считал math.Pow для каждого канала каждого пикселя, из-за чего
большое фото обрабатывалось больше секунды. Факторы правок теперь считаются
один раз на рендер, квадраты считаются умножением, а строки обрабатываются
параллельно.

Обработка кадра 4000×3000 сократилась с 1.23 с до 0.14 с. Задержка от
сохранения правок до появления отредактированной версии в сетке и просмотре:
около 0.15 с для небольшого фото и 0.6 с для большого (полноразмерная
версия догружается следом, через 1.4 с).
2026-10-20 23:19:03 +03:00

42 lines
843 B
Go

package photos
import (
"image"
"testing"
"time"
)
func BenchmarkApplyLight(b *testing.B) {
w, h := 4000, 3000
src := image.NewNRGBA(image.Rect(0, 0, w, h))
for i := range src.Pix {
src.Pix[i] = uint8(i % 251)
}
p := LightParams{
Exposure: 0.5,
Contrast: 20,
Highlights: -30,
Shadows: 40,
Curve: CurveParams{
RGB: []CurvePoint{{X: 0, Y: 0}, {X: 0.5, Y: 0.4}, {X: 1, Y: 1}},
},
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = applyLight(src, p)
}
b.StopTimer()
b.Logf("кадров: %d", b.N)
}
func TestRenderSpeed(t *testing.T) {
w, h := 4000, 3000
src := image.NewNRGBA(image.Rect(0, 0, w, h))
for i := range src.Pix {
src.Pix[i] = uint8(i % 251)
}
start := time.Now()
_ = applyLight(src, LightParams{Exposure: 0.5, Contrast: 20})
t.Logf("applyLight %dx%d: %s", w, h, time.Since(start))
}