diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-19 11:42:34 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-19 11:42:34 +0000 |
commit | fa4dc2c4cba94aec91142a24b4dc26c1dde56023 (patch) | |
tree | 2c069c95748b033349946195c3ddc17e44e67ee1 | |
parent | 2002d881e80e0d56440ed2fc4da5f90bf2f0e0fb (diff) |
SkPaint: eliminate some dead bytes in 64-bit build.
+ memcpy-based copy constructor was hiding this gap -> manual copy constructor.
+ Split tests for finer-grained failures.
BUG=skia:
R=reed@google.com, mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/203203003
git-svn-id: http://skia.googlecode.com/svn/trunk@13856 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | include/core/SkPaint.h | 12 | ||||
-rw-r--r-- | src/core/SkPaint.cpp | 35 | ||||
-rw-r--r-- | tests/PaintTest.cpp | 31 |
3 files changed, 37 insertions, 41 deletions
diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h index e86d01195c..7a647f0ea2 100644 --- a/include/core/SkPaint.h +++ b/include/core/SkPaint.h @@ -1046,10 +1046,6 @@ public: private: SkTypeface* fTypeface; - SkScalar fTextSize; - SkScalar fTextScaleX; - SkScalar fTextSkewX; - SkPathEffect* fPathEffect; SkShader* fShader; SkXfermode* fXfermode; @@ -1060,10 +1056,12 @@ private: SkImageFilter* fImageFilter; SkAnnotation* fAnnotation; + SkScalar fTextSize; + SkScalar fTextScaleX; + SkScalar fTextSkewX; SkColor fColor; SkScalar fWidth; SkScalar fMiterLimit; - union { struct { // all of these bitfields should add up to 32 @@ -1078,11 +1076,11 @@ private: }; uint32_t fBitfields; }; + uint32_t fDirtyBits; + uint32_t getBitfields() const { return fBitfields; } void setBitfields(uint32_t bitfields); - uint32_t fDirtyBits; - SkDrawCacheProc getDrawCacheProc() const; SkMeasureCacheProc getMeasureCacheProc(TextBufferDirection dir, bool needFullMetrics) const; diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp index 2449ed6793..c91ada9a3c 100644 --- a/src/core/SkPaint.cpp +++ b/src/core/SkPaint.cpp @@ -108,18 +108,29 @@ SkPaint::SkPaint() { } SkPaint::SkPaint(const SkPaint& src) { - memcpy(this, &src, sizeof(src)); - - SkSafeRef(fTypeface); - SkSafeRef(fPathEffect); - SkSafeRef(fShader); - SkSafeRef(fXfermode); - SkSafeRef(fMaskFilter); - SkSafeRef(fColorFilter); - SkSafeRef(fRasterizer); - SkSafeRef(fLooper); - SkSafeRef(fImageFilter); - SkSafeRef(fAnnotation); +#define COPY(field) field = src.field +#define REF_COPY(field) field = SkSafeRef(src.field) + REF_COPY(fTypeface); + REF_COPY(fPathEffect); + REF_COPY(fShader); + REF_COPY(fXfermode); + REF_COPY(fMaskFilter); + REF_COPY(fColorFilter); + REF_COPY(fRasterizer); + REF_COPY(fLooper); + REF_COPY(fImageFilter); + REF_COPY(fAnnotation); + + COPY(fTextSize); + COPY(fTextScaleX); + COPY(fTextSkewX); + COPY(fColor); + COPY(fWidth); + COPY(fMiterLimit); + COPY(fBitfields); + COPY(fDirtyBits); +#undef COPY +#undef REF_COPY #ifdef SK_BUILD_FOR_ANDROID new (&fPaintOptionsAndroid) SkPaintOptionsAndroid(src.fPaintOptionsAndroid); diff --git a/tests/PaintTest.cpp b/tests/PaintTest.cpp index e7954b9136..f28dbe40e1 100644 --- a/tests/PaintTest.cpp +++ b/tests/PaintTest.cpp @@ -59,7 +59,11 @@ static int find_first_zero(const uint16_t glyphs[], int count) { return count; } -static void test_cmap(skiatest::Reporter* reporter) { +DEF_TEST(Paint_cmap, reporter) { + // need to implement charsToGlyphs on other backends (e.g. linux, win) + // before we can run this tests everywhere + return; + static const int NGLYPHS = 64; SkUnichar src[NGLYPHS]; @@ -113,7 +117,7 @@ static void test_cmap(skiatest::Reporter* reporter) { } // temparary api for bicubic, just be sure we can set/clear it -static void test_filterlevel(skiatest::Reporter* reporter) { +DEF_TEST(Paint_filterlevel, reporter) { SkPaint p0, p1; REPORTER_ASSERT(reporter, @@ -137,7 +141,7 @@ static void test_filterlevel(skiatest::Reporter* reporter) { } } -static void test_copy(skiatest::Reporter* reporter) { +DEF_TEST(Paint_copy, reporter) { SkPaint paint; // set a few member variables paint.setStyle(SkPaint::kStrokeAndFill_Style); @@ -192,7 +196,7 @@ static void test_copy(skiatest::Reporter* reporter) { // found and fixed for webkit: mishandling when we hit recursion limit on // mostly degenerate cubic flatness test -static void regression_cubic(skiatest::Reporter* reporter) { +DEF_TEST(Paint_regression_cubic, reporter) { SkPath path, stroke; SkPaint paint; @@ -225,7 +229,7 @@ static void regression_cubic(skiatest::Reporter* reporter) { } // found and fixed for android: not initializing rect for string's of length 0 -static void regression_measureText(skiatest::Reporter* reporter) { +DEF_TEST(Paint_regression_measureText, reporter) { SkPaint paint; paint.setTextSize(12.0f); @@ -238,23 +242,6 @@ static void regression_measureText(skiatest::Reporter* reporter) { REPORTER_ASSERT(reporter, r.isEmpty()); } -DEF_TEST(Paint, reporter) { - // TODO add general paint tests - test_copy(reporter); - - // regression tests - regression_cubic(reporter); - regression_measureText(reporter); - - test_filterlevel(reporter); - - // need to implement charsToGlyphs on other backends (e.g. linux, win) - // before we can run this tests everywhere - if (false) { - test_cmap(reporter); - } -} - #define ASSERT(expr) REPORTER_ASSERT(r, expr) DEF_TEST(Paint_FlatteningTraits, r) { |