Browse Source

Faster clamp

30% performance increase removing ternary operator.


Former-commit-id: 9664ddb7da1c63be4034d0466ac10560db42edf0
Former-commit-id: 019ec4638e02acdf8bafc1f251859a25f75f07d2
Former-commit-id: 9b608a6ba964226e0f45d023d466f207aa24c796
pull/1/head
James Jackson-South 10 years ago
parent
commit
f5e73368a1
  1. 24
      src/ImageProcessorCore/PackedVector/Bgra32.cs
  2. 17
      tests/ImageProcessorCore.Benchmarks/Color/Clamp.cs
  3. 2
      tests/ImageProcessorCore.Benchmarks/Samplers/Resize.cs

24
src/ImageProcessorCore/PackedVector/Bgra32.cs

@ -270,8 +270,16 @@ namespace ImageProcessorCore
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static byte Clamp(float value)
{
value = (value > 255) ? 255 : value;
value = (value < 0) ? 0 : value;
if (value > 255)
{
return 255;
}
if (value < 0)
{
return 0;
}
return (byte)value;
}
@ -285,8 +293,16 @@ namespace ImageProcessorCore
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static byte Clamp(double value)
{
value = (value > 255) ? 255 : value;
value = (value < 0) ? 0 : value;
if (value > 255)
{
return 255;
}
if (value < 0)
{
return 0;
}
return (byte)value;
}

17
tests/ImageProcessorCore.Benchmarks/Color/Clamp.cs

@ -22,5 +22,22 @@ namespace ImageProcessorCore.Benchmarks.Color
return (byte)value;
}
[Benchmark(Description = "No Maths Clamp No Ternary")]
public byte ClampNoMathsNoTernary()
{
double value = 256;
if(value > 255)
{
return 255;
}
if (value < 0)
{
return 0;
}
return (byte)value;
}
}
}

2
tests/ImageProcessorCore.Benchmarks/Samplers/Resize.cs

@ -21,7 +21,7 @@
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.DrawImage(source, 0, 0, 100, 100);
graphics.DrawImage(source, 0, 0, 400, 400);
}
return destination.Size;

Loading…
Cancel
Save