Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Unified Diff: skia/ext/analysis_canvas.cc

Issue 416333003: Revert of skia/ext: Early out from analysis when we have more than 1 draw op. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/ext/analysis_canvas.h ('k') | skia/ext/analysis_canvas_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « skia/ext/analysis_canvas.h ('k') | skia/ext/analysis_canvas_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698