Commit b3a7f2e0 authored by tomhudson's avatar tomhudson Committed by Commit bot

Turn on more of the platform_canvas_unittests

Most of the TranslateLayer test can pass even on AURA machines; only
one clause needs to be #ifdef'd out on MACOS *and* AURA.

Also documents the surpising DstATop xfermode use in MakeOpaque,
and changes that function from OS_WIN-only to running on every platform,
where it should be a cheap noop.

Followup: other parts of the Chrome codebase have their own
MakeOpaque implementations; we can probably share this through
skia_utils.

R=fmalita@chromium.org
BUG=154358

Review-Url: https://codereview.chromium.org/2340823002
Cr-Commit-Position: refs/heads/master@{#418607}
parent b4c242bc
...@@ -38,7 +38,12 @@ namespace skia { ...@@ -38,7 +38,12 @@ namespace skia {
namespace { namespace {
#if defined(OS_WIN) // Uses DstATop transfer mode with SK_ColorBLACK 0xff000000:
// the destination pixel will end up with 0xff alpha
// if it was transparent black (0x0) before the blend,
// it will be set to opaque black (0xff000000).
// if it has nonzero alpha before the blend,
// it will retain its color.
void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) { void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) {
if (width <= 0 || height <= 0) if (width <= 0 || height <= 0)
return; return;
...@@ -51,7 +56,6 @@ void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) { ...@@ -51,7 +56,6 @@ void MakeOpaque(SkCanvas* canvas, int x, int y, int width, int height) {
paint.setXfermodeMode(SkXfermode::kDstATop_Mode); paint.setXfermodeMode(SkXfermode::kDstATop_Mode);
canvas->drawRect(rect, paint); canvas->drawRect(rect, paint);
} }
#endif
bool IsOfColor(const SkBitmap& bitmap, int x, int y, uint32_t color) { bool IsOfColor(const SkBitmap& bitmap, int x, int y, uint32_t color) {
// For masking out the alpha values. // For masking out the alpha values.
...@@ -276,9 +280,7 @@ TEST(PlatformCanvas, FillLayer) { ...@@ -276,9 +280,7 @@ TEST(PlatformCanvas, FillLayer) {
{ {
LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH); LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH);
DrawNativeRect(*canvas, 0, 0, 100, 100); DrawNativeRect(*canvas, 0, 0, 100, 100);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), 0, 0, 100, 100); MakeOpaque(canvas.get(), 0, 0, 100, 100);
#endif
} }
EXPECT_TRUE(VerifyBlackRect(*canvas, kLayerX, kLayerY, kLayerW, kLayerH)); EXPECT_TRUE(VerifyBlackRect(*canvas, kLayerX, kLayerY, kLayerW, kLayerH));
...@@ -287,9 +289,7 @@ TEST(PlatformCanvas, FillLayer) { ...@@ -287,9 +289,7 @@ TEST(PlatformCanvas, FillLayer) {
{ {
LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH); LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH);
DrawNativeRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH); DrawNativeRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH); MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH);
#endif
} }
EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH)); EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH));
...@@ -300,9 +300,7 @@ TEST(PlatformCanvas, FillLayer) { ...@@ -300,9 +300,7 @@ TEST(PlatformCanvas, FillLayer) {
canvas->save(); canvas->save();
AddClip(*canvas, kInnerX, kInnerY, kInnerW, kInnerH); AddClip(*canvas, kInnerX, kInnerY, kInnerW, kInnerH);
DrawNativeRect(*canvas, 0, 0, 100, 100); DrawNativeRect(*canvas, 0, 0, 100, 100);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH); MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH);
#endif
canvas->restore(); canvas->restore();
} }
EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH)); EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH));
...@@ -314,16 +312,12 @@ TEST(PlatformCanvas, FillLayer) { ...@@ -314,16 +312,12 @@ TEST(PlatformCanvas, FillLayer) {
{ {
LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH); LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH);
DrawNativeRect(*canvas, 0, 0, 100, 100); DrawNativeRect(*canvas, 0, 0, 100, 100);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), 0, 0, 100, 100); MakeOpaque(canvas.get(), 0, 0, 100, 100);
#endif
} }
canvas->restore(); canvas->restore();
EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH)); EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH));
} }
#if !defined(USE_AURA) // http://crbug.com/154358
// Test that translation + make layer works properly. // Test that translation + make layer works properly.
TEST(PlatformCanvas, TranslateLayer) { TEST(PlatformCanvas, TranslateLayer) {
// Create the canvas initialized to opaque white. // Create the canvas initialized to opaque white.
...@@ -337,9 +331,7 @@ TEST(PlatformCanvas, TranslateLayer) { ...@@ -337,9 +331,7 @@ TEST(PlatformCanvas, TranslateLayer) {
{ {
LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH); LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH);
DrawNativeRect(*canvas, 0, 0, 100, 100); DrawNativeRect(*canvas, 0, 0, 100, 100);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), 0, 0, 100, 100); MakeOpaque(canvas.get(), 0, 0, 100, 100);
#endif
} }
canvas->restore(); canvas->restore();
EXPECT_TRUE(VerifyBlackRect(*canvas, kLayerX + 1, kLayerY + 1, EXPECT_TRUE(VerifyBlackRect(*canvas, kLayerX + 1, kLayerY + 1,
...@@ -352,9 +344,7 @@ TEST(PlatformCanvas, TranslateLayer) { ...@@ -352,9 +344,7 @@ TEST(PlatformCanvas, TranslateLayer) {
{ {
LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH); LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH);
DrawNativeRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH); DrawNativeRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH); MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH);
#endif
} }
canvas->restore(); canvas->restore();
EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX + 1, kInnerY + 1, EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX + 1, kInnerY + 1,
...@@ -367,9 +357,7 @@ TEST(PlatformCanvas, TranslateLayer) { ...@@ -367,9 +357,7 @@ TEST(PlatformCanvas, TranslateLayer) {
LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH); LayerSaver layer(*canvas, kLayerX, kLayerY, kLayerW, kLayerH);
canvas->translate(1, 1); canvas->translate(1, 1);
DrawNativeRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH); DrawNativeRect(*canvas, kInnerX, kInnerY, kInnerW, kInnerH);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH); MakeOpaque(canvas.get(), kInnerX, kInnerY, kInnerW, kInnerH);
#endif
} }
canvas->restore(); canvas->restore();
EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX + 1, kInnerY + 1, EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX + 1, kInnerY + 1,
...@@ -385,9 +373,7 @@ TEST(PlatformCanvas, TranslateLayer) { ...@@ -385,9 +373,7 @@ TEST(PlatformCanvas, TranslateLayer) {
canvas->translate(1, 1); canvas->translate(1, 1);
AddClip(*canvas, kInnerX + 1, kInnerY + 1, kInnerW - 1, kInnerH - 1); AddClip(*canvas, kInnerX + 1, kInnerY + 1, kInnerW - 1, kInnerH - 1);
DrawNativeRect(*canvas, 0, 0, 100, 100); DrawNativeRect(*canvas, 0, 0, 100, 100);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), kLayerX, kLayerY, kLayerW, kLayerH); MakeOpaque(canvas.get(), kLayerX, kLayerY, kLayerW, kLayerH);
#endif
} }
canvas->restore(); canvas->restore();
EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX + 3, kInnerY + 3, EXPECT_TRUE(VerifyBlackRect(*canvas, kInnerX + 3, kInnerY + 3,
...@@ -395,7 +381,7 @@ TEST(PlatformCanvas, TranslateLayer) { ...@@ -395,7 +381,7 @@ TEST(PlatformCanvas, TranslateLayer) {
// TODO(dglazkov): Figure out why this fails on Mac (antialiased clipping?), // TODO(dglazkov): Figure out why this fails on Mac (antialiased clipping?),
// modify test and remove this guard. // modify test and remove this guard.
#if !defined(OS_MACOSX) #if !defined(OS_MACOSX) && !defined(USE_AURA)
// Translate both before and after, and have a path clip. // Translate both before and after, and have a path clip.
canvas->drawColor(SK_ColorWHITE); canvas->drawColor(SK_ColorWHITE);
canvas->save(); canvas->save();
...@@ -414,9 +400,7 @@ TEST(PlatformCanvas, TranslateLayer) { ...@@ -414,9 +400,7 @@ TEST(PlatformCanvas, TranslateLayer) {
canvas->clipPath(path); canvas->clipPath(path);
DrawNativeRect(*canvas, 0, 0, 100, 100); DrawNativeRect(*canvas, 0, 0, 100, 100);
#if defined(OS_WIN)
MakeOpaque(canvas.get(), kLayerX, kLayerY, kLayerW, kLayerH); MakeOpaque(canvas.get(), kLayerX, kLayerY, kLayerW, kLayerH);
#endif
} }
canvas->restore(); canvas->restore();
EXPECT_TRUE(VerifyRoundedRect(*canvas, SK_ColorWHITE, SK_ColorBLACK, EXPECT_TRUE(VerifyRoundedRect(*canvas, SK_ColorWHITE, SK_ColorBLACK,
...@@ -424,6 +408,4 @@ TEST(PlatformCanvas, TranslateLayer) { ...@@ -424,6 +408,4 @@ TEST(PlatformCanvas, TranslateLayer) {
#endif #endif
} }
#endif // #if !defined(USE_AURA)
} // namespace skia } // namespace skia
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment