1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2006 The Android Open Source Project 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "include/private/SkTo.h" 9cb93a386Sopenharmony_ci#include "src/core/SkAntiRun.h" 10cb93a386Sopenharmony_ci#include "src/core/SkOpts.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_civoid SkAlphaRuns::reset(int width) { 13cb93a386Sopenharmony_ci SkASSERT(width > 0); 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci#ifdef SK_DEBUG 16cb93a386Sopenharmony_ci sk_memset16((uint16_t*)fRuns, (uint16_t)(-42), width); 17cb93a386Sopenharmony_ci#endif 18cb93a386Sopenharmony_ci fRuns[0] = SkToS16(width); 19cb93a386Sopenharmony_ci fRuns[width] = 0; 20cb93a386Sopenharmony_ci fAlpha[0] = 0; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci SkDEBUGCODE(fWidth = width;) 23cb93a386Sopenharmony_ci SkDEBUGCODE(this->validate();) 24cb93a386Sopenharmony_ci} 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ci#ifdef SK_DEBUG 27cb93a386Sopenharmony_ci void SkAlphaRuns::assertValid(int y, int maxStep) const { 28cb93a386Sopenharmony_ci int max = (y + 1) * maxStep - (y == maxStep - 1); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci const int16_t* runs = fRuns; 31cb93a386Sopenharmony_ci const uint8_t* alpha = fAlpha; 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci while (*runs) { 34cb93a386Sopenharmony_ci SkASSERT(*alpha <= max); 35cb93a386Sopenharmony_ci alpha += *runs; 36cb93a386Sopenharmony_ci runs += *runs; 37cb93a386Sopenharmony_ci } 38cb93a386Sopenharmony_ci } 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci void SkAlphaRuns::dump() const { 41cb93a386Sopenharmony_ci const int16_t* runs = fRuns; 42cb93a386Sopenharmony_ci const uint8_t* alpha = fAlpha; 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci SkDebugf("Runs"); 45cb93a386Sopenharmony_ci while (*runs) { 46cb93a386Sopenharmony_ci int n = *runs; 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci SkDebugf(" %02x", *alpha); 49cb93a386Sopenharmony_ci if (n > 1) { 50cb93a386Sopenharmony_ci SkDebugf(",%d", n); 51cb93a386Sopenharmony_ci } 52cb93a386Sopenharmony_ci alpha += n; 53cb93a386Sopenharmony_ci runs += n; 54cb93a386Sopenharmony_ci } 55cb93a386Sopenharmony_ci SkDebugf("\n"); 56cb93a386Sopenharmony_ci } 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_ci void SkAlphaRuns::validate() const { 59cb93a386Sopenharmony_ci SkASSERT(fWidth > 0); 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci int count = 0; 62cb93a386Sopenharmony_ci const int16_t* runs = fRuns; 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ci while (*runs) { 65cb93a386Sopenharmony_ci SkASSERT(*runs > 0); 66cb93a386Sopenharmony_ci count += *runs; 67cb93a386Sopenharmony_ci SkASSERT(count <= fWidth); 68cb93a386Sopenharmony_ci runs += *runs; 69cb93a386Sopenharmony_ci } 70cb93a386Sopenharmony_ci SkASSERT(count == fWidth); 71cb93a386Sopenharmony_ci } 72cb93a386Sopenharmony_ci#endif 73