Commit 31da093c authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder Committed by Alexandru Moșoi

image/draw: remove some bounds checks from DrawYCbCr

It’d be nicer to write just

_ = dpix[x+3]

but the compiler isn’t able to reason about offsets
from symbols (yet).

image/draw benchmark:

YCbCr-8   722µs ± 3%   682µs ± 3%  -5.54%  (p=0.000 n=50+50)

Change-Id: Ia1e399496ed87c282bf0f9ca56c0b2d4948a0df9
Reviewed-on: https://go-review.googlesource.com/22146
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 2563b6f9
......@@ -133,10 +133,13 @@ const sratioCase = `
b = ^(b >> 31)
}
dpix[x+0] = uint8(r)
dpix[x+1] = uint8(g)
dpix[x+2] = uint8(b)
dpix[x+3] = 255
// use a temp slice to hint to the compiler that a single bounds check suffices
rgba := dpix[x : x+4 : len(dpix)]
rgba[0] = uint8(r)
rgba[1] = uint8(g)
rgba[2] = uint8(b)
rgba[3] = 255
}
}
`
......
......@@ -82,10 +82,12 @@ func DrawYCbCr(dst *image.RGBA, r image.Rectangle, src *image.YCbCr, sp image.Po
b = ^(b >> 31)
}
dpix[x+0] = uint8(r)
dpix[x+1] = uint8(g)
dpix[x+2] = uint8(b)
dpix[x+3] = 255
// use a temp slice to hint to the compiler that a single bounds check suffices
rgba := dpix[x : x+4 : len(dpix)]
rgba[0] = uint8(r)
rgba[1] = uint8(g)
rgba[2] = uint8(b)
rgba[3] = 255
}
}
......@@ -137,10 +139,12 @@ func DrawYCbCr(dst *image.RGBA, r image.Rectangle, src *image.YCbCr, sp image.Po
b = ^(b >> 31)
}
dpix[x+0] = uint8(r)
dpix[x+1] = uint8(g)
dpix[x+2] = uint8(b)
dpix[x+3] = 255
// use a temp slice to hint to the compiler that a single bounds check suffices
rgba := dpix[x : x+4 : len(dpix)]
rgba[0] = uint8(r)
rgba[1] = uint8(g)
rgba[2] = uint8(b)
rgba[3] = 255
}
}
......@@ -192,10 +196,12 @@ func DrawYCbCr(dst *image.RGBA, r image.Rectangle, src *image.YCbCr, sp image.Po
b = ^(b >> 31)
}
dpix[x+0] = uint8(r)
dpix[x+1] = uint8(g)
dpix[x+2] = uint8(b)
dpix[x+3] = 255
// use a temp slice to hint to the compiler that a single bounds check suffices
rgba := dpix[x : x+4 : len(dpix)]
rgba[0] = uint8(r)
rgba[1] = uint8(g)
rgba[2] = uint8(b)
rgba[3] = 255
}
}
......@@ -246,10 +252,12 @@ func DrawYCbCr(dst *image.RGBA, r image.Rectangle, src *image.YCbCr, sp image.Po
b = ^(b >> 31)
}
dpix[x+0] = uint8(r)
dpix[x+1] = uint8(g)
dpix[x+2] = uint8(b)
dpix[x+3] = 255
// use a temp slice to hint to the compiler that a single bounds check suffices
rgba := dpix[x : x+4 : len(dpix)]
rgba[0] = uint8(r)
rgba[1] = uint8(g)
rgba[2] = uint8(b)
rgba[3] = 255
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment