aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkAlphaRuns.cpp
diff options
context:
space:
mode:
authorGravatar mtklein@google.com <mtklein@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-11-22 21:25:55 +0000
committerGravatar mtklein@google.com <mtklein@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-11-22 21:25:55 +0000
commit9b8c036eda7ca8dde40e76dcd9378b3ddd629c8b (patch)
tree6a31440fd51eb35ab27ea1e23d424d842725cc58 /src/core/SkAlphaRuns.cpp
parent6e223af090c6f17e3bcd48f049e592ca30a95c5c (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.cpp105
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);