diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/core/SkAlphaRuns.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/core/SkAlphaRuns.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,73 @@ + +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#include "SkAntiRun.h" +#include "SkUtils.h" + +void SkAlphaRuns::reset(int width) { + SkASSERT(width > 0); + +#ifdef SK_DEBUG + sk_memset16((uint16_t*)fRuns, (uint16_t)(-42), width); +#endif + fRuns[0] = SkToS16(width); + fRuns[width] = 0; + fAlpha[0] = 0; + + SkDEBUGCODE(fWidth = width;) + SkDEBUGCODE(this->validate();) +} + +#ifdef SK_DEBUG + void SkAlphaRuns::assertValid(int y, int maxStep) const { + int max = (y + 1) * maxStep - (y == maxStep - 1); + + const int16_t* runs = fRuns; + const uint8_t* alpha = fAlpha; + + while (*runs) { + SkASSERT(*alpha <= max); + alpha += *runs; + runs += *runs; + } + } + + void SkAlphaRuns::dump() const { + const int16_t* runs = fRuns; + const uint8_t* alpha = fAlpha; + + SkDebugf("Runs"); + while (*runs) { + int n = *runs; + + SkDebugf(" %02x", *alpha); + if (n > 1) { + SkDebugf(",%d", n); + } + alpha += n; + runs += n; + } + SkDebugf("\n"); + } + + void SkAlphaRuns::validate() const { + SkASSERT(fWidth > 0); + + int count = 0; + const int16_t* runs = fRuns; + + while (*runs) { + SkASSERT(*runs > 0); + count += *runs; + SkASSERT(count <= fWidth); + runs += *runs; + } + SkASSERT(count == fWidth); + } +#endif