diff options
author | mtklein@google.com <mtklein@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-11-22 21:25:55 +0000 |
---|---|---|
committer | mtklein@google.com <mtklein@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-11-22 21:25:55 +0000 |
commit | 9b8c036eda7ca8dde40e76dcd9378b3ddd629c8b (patch) | |
tree | 6a31440fd51eb35ab27ea1e23d424d842725cc58 /src/core/SkAlphaRuns.cpp | |
parent | 6e223af090c6f17e3bcd48f049e592ca30a95c5c (diff) |
Inline performance-critical methods on SkAlphaRuns.
Clang needs to be forced to inline add, so we do that.
GCC on desktop
bench conf time old new diff diffP
draw_coverage_false 8888 c 236.08 212.01 +24.07 +10.2%
draw_coverage_true 8888 c 125.67 104.49 +21.18 +16.9%
GCC on N5
bench conf time old new diff diffP
draw_coverage_false 8888 c 566.33 529.96 +36.37 +6.4%
draw_coverage_true 8888 c 315.39 293.85 +21.54 +6.8%
Clang on desktop
bench conf time old new diff diffP
draw_coverage_false 8888 c 337.37 330.63 +6.74 +2.0%
draw_coverage_true 8888 c 126.87 119.32 +7.55 +6.0%
BUG=
R=reed@google.com
Review URL: https://codereview.chromium.org/83243005
git-svn-id: http://skia.googlecode.com/svn/trunk@12370 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkAlphaRuns.cpp')
-rw-r--r-- | src/core/SkAlphaRuns.cpp | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/src/core/SkAlphaRuns.cpp b/src/core/SkAlphaRuns.cpp index 1b0415814f..37b1a5705c 100644 --- a/src/core/SkAlphaRuns.cpp +++ b/src/core/SkAlphaRuns.cpp @@ -24,111 +24,6 @@ void SkAlphaRuns::reset(int width) { SkDEBUGCODE(this->validate();) } -void SkAlphaRuns::Break(int16_t runs[], uint8_t alpha[], int x, int count) { - SkASSERT(count > 0 && x >= 0); - -// SkAlphaRuns::BreakAt(runs, alpha, x); -// SkAlphaRuns::BreakAt(&runs[x], &alpha[x], count); - - int16_t* next_runs = runs + x; - uint8_t* next_alpha = alpha + x; - - while (x > 0) { - int n = runs[0]; - SkASSERT(n > 0); - - if (x < n) { - alpha[x] = alpha[0]; - runs[0] = SkToS16(x); - runs[x] = SkToS16(n - x); - break; - } - runs += n; - alpha += n; - x -= n; - } - - runs = next_runs; - alpha = next_alpha; - x = count; - - for (;;) { - int n = runs[0]; - SkASSERT(n > 0); - - if (x < n) { - alpha[x] = alpha[0]; - runs[0] = SkToS16(x); - runs[x] = SkToS16(n - x); - break; - } - x -= n; - if (x <= 0) { - break; - } - runs += n; - alpha += n; - } -} - -int SkAlphaRuns::add(int x, U8CPU startAlpha, int middleCount, U8CPU stopAlpha, - U8CPU maxValue, int offsetX) { - SkASSERT(middleCount >= 0); - SkASSERT(x >= 0 && x + (startAlpha != 0) + middleCount + (stopAlpha != 0) <= fWidth); - - SkASSERT(fRuns[offsetX] >= 0); - - int16_t* runs = fRuns + offsetX; - uint8_t* alpha = fAlpha + offsetX; - uint8_t* lastAlpha = alpha; - x -= offsetX; - - if (startAlpha) { - SkAlphaRuns::Break(runs, alpha, x, 1); - /* I should be able to just add alpha[x] + startAlpha. - However, if the trailing edge of the previous span and the leading - edge of the current span round to the same super-sampled x value, - I might overflow to 256 with this add, hence the funny subtract (crud). - */ - unsigned tmp = alpha[x] + startAlpha; - SkASSERT(tmp <= 256); - alpha[x] = SkToU8(tmp - (tmp >> 8)); // was (tmp >> 7), but that seems wrong if we're trying to catch 256 - - runs += x + 1; - alpha += x + 1; - x = 0; - lastAlpha += x; // we don't want the +1 - SkDEBUGCODE(this->validate();) - } - - if (middleCount) { - SkAlphaRuns::Break(runs, alpha, x, middleCount); - alpha += x; - runs += x; - x = 0; - do { - alpha[0] = SkToU8(alpha[0] + maxValue); - int n = runs[0]; - SkASSERT(n <= middleCount); - alpha += n; - runs += n; - middleCount -= n; - } while (middleCount > 0); - SkDEBUGCODE(this->validate();) - lastAlpha = alpha; - } - - if (stopAlpha) { - SkAlphaRuns::Break(runs, alpha, x, 1); - alpha += x; - alpha[0] = SkToU8(alpha[0] + stopAlpha); - SkDEBUGCODE(this->validate();) - lastAlpha = alpha; - } - - return SkToS32(lastAlpha - fAlpha); // new offsetX -} - #ifdef SK_DEBUG void SkAlphaRuns::assertValid(int y, int maxStep) const { int max = (y + 1) * maxStep - (y == maxStep - 1); |