diff options
-rw-r--r-- | Android.mk | 4 | ||||
-rw-r--r-- | include/core/SkDraw.h | 2 | ||||
-rw-r--r-- | include/core/SkPaint.h | 27 | ||||
-rw-r--r-- | include/core/SkRect.h | 11 | ||||
-rw-r--r-- | src/core/SkDraw.cpp | 18 | ||||
-rw-r--r-- | src/core/SkPaint.cpp | 114 |
6 files changed, 12 insertions, 164 deletions
@@ -322,10 +322,6 @@ LOCAL_STATIC_LIBRARIES := \ libwebp-decode \ libwebp-encode -ifeq ($(TARGET_USE_KRAIT_BIONIC_OPTIMIZATION),true) - LOCAL_CFLAGS += -DKRAIT_OPTIMIZATION -endif - LOCAL_C_INCLUDES += \ $(LOCAL_PATH)/src/core \ $(LOCAL_PATH)/include/core \ diff --git a/include/core/SkDraw.h b/include/core/SkDraw.h index ae323f2..8c659c2 100644 --- a/include/core/SkDraw.h +++ b/include/core/SkDraw.h @@ -104,8 +104,6 @@ private: void drawBitmapAsMask(const SkBitmap&, const SkPaint&) const; public: - //Be noted to update SkDraw::SkDraw() constructor code when struture is - //change! const SkBitmap* fBitmap; // required const SkMatrix* fMatrix; // required const SkRegion* fClip; // DEPRECATED diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h index 76ec7fc..30ff663 100644 --- a/include/core/SkPaint.h +++ b/include/core/SkPaint.h @@ -15,8 +15,6 @@ #include "SkXfermode.h" #include "SkString.h" -#include <pthread.h> - class SkAutoGlyphCache; class SkColorFilter; class SkDescriptor; @@ -39,25 +37,6 @@ typedef const SkGlyph& (*SkDrawCacheProc)(SkGlyphCache*, const char**, typedef const SkGlyph& (*SkMeasureCacheProc)(SkGlyphCache*, const char**); -class SkTextLocale { - public: - SkTextLocale(); - - SkString s; - SkTextLocale *next; -}; - -class SkTextLocales { -public: - SkTextLocales(); - SkTextLocale * setTextLocale( const SkString& locale ); - SkString& getTextLocale( SkTextLocale * t ); - -private: - SkTextLocale * LocaleArray; - pthread_mutex_t update_mutex; -}; - /** \class SkPaint The SkPaint class holds the style and color information about how to draw @@ -680,7 +659,7 @@ public: /** Return the paint's text locale value. @return the paint's text locale value used for drawing text. */ - const SkString& getTextLocale(); + const SkString& getTextLocale() const { return fTextLocale; } /** Set the paint's text locale. @param locale set the paint's locale value for drawing text. @@ -901,8 +880,6 @@ public: bool nothingToDraw() const; private: - //Be noted to update SkPaint::SkPaint(const SkPaint& src) copy - //constructor when struture is changed for fast path! SkTypeface* fTypeface; SkScalar fTextSize; SkScalar fTextScaleX; @@ -928,7 +905,7 @@ private: unsigned fTextEncoding : 2; // 3 values unsigned fHinting : 2; #ifdef SK_BUILD_FOR_ANDROID - SkTextLocale* fpTextLocale; + SkString fTextLocale; #endif SkDrawCacheProc getDrawCacheProc() const; diff --git a/include/core/SkRect.h b/include/core/SkRect.h index 64568c9..65e7611 100644 --- a/include/core/SkRect.h +++ b/include/core/SkRect.h @@ -347,16 +347,6 @@ struct SK_API SkRect { */ bool isFinite() const { #ifdef SK_SCALAR_IS_FLOAT -#if defined(KRAIT_OPTIMIZATION) - if (SkScalarIsFinite(fBottom) && - SkScalarIsFinite(fRight) && - SkScalarIsFinite(fLeft) && - SkScalarIsFinite(fTop)) { - return true; - } else { - return false; - } -#else // x * 0 will be NaN iff x is infinity or NaN. // a + b will be NaN iff either a or b is NaN. float value = fLeft * 0 + fTop * 0 + fRight * 0 + fBottom * 0; @@ -364,7 +354,6 @@ struct SK_API SkRect { // value is either NaN or it is finite (zero). // value==value will be true iff value is not NaN return value == value; -#endif #else // use bit-or for speed, since we don't care about short-circuting the // tests, and we expect the common case will be that we need to check all. diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 19337f7..23a6d59 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -114,23 +114,7 @@ private: /////////////////////////////////////////////////////////////////////////////// SkDraw::SkDraw() { - //Be noted to update this field when struture is changed! - if( sizeof(*this) == 40 ){ - fBitmap = NULL; - fMatrix = NULL; - fClip = NULL; - fRC = NULL; - - fClipStack = NULL; - fDevice = NULL; - fBounder = NULL; - fProcs = NULL; - - fMVMatrix = NULL; - fExtMatrix = NULL; - } else { - sk_bzero(this, sizeof(*this)); - } + sk_bzero(this, sizeof(*this)); } SkDraw::SkDraw(const SkDraw& src) { diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp index ce5cfe4..e1932a7 100644 --- a/src/core/SkPaint.cpp +++ b/src/core/SkPaint.cpp @@ -27,75 +27,6 @@ #include "SkGlyphCache.h" #include "SkPaintDefaults.h" -#include <pthread.h> - -SkTextLocale::SkTextLocale(){ - new(&s) SkString(); - next = NULL; -} - -static class SkTextLocales gTextLocales; - -SkTextLocales::SkTextLocales(){ - LocaleArray = NULL; - update_mutex = PTHREAD_MUTEX_INITIALIZER; -} - -SkTextLocale * SkTextLocales::setTextLocale( const SkString& locale ){ -start: - if( !LocaleArray ){ - pthread_mutex_lock( &update_mutex ); - if( !LocaleArray ){ - LocaleArray = new SkTextLocale(); - LocaleArray->s = locale; - pthread_mutex_unlock( &update_mutex ); - return LocaleArray; - } else { - pthread_mutex_unlock( &update_mutex ); - goto start; - } - - } - - SkTextLocale * l = LocaleArray; - SkTextLocale * prev = LocaleArray; - while( l ){ - if( l->s == locale ){ - return l; - } - prev = l; - l = l->next; - } - - pthread_mutex_lock( &update_mutex ); - - SkDebugf("new locale %s", locale.c_str()); - //Within mutex, restart from beginning - l = LocaleArray; - prev = LocaleArray; - while( l ){ - if( l->s == locale ){ - pthread_mutex_unlock( &update_mutex ); - return l; - } - prev = l; - l = l->next; - } - l = new SkTextLocale(); - prev->next = l; - l->s = locale; - - pthread_mutex_unlock( &update_mutex ); - - return l; -} - - -SkString& SkTextLocales::getTextLocale( SkTextLocale * t ){ - return t->s; -} - - // define this to get a printf for out-of-range parameter in setters // e.g. setTextSize(-1) //#define SK_REPORT_API_RANGE_CHECK @@ -140,40 +71,13 @@ SkPaint::SkPaint() { fTextEncoding = kUTF8_TextEncoding; fHinting = SkPaintDefaults_Hinting; #ifdef SK_BUILD_FOR_ANDROID + new(&fTextLocale) SkString(); fGenerationID = 0; #endif } -extern "C" { - //Hard coded copy with size of 72 bytes. This will avoid the extra cost - //of size checking branching in generic memcpy code - inline void memcpy_72(int* src, int* dst) { - __asm__ volatile ("cpy r4, %1 \n" - "cpy r5, %0 \n" - "ldm r4!, {r0-r3} \n" - "cpy r12, r5 \n" - "stm r12!,{r0-r3} \n" - "ldm r4!, {r0-r3} \n" - "stm r12!,{r0-r3} \n" - "ldm r4!, {r0-r3} \n" - "stm r12!,{r0-r3} \n" - "ldm r4!, {r0-r3} \n" - "stm r12!,{r0-r3} \n" - "ldm r4, {r0-r1} \n" - "stm r12, {r0-r1} \n" - : - : "r" (src), "r" (dst) - : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r12"); - } -} - SkPaint::SkPaint(const SkPaint& src) { - //Be noted to update this field when struture is changed! - if(sizeof(src) == 72){ - memcpy_72((int*)this, (int*)&src); - } else { - memcpy((int*)this, (int*)&src, sizeof(src)); - } + memcpy(this, &src, sizeof(src)); SkSafeRef(fTypeface); SkSafeRef(fPathEffect); @@ -184,6 +88,9 @@ SkPaint::SkPaint(const SkPaint& src) { SkSafeRef(fRasterizer); SkSafeRef(fLooper); SkSafeRef(fImageFilter); +#ifdef SK_BUILD_FOR_ANDROID + new(&fTextLocale) SkString(src.fTextLocale); +#endif } SkPaint::~SkPaint() { @@ -222,10 +129,12 @@ SkPaint& SkPaint::operator=(const SkPaint& src) { SkSafeUnref(fImageFilter); #ifdef SK_BUILD_FOR_ANDROID + fTextLocale.~SkString(); uint32_t oldGenerationID = fGenerationID; #endif memcpy(this, &src, sizeof(src)); #ifdef SK_BUILD_FOR_ANDROID + new(&fTextLocale) SkString(src.fTextLocale); fGenerationID = oldGenerationID + 1; #endif @@ -458,16 +367,11 @@ void SkPaint::setTextEncoding(TextEncoding encoding) { #ifdef SK_BUILD_FOR_ANDROID void SkPaint::setTextLocale(const SkString& locale) { - SkTextLocale* oldpTextLocale = fpTextLocale; - fpTextLocale = gTextLocales.setTextLocale(locale); - if (oldpTextLocale != fpTextLocale) { + if(!fTextLocale.equals(locale)) { + fTextLocale.set(locale); GEN_ID_INC; } } - -const SkString& SkPaint::getTextLocale(){ - return fpTextLocale->s; -} #endif /////////////////////////////////////////////////////////////////////////////// |