Index: skia/ext/analysis_canvas.cc |
diff --git a/skia/ext/analysis_canvas.cc b/skia/ext/analysis_canvas.cc |
index ffb29107720cc2f3804bef6c52d5aee9eae3853c..16a7ffa45675a6b5753cc457785aaef0d2baa00f 100644 |
--- a/skia/ext/analysis_canvas.cc |
+++ b/skia/ext/analysis_canvas.cc |
@@ -80,6 +80,7 @@ |
void AnalysisCanvas::clear(SkColor color) { |
is_transparent_ = (!is_forced_not_transparent_ && SkColorGetA(color) == 0); |
+ has_text_ = false; |
if (!is_forced_not_solid_ && SkColorGetA(color) == 255) { |
is_solid_color_ = true; |
@@ -97,7 +98,6 @@ |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawPoints(SkCanvas::PointMode mode, |
@@ -106,7 +106,6 @@ |
const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { |
@@ -133,6 +132,7 @@ |
!is_forced_not_transparent_ && |
xfermode == SkXfermode::kClear_Mode) { |
is_transparent_ = true; |
+ has_text_ = false; |
} else if (paint.getAlpha() != 0 || xfermode != SkXfermode::kSrc_Mode) { |
is_transparent_ = false; |
} |
@@ -145,16 +145,15 @@ |
if (!is_forced_not_solid_ && IsSolidColorPaint(paint) && does_cover_canvas) { |
is_solid_color_ = true; |
color_ = paint.getColor(); |
+ has_text_ = false; |
} else { |
is_solid_color_ = false; |
} |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawOval(const SkRect& oval, const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawRRect(const SkRRect& rr, const SkPaint& paint) { |
@@ -163,13 +162,11 @@ |
// do the same work here. |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawPath(const SkPath& path, const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawBitmap(const SkBitmap& bitmap, |
@@ -178,7 +175,6 @@ |
const SkPaint*) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawBitmapRectToRect(const SkBitmap&, |
@@ -193,7 +189,6 @@ |
paint = &tmpPaint; |
drawRect(dst, *paint); |
is_solid_color_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawBitmapMatrix(const SkBitmap& bitmap, |
@@ -201,7 +196,6 @@ |
const SkPaint* paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawBitmapNine(const SkBitmap& bitmap, |
@@ -210,7 +204,6 @@ |
const SkPaint* paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawSprite(const SkBitmap& bitmap, |
@@ -219,7 +212,6 @@ |
const SkPaint* paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::onDrawText(const void* text, |
@@ -229,7 +221,7 @@ |
const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
+ has_text_ = true; |
} |
void AnalysisCanvas::onDrawPosText(const void* text, |
@@ -238,7 +230,7 @@ |
const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
+ has_text_ = true; |
} |
void AnalysisCanvas::onDrawPosTextH(const void* text, |
@@ -248,7 +240,7 @@ |
const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
+ has_text_ = true; |
} |
void AnalysisCanvas::onDrawTextOnPath(const void* text, |
@@ -258,7 +250,7 @@ |
const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
+ has_text_ = true; |
} |
void AnalysisCanvas::onDrawDRRect(const SkRRect& outer, |
@@ -266,7 +258,6 @@ |
const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
void AnalysisCanvas::drawVertices(SkCanvas::VertexMode, |
@@ -280,7 +271,6 @@ |
const SkPaint& paint) { |
is_solid_color_ = false; |
is_transparent_ = false; |
- ++draw_op_count_; |
} |
// Needed for now, since SkCanvas requires a bitmap, even if it is not backed |
@@ -300,7 +290,7 @@ |
is_forced_not_transparent_(false), |
is_solid_color_(true), |
is_transparent_(true), |
- draw_op_count_(0) {} |
+ has_text_(false) {} |
AnalysisCanvas::~AnalysisCanvas() {} |
@@ -316,12 +306,11 @@ |
return false; |
} |
+bool AnalysisCanvas::HasText() const { return has_text_; } |
+ |
bool AnalysisCanvas::abortDrawing() { |
- // Early out as soon as we have more than one draw op. |
- // TODO(vmpstr): Investigate if 1 is the correct metric here. We need to |
- // balance the amount of time we spend analyzing vs how many tiles would be |
- // solid if the number was higher. |
- return draw_op_count_ > 1; |
+ // Early out as soon as we have detected that the tile has text. |
+ return HasText(); |
} |
void AnalysisCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, |