Revert of SkPaint: eliminate some dead bytes in 64-bit build. (https://codereview.chromium.org/203203003/)
Reason for revert: Causing RunTest failures on Android. Original issue's description: > 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: > > Committed: http://code.google.com/p/skia/source/detail?r=13856 R=reed@google.com, mtklein@google.com, mtklein@chromium.org TBR=mtklein@chromium.org, mtklein@google.com, reed@google.com NOTREECHECKS=true NOTRY=true BUG=skia: Author: jcgregorio@google.com Review URL: https://codereview.chromium.org/204543002 git-svn-id: http://skia.googlecode.com/svn/trunk@13858 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
2aae29832a
commit
fffb2cd463
@ -1046,6 +1046,10 @@ public:
|
||||
|
||||
private:
|
||||
SkTypeface* fTypeface;
|
||||
SkScalar fTextSize;
|
||||
SkScalar fTextScaleX;
|
||||
SkScalar fTextSkewX;
|
||||
|
||||
SkPathEffect* fPathEffect;
|
||||
SkShader* fShader;
|
||||
SkXfermode* fXfermode;
|
||||
@ -1056,12 +1060,10 @@ 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
|
||||
@ -1076,11 +1078,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;
|
||||
|
@ -108,29 +108,18 @@ SkPaint::SkPaint() {
|
||||
}
|
||||
|
||||
SkPaint::SkPaint(const SkPaint& src) {
|
||||
#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);
|
||||
memcpy(this, &src, sizeof(src));
|
||||
|
||||
COPY(fTextSize);
|
||||
COPY(fTextScaleX);
|
||||
COPY(fTextSkewX);
|
||||
COPY(fColor);
|
||||
COPY(fWidth);
|
||||
COPY(fMiterLimit);
|
||||
COPY(fBitfields);
|
||||
COPY(fDirtyBits);
|
||||
#undef COPY
|
||||
#undef REF_COPY
|
||||
SkSafeRef(fTypeface);
|
||||
SkSafeRef(fPathEffect);
|
||||
SkSafeRef(fShader);
|
||||
SkSafeRef(fXfermode);
|
||||
SkSafeRef(fMaskFilter);
|
||||
SkSafeRef(fColorFilter);
|
||||
SkSafeRef(fRasterizer);
|
||||
SkSafeRef(fLooper);
|
||||
SkSafeRef(fImageFilter);
|
||||
SkSafeRef(fAnnotation);
|
||||
|
||||
#ifdef SK_BUILD_FOR_ANDROID
|
||||
new (&fPaintOptionsAndroid) SkPaintOptionsAndroid(src.fPaintOptionsAndroid);
|
||||
|
@ -59,11 +59,7 @@ static int find_first_zero(const uint16_t glyphs[], int count) {
|
||||
return count;
|
||||
}
|
||||
|
||||
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 void test_cmap(skiatest::Reporter* reporter) {
|
||||
static const int NGLYPHS = 64;
|
||||
|
||||
SkUnichar src[NGLYPHS];
|
||||
@ -117,7 +113,7 @@ DEF_TEST(Paint_cmap, reporter) {
|
||||
}
|
||||
|
||||
// temparary api for bicubic, just be sure we can set/clear it
|
||||
DEF_TEST(Paint_filterlevel, reporter) {
|
||||
static void test_filterlevel(skiatest::Reporter* reporter) {
|
||||
SkPaint p0, p1;
|
||||
|
||||
REPORTER_ASSERT(reporter,
|
||||
@ -141,7 +137,7 @@ DEF_TEST(Paint_filterlevel, reporter) {
|
||||
}
|
||||
}
|
||||
|
||||
DEF_TEST(Paint_copy, reporter) {
|
||||
static void test_copy(skiatest::Reporter* reporter) {
|
||||
SkPaint paint;
|
||||
// set a few member variables
|
||||
paint.setStyle(SkPaint::kStrokeAndFill_Style);
|
||||
@ -196,7 +192,7 @@ DEF_TEST(Paint_copy, reporter) {
|
||||
|
||||
// found and fixed for webkit: mishandling when we hit recursion limit on
|
||||
// mostly degenerate cubic flatness test
|
||||
DEF_TEST(Paint_regression_cubic, reporter) {
|
||||
static void regression_cubic(skiatest::Reporter* reporter) {
|
||||
SkPath path, stroke;
|
||||
SkPaint paint;
|
||||
|
||||
@ -229,7 +225,7 @@ DEF_TEST(Paint_regression_cubic, reporter) {
|
||||
}
|
||||
|
||||
// found and fixed for android: not initializing rect for string's of length 0
|
||||
DEF_TEST(Paint_regression_measureText, reporter) {
|
||||
static void regression_measureText(skiatest::Reporter* reporter) {
|
||||
|
||||
SkPaint paint;
|
||||
paint.setTextSize(12.0f);
|
||||
@ -242,6 +238,23 @@ DEF_TEST(Paint_regression_measureText, 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) {
|
||||
|
Loading…
Reference in New Issue
Block a user