diff options
author | vmpstr@chromium.org <vmpstr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-04 01:10:24 +0000 |
---|---|---|
committer | vmpstr@chromium.org <vmpstr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-04 01:10:24 +0000 |
commit | 0d520268c517e86bc48a5caebde23ca631fa3032 (patch) | |
tree | 58f4f7624c056cf01b2a395717043746c64e387a /skia | |
parent | d403dcf92a5127e17ea1c0f21674efc2f07870f0 (diff) | |
download | chromium_src-0d520268c517e86bc48a5caebde23ca631fa3032.zip chromium_src-0d520268c517e86bc48a5caebde23ca631fa3032.tar.gz chromium_src-0d520268c517e86bc48a5caebde23ca631fa3032.tar.bz2 |
cc: Move canvas clear from picture to picture_pile_impl
This moves a clear per picture into a clear-to-background color
per picture pile. We need this to ensure that a solid color
page in low res is considered solid, since all the draws are
of the same color.
BUG=233622
Review URL: https://chromiumcodereview.appspot.com/14322017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@198272 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia')
-rw-r--r-- | skia/ext/analysis_canvas.cc | 8 | ||||
-rw-r--r-- | skia/ext/analysis_canvas_unittest.cc | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/skia/ext/analysis_canvas.cc b/skia/ext/analysis_canvas.cc index 321ee2b..196d1d0 100644 --- a/skia/ext/analysis_canvas.cc +++ b/skia/ext/analysis_canvas.cc @@ -173,7 +173,8 @@ void AnalysisDevice::clear(SkColor color) { void AnalysisDevice::drawPaint(const SkDraw&, const SkPaint& paint) { addBitmapFromPaint(paint); - isSolidColor_ = false; + isSolidColor_ = + (isSolidColor_ && isSolidColorPaint(paint) && paint.getColor() == color_); isTransparent_ = false; } @@ -221,9 +222,12 @@ void AnalysisDevice::drawRect(const SkDraw& draw, const SkRect& rect, // - We're not in "forced not solid" mode // - Paint is solid color // - The quad is a full tile quad + // - The exception is if the tile is already solid tile, + // and we're drawing the same solid color paint then + // the tile remains solid. if (!isForcedNotSolid_ && isSolidColorPaint(paint) && - doesCoverCanvas) { + (doesCoverCanvas || (isSolidColor_ && paint.getColor() == color_))) { isSolidColor_ = true; color_ = paint.getColor(); hasText_ = false; diff --git a/skia/ext/analysis_canvas_unittest.cc b/skia/ext/analysis_canvas_unittest.cc index 3cc2553..aa69259 100644 --- a/skia/ext/analysis_canvas_unittest.cc +++ b/skia/ext/analysis_canvas_unittest.cc @@ -223,9 +223,17 @@ TEST(AnalysisCanvasTest, SimpleDrawRect) { EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); EXPECT_EQ(color, outputColor); + // Paint with the same color, tile should remain solid. canvas.rotate(50); canvas.drawRect(SkRect::MakeWH(255, 255), paint); + EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); + EXPECT_EQ(color, outputColor); + + color = SkColorSetARGB(255, 12, 23, 34); + paint.setColor(color); + paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); + canvas.drawRect(SkRect::MakeWH(255, 255), paint); EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); } |