Use benchy for benchmarks.

This commit is contained in:
treeform 2020-12-03 22:11:54 -08:00
parent 7441ba4944
commit ae0930ba8d
3 changed files with 44 additions and 190 deletions

View file

@ -368,10 +368,8 @@ proc sharpOpacity*(image: Image) =
else: else:
image.data[i] = rgba(255, 255, 255, 255) image.data[i] = rgba(255, 255, 255, 255)
proc drawCorrect*(a: Image, b: Image, mat: Mat3, blendMode: BlendMode): Image = proc drawCorrect*(a: Image, b: Image, mat: Mat3, blendMode: BlendMode) =
## Draws one image onto another using matrix with color blending. ## Draws one image onto another using matrix with color blending.
result = newImage(a.width, a.height)
var var
matInv = mat.inverse() matInv = mat.inverse()
# compute movement vectors # compute movement vectors
@ -396,7 +394,7 @@ proc drawCorrect*(a: Image, b: Image, mat: Mat3, blendMode: BlendMode): Image =
var rgba = a.getRgbaUnsafe(x, y) var rgba = a.getRgbaUnsafe(x, y)
let rgba2 = b.getRgbaSmooth(srcPos.x - h, srcPos.y - h) let rgba2 = b.getRgbaSmooth(srcPos.x - h, srcPos.y - h)
rgba = blendMode.mix(rgba, rgba2) rgba = blendMode.mix(rgba, rgba2)
result.setRgbaUnsafe(x, y, rgba) a.setRgbaUnsafe(x, y, rgba)
const h = 0.5.float32 const h = 0.5.float32

View file

@ -1,6 +1,4 @@
import chroma, pixie, fidget/opengl/perf import chroma, pixie, benchy
const iterations = 100
proc fillOriginal(a: Image, rgba: ColorRGBA) = proc fillOriginal(a: Image, rgba: ColorRGBA) =
for y in 0 ..< a.height: for y in 0 ..< a.height:
@ -36,44 +34,38 @@ proc sharpOpacityOriginal(a: Image): Image =
else: else:
result.setRgbaUnsafe(x, y, rgba(255, 255, 255, 255)) result.setRgbaUnsafe(x, y, rgba(255, 255, 255, 255))
var a = newImage(2560, 1440)
timeIt "fillOriginal": timeIt "fillOriginal":
var a = newImage(2560, 1440) a.fillOriginal(rgba(255, 255, 255, 255))
for i in 0 ..< iterations:
a.fillOriginal(rgba(255, 255, 255, 255))
doAssert a[0, 0] == rgba(255, 255, 255, 255) doAssert a[0, 0] == rgba(255, 255, 255, 255)
keep(a)
timeIt "fill": timeIt "fill":
var a = newImage(2560, 1440) a.fill(rgba(255, 255, 255, 255))
for i in 0 ..< iterations:
a.fill(rgba(255, 255, 255, 255))
doAssert a[0, 0] == rgba(255, 255, 255, 255) doAssert a[0, 0] == rgba(255, 255, 255, 255)
keep(a)
timeIt "invertOriginal": timeIt "invertOriginal":
var a = newImage(2560, 1440) a.invertOriginal()
for i in 0 ..< iterations: keep(a)
a.invertOriginal()
timeIt "invert": timeIt "invert":
var a = newImage(2560, 1440) a.invert()
for i in 0 ..< iterations: keep(a)
a.invert()
timeIt "applyOpacityOriginal": timeIt "applyOpacityOriginal":
var a = newImage(2560, 1440) a = a.applyOpacityOriginal(0.5)
for i in 0 ..< iterations: keep(a)
a = a.applyOpacityOriginal(0.5)
timeIt "applyOpacity": timeIt "applyOpacity":
var a = newImage(2560, 1440) a.applyOpacity(0.5)
for i in 0 ..< iterations: keep(a)
a.applyOpacity(0.5)
timeIt "sharpOpacityOriginal": timeIt "sharpOpacityOriginal":
var a = newImage(2560, 1440) a = a.sharpOpacityOriginal()
for i in 0 ..< iterations: keep(a)
a = a.sharpOpacityOriginal()
timeIt "sharpOpacity": timeIt "sharpOpacity":
var a = newImage(2560, 1440) a.sharpOpacity()
for i in 0 ..< iterations: keep(a)
a.sharpOpacity()

View file

@ -1,168 +1,32 @@
import pixie, chroma, vmath, fidget/opengl/perf import pixie, chroma, vmath, benchy
# timeIt "drawOverwrite bmOverwrite": block:
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.drawOverwrite(b, translate(vec2(25, 25))) # Copy
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawOverwrite.bmOverwrite.png")
# echo tmp
# timeIt "drawBlend bmOverwrite":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.drawBlend(b, translate(vec2(25, 25)), bmOverwrite)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawBlend.bmOverwrite.png")
# echo tmp
# timeIt "drawBlendSmooth bmOverwrite":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.drawBlendSmooth(b, translate(vec2(25, 25)), bmOverwrite)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawBlendSmooth.bmOverwrite.png")
# echo tmp
# timeIt "drawBlend bmNormal":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.drawBlend(b, translate(vec2(25, 25)), bmNormal)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawBlend.bmNormal.png")
# echo tmp
# timeIt "drawBlendSmooth bmNormal":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.drawBlendSmooth(b, translate(vec2(25, 25)), bmNormal)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawBlendSmooth.bmNormal.png")
# echo tmp
timeIt "drawCorrect bmNormal":
var tmp = 0
var c: Image var c: Image
for i in 0 ..< 1000: var a = newImage(1000, 1000)
var a = newImageFill(100, 100, rgba(255, 0, 0, 255)) a.fill(rgba(255, 0, 0, 255))
var b = newImageFill(100, 100, rgba(0, 255, 0, 255)) var b = newImage(1000, 1000)
c = a.drawCorrect(b, translate(vec2(25, 25)), bmNormal) b.fill(rgba(0, 255, 0, 255))
tmp += c.width * c.height
c.writeFile("tests/images/bench.drawCorrect.bmNormal.png")
echo tmp
# timeIt "drawStepper bmNormal": timeIt "drawCorrect bmNormal":
# var tmp = 0 a.drawCorrect(b, translate(vec2(25, 25)), bmNormal)
# var c: Image keep(b)
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.drawStepper(b, translate(vec2(25, 25)), bmNormal)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawStepper.bmNormal.png")
# echo tmp
# timeIt "drawInPlace bmNormal": block:
# var tmp = 0 var a = newImage(1000, 1000)
# var a: Image a.fill(rgba(255, 0, 0, 255))
# for i in 0 ..< 1000: var b = newImage(1000, 1000)
# a = newImageFill(100, 100, rgba(255, 0, 0, 255)) b.fill(rgba(0, 255, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# a.drawInPlace(b, translate(vec2(25, 25)), bmNormal)
# tmp += a.width * a.height
# a.writeFile("tests/images/bench.drawInPlace.bmNormal.png")
# echo tmp
# timeIt "drawUberCopy bmNormal": timeIt "draw bmNormal":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.draw(b, translate(vec2(25, 25)), bmNormal)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawUberCopy.bmNormal.png")
# echo tmp
timeIt "draw bmNormal":
var tmp = 0
var a: Image
for i in 0 ..< 1000:
a = newImageFill(100, 100, rgba(255, 0, 0, 255))
var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
a.draw(b, translate(vec2(25, 25)), bmNormal) a.draw(b, translate(vec2(25, 25)), bmNormal)
tmp += a.width * a.height keep(b)
a.writeFile("tests/images/bench.draw.bmNormal.png")
echo tmp
# timeIt "drawUberCopy Smooth bmNormal": block:
# var tmp = 0 var a = newImage(1000, 1000)
# var c: Image a.fill(rgba(255, 0, 0, 255))
# for i in 0 ..< 1000: var b = newImage(1000, 1000)
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255)) b.fill(rgba(0, 255, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
# c = a.draw(b, translate(vec2(25.2, 25.2)), bmNormal)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawUberCopy.Smooth.bmNormal.png")
# echo tmp
timeIt "draw Smooth bmNormal": timeIt "draw Smooth bmNormal":
var tmp = 0
var a: Image
for i in 0 ..< 1000:
a = newImageFill(100, 100, rgba(255, 0, 0, 255))
var b = newImageFill(100, 100, rgba(0, 255, 0, 255))
a.draw(b, translate(vec2(25.2, 25.2)), bmNormal) a.draw(b, translate(vec2(25.2, 25.2)), bmNormal)
tmp += a.width * a.height keep(b)
a.writeFile("tests/images/bench.draw.Smooth.bmNormal.png")
echo tmp
# timeIt "drawBlend bmSaturation":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 0, 0, 255))
# c = a.drawBlend(b, translate(vec2(25, 25)), bmSaturation)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawBlend.bmSaturation.png")
# echo tmp
# timeIt "drawBlendSmooth bmSaturation":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImageFill(100, 100, rgba(255, 0, 0, 255))
# var b = newImageFill(100, 100, rgba(0, 0, 0, 255))
# c = a.drawBlendSmooth(b, translate(vec2(25, 25)), bmSaturation)
# tmp += c.width * c.height
# c.writeFile("tests/images/bench.drawBlendSmooth.bmSaturation.png")
# echo tmp
# timeIt "benchDrawFast3 Rotation":
# var tmp = 0
# var c: Image
# for i in 0 ..< 1000:
# var a = newImage(100, 100)
# a.fill(rgba(255, 0, 0, 255))
# var b = newImage(100, 100)
# b.fill(rgba(0, 0, 0, 255))
# c = a.drawFast3(b, translate(vec2(25, 25)) * rotationMat3(PI/2), bmNormal)
# tmp += c.width * c.height
# c.writeFile("tests/images/benchDrawFast3Rotation.png")
# echo tmp