Merge pull request #63 from guzba/master

better blend benchmarking
This commit is contained in:
treeform 2021-01-22 21:08:03 -08:00 committed by GitHub
commit 6ec1db5a81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,185 +1,321 @@
import benchy, chroma, vmath import benchy, chroma, vmath, pixie/images
include pixie/blends include pixie/blends
const iterations = 1_000_000
let let
a = rgba(100, 200, 100, 255) backdrop = newImage(256, 256)
b = rgba(25, 33, 100, 127) source = newImage(256, 256)
source.fill(rgba(100, 100, 100, 100))
template reset() =
backdrop.fill(rgba(0, 0, 0, 255))
reset()
timeIt "blendNormal": timeIt "blendNormal":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendNormal(a, b) backdrop.data[i] = blendNormal(backdrop.data[i], source.data[i])
reset()
timeIt "blendNormalFloats": timeIt "blendNormalFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendNormalFloats(a.color, b.color).rgba backdrop.data[i] = blendNormalFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendDarken": timeIt "blendDarken":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendDarken(a, b) backdrop.data[i] = blendDarken(backdrop.data[i], source.data[i])
reset()
timeIt "blendDarkenFloats": timeIt "blendDarkenFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendDarkenFloats(a.color, b.color).rgba backdrop.data[i] = blendDarkenFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendMultiply": timeIt "blendMultiply":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendMultiply(a, b) backdrop.data[i] = blendMultiply(backdrop.data[i], source.data[i])
reset()
timeIt "blendMultiplyFloats": timeIt "blendMultiplyFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendMultiplyFloats(a.color, b.color).rgba backdrop.data[i] = blendMultiplyFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendLinearBurn": timeIt "blendLinearBurn":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLinearBurn(a, b) backdrop.data[i] = blendLinearBurn(backdrop.data[i], source.data[i])
reset()
timeIt "blendLinearBurnFloats": timeIt "blendLinearBurnFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLinearBurnFloats(a.color, b.color).rgba backdrop.data[i] = blendLinearBurnFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendColorBurn": timeIt "blendColorBurn":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendColorBurn(a, b) backdrop.data[i] = blendColorBurn(backdrop.data[i], source.data[i])
reset()
timeIt "blendColorBurnFloats": timeIt "blendColorBurnFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendColorBurnFloats(a.color, b.color).rgba backdrop.data[i] = blendColorBurnFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendLighten": timeIt "blendLighten":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLighten(a, b) backdrop.data[i] = blendLighten(backdrop.data[i], source.data[i])
reset()
timeIt "blendLightenFloats": timeIt "blendLightenFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLightenFloats(a.color, b.color).rgba backdrop.data[i] = blendLightenFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendScreen": timeIt "blendScreen":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendScreen(a, b) backdrop.data[i] = blendScreen(backdrop.data[i], source.data[i])
reset()
timeIt "blendScreenFloats": timeIt "blendScreenFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendScreenFloats(a.color, b.color).rgba backdrop.data[i] = blendScreenFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendLinearDodge": timeIt "blendLinearDodge":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLinearDodge(a, b) backdrop.data[i] = blendLinearDodge(backdrop.data[i], source.data[i])
reset()
timeIt "blendLinearDodgeFloats": timeIt "blendLinearDodgeFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLinearDodgeFloats(a.color, b.color).rgba backdrop.data[i] = blendLinearDodgeFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendColorDodge": timeIt "blendColorDodge":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendColorDodge(a, b) backdrop.data[i] = blendColorDodge(backdrop.data[i], source.data[i])
reset()
timeIt "blendColorDodgeFloats": timeIt "blendColorDodgeFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendColorDodgeFloats(a.color, b.color).rgba backdrop.data[i] = blendColorDodgeFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendOverlay": timeIt "blendOverlay":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendOverlay(a, b) backdrop.data[i] = blendOverlay(backdrop.data[i], source.data[i])
reset()
timeIt "blendOverlayFloats": timeIt "blendOverlayFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendOverlayFloats(a.color, b.color).rgba backdrop.data[i] = blendOverlayFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendSoftLight": timeIt "blendSoftLight":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendSoftLight(a, b) backdrop.data[i] = blendSoftLight(backdrop.data[i], source.data[i])
reset()
timeIt "blendSoftLightFloats": timeIt "blendSoftLightFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendSoftLightFloats(a.color, b.color).rgba backdrop.data[i] = blendSoftLightFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendHardLight": timeIt "blendHardLight":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendHardLight(a, b) backdrop.data[i] = blendHardLight(backdrop.data[i], source.data[i])
reset()
timeIt "blendHardLightFloats": timeIt "blendHardLightFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendHardLightFloats(a.color, b.color).rgba backdrop.data[i] = blendHardLightFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendDifference": timeIt "blendDifference":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendDifference(a, b) backdrop.data[i] = blendDifference(backdrop.data[i], source.data[i])
reset()
timeIt "blendDifferenceFloats": timeIt "blendDifferenceFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendDifferenceFloats(a.color, b.color).rgba backdrop.data[i] = blendDifferenceFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendExclusion": timeIt "blendExclusion":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendExclusion(a, b) backdrop.data[i] = blendExclusion(backdrop.data[i], source.data[i])
reset()
timeIt "blendExclusionFloats": timeIt "blendExclusionFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendExclusionFloats(a.color, b.color).rgba backdrop.data[i] = blendExclusionFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendHue": timeIt "blendHue":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendHue(a, b) backdrop.data[i] = blendHue(backdrop.data[i], source.data[i])
reset()
timeIt "blendHueFloats": timeIt "blendHueFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendHueFloats(a.color, b.color).rgba backdrop.data[i] = blendHueFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendSaturation": timeIt "blendSaturation":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendSaturation(a, b) backdrop.data[i] = blendSaturation(backdrop.data[i], source.data[i])
reset()
timeIt "blendSaturationFloats": timeIt "blendSaturationFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendSaturationFloats(a.color, b.color).rgba backdrop.data[i] = blendSaturationFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendColor": timeIt "blendColor":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendColor(a, b) backdrop.data[i] = blendColor(backdrop.data[i], source.data[i])
reset()
timeIt "blendColorFloats": timeIt "blendColorFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendColorFloats(a.color, b.color).rgba backdrop.data[i] = blendColorFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendLuminosity": timeIt "blendLuminosity":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLuminosity(a, b) backdrop.data[i] = blendLuminosity(backdrop.data[i], source.data[i])
reset()
timeIt "blendLuminosityFloats": timeIt "blendLuminosityFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendLuminosityFloats(a.color, b.color).rgba backdrop.data[i] = blendLuminosityFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendMask": timeIt "blendMask":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendMask(a, b) backdrop.data[i] = blendMask(backdrop.data[i], source.data[i])
reset()
timeIt "blendMaskFloats": timeIt "blendMaskFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendMaskFloats(a.color, b.color).rgba backdrop.data[i] = blendMaskFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendSubtractMask": timeIt "blendSubtractMask":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendSubtractMask(a, b) backdrop.data[i] = blendSubtractMask(backdrop.data[i], source.data[i])
reset()
timeIt "blendSubtractMaskFloats": timeIt "blendSubtractMaskFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendSubtractMaskFloats(a.color, b.color).rgba backdrop.data[i] = blendSubtractMaskFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendIntersectMask": timeIt "blendIntersectMask":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendIntersectMask(a, b) backdrop.data[i] = blendIntersectMask(backdrop.data[i], source.data[i])
reset()
timeIt "blendIntersectMaskFloats": timeIt "blendIntersectMaskFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendIntersectMaskFloats(a.color, b.color).rgba backdrop.data[i] = blendIntersectMaskFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()
timeIt "blendExcludeMask": timeIt "blendExcludeMask":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendExcludeMask(a, b) backdrop.data[i] = blendExcludeMask(backdrop.data[i], source.data[i])
reset()
timeIt "blendExcludeMaskFloats": timeIt "blendExcludeMaskFloats":
for i in 0 ..< iterations: for i in 0 ..< backdrop.data.len:
keep blendExcludeMaskFloats(a.color, b.color).rgba backdrop.data[i] = blendExcludeMaskFloats(
backdrop.data[i].color, source.data[i].color
).rgba
reset()