summaryrefslogtreecommitdiffstats
path: root/skia
diff options
context:
space:
mode:
authorvmpstr@chromium.org <vmpstr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-04 01:10:24 +0000
committervmpstr@chromium.org <vmpstr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-04 01:10:24 +0000
commit0d520268c517e86bc48a5caebde23ca631fa3032 (patch)
tree58f4f7624c056cf01b2a395717043746c64e387a /skia
parentd403dcf92a5127e17ea1c0f21674efc2f07870f0 (diff)
downloadchromium_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.cc8
-rw-r--r--skia/ext/analysis_canvas_unittest.cc8
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));
}