diff options
author | reed <reed@google.com> | 2015-04-15 13:13:48 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-15 13:13:48 -0700 |
commit | a0246165eab9018d07afc09ff826ea4c40898ebc (patch) | |
tree | 1bb6a4ddd84871e812d7159c2d741373accc9dce /src/core/SkBlitter_ARGB32.cpp | |
parent | 00b7e5eb973a1b1e4d1affa74fc0341e8c41e3da (diff) |
Speeup hairline curves (quads and cubics)
/skia/trunk> cat ../old.txt
maxrss loops min median mean max stddev samples config bench
9M 1 4.28ms 4.32ms 4.36ms 4.67ms 3% ▄▁▁▃▂▂▁▁▂█ 8888 path_hairline_small_AA_cubic
9M 1 743µs 767µs 770µs 825µs 4% ▃▃▇▃▁▁▅▁█▁ 8888 path_hairline_small_AA_conic
9M 1 533µs 606µs 598µs 680µs 9% ▁▂▂█▆▇▇▄▂▂ 8888 path_hairline_small_AA_quad
9M 1 451µs 452µs 456µs 495µs 3% ▁▁▁▁█▁▁▁▁▁ 8888 path_hairline_small_AA_line
/skia/trunk> cat ../new.txt
maxrss loops min median mean max stddev samples config bench
9M 1 827µs 827µs 831µs 869µs 2% ▁▁▁▁▁▁▁█▁▁ 8888 path_hairline_small_AA_cubic
9M 1 515µs 517µs 517µs 518µs 0% ▇█▆▅▃▃▁▁▁▅ 8888 path_hairline_small_AA_conic
9M 1 310µs 311µs 315µs 332µs 2% ▂▁█▆▁▁▁▁▁▁ 8888 path_hairline_small_AA_quad
9M 1 254µs 254µs 258µs 276µs 3% ▁▁▁▁▁▁▁█▇▂ 8888 path_hairline_small_AA_line
Edited revert of https://codereview.chromium.org/1085013003
TBR=
Review URL: https://codereview.chromium.org/1078413003
Diffstat (limited to 'src/core/SkBlitter_ARGB32.cpp')
-rw-r--r-- | src/core/SkBlitter_ARGB32.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/core/SkBlitter_ARGB32.cpp b/src/core/SkBlitter_ARGB32.cpp index bbad6c7926..caf85ddc1f 100644 --- a/src/core/SkBlitter_ARGB32.cpp +++ b/src/core/SkBlitter_ARGB32.cpp @@ -106,6 +106,25 @@ void SkARGB32_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], } } +#ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 +void SkARGB32_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) + + device[0] = SkBlendARGB32(fPMColor, device[0], a0); + device[1] = SkBlendARGB32(fPMColor, device[1], a1); +} + +void SkARGB32_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) + + device[0] = SkBlendARGB32(fPMColor, device[0], a0); + device = (uint32_t*)((char*)device + fDevice.rowBytes()); + device[0] = SkBlendARGB32(fPMColor, device[0], a1); +} +#endif + ////////////////////////////////////////////////////////////////////////////////////// #define solid_8_pixels(mask, dst, color) \ @@ -180,6 +199,25 @@ void SkARGB32_Opaque_Blitter::blitMask(const SkMask& mask, } } +#ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 +void SkARGB32_Opaque_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) + + device[0] = SkFastFourByteInterp(fPMColor, device[0], a0); + device[1] = SkFastFourByteInterp(fPMColor, device[1], a1); +} + +void SkARGB32_Opaque_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) + + device[0] = SkFastFourByteInterp(fPMColor, device[0], a0); + device = (uint32_t*)((char*)device + fDevice.rowBytes()); + device[0] = SkFastFourByteInterp(fPMColor, device[0], a1); +} +#endif + /////////////////////////////////////////////////////////////////////////////// void SkARGB32_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { @@ -256,6 +294,25 @@ void SkARGB32_Black_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], } } +#ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 +void SkARGB32_Black_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) + + device[0] = (a0 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a0); + device[1] = (a1 << SK_A32_SHIFT) + SkAlphaMulQ(device[1], 256 - a1); +} + +void SkARGB32_Black_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) + + device[0] = (a0 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a0); + device = (uint32_t*)((char*)device + fDevice.rowBytes()); + device[0] = (a1 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a1); +} +#endif + /////////////////////////////////////////////////////////////////////////////// // Special version of SkBlitRow::Factory32 that knows we're in kSrc_Mode, |