Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: src/core/SkAlphaRuns.cpp

Issue 83243005: Inline performance-critical methods on SkAlphaRuns (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/core/SkAntiRun.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkAlphaRuns.cpp
diff --git a/src/core/SkAlphaRuns.cpp b/src/core/SkAlphaRuns.cpp
index 1b0415814f6fbc156a07986bb01545fbc7842485..37b1a5705ce126f63ed14eab55395b08ca092ec2 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);
« no previous file with comments | « no previous file | src/core/SkAntiRun.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698