OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/debug/trace_event.h" | 5 #include "base/debug/trace_event.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "skia/ext/analysis_canvas.h" | 7 #include "skia/ext/analysis_canvas.h" |
8 #include "third_party/skia/include/core/SkDraw.h" | 8 #include "third_party/skia/include/core/SkDraw.h" |
9 #include "third_party/skia/include/core/SkRRect.h" | 9 #include "third_party/skia/include/core/SkRRect.h" |
10 #include "third_party/skia/include/core/SkShader.h" | 10 #include "third_party/skia/include/core/SkShader.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 void AnalysisCanvas::drawPoints(SkCanvas::PointMode mode, | 103 void AnalysisCanvas::drawPoints(SkCanvas::PointMode mode, |
104 size_t count, | 104 size_t count, |
105 const SkPoint points[], | 105 const SkPoint points[], |
106 const SkPaint& paint) { | 106 const SkPaint& paint) { |
107 is_solid_color_ = false; | 107 is_solid_color_ = false; |
108 is_transparent_ = false; | 108 is_transparent_ = false; |
109 ++draw_op_count_; | 109 ++draw_op_count_; |
110 } | 110 } |
111 | 111 |
112 void AnalysisCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { | 112 void AnalysisCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { |
113 // This recreates the early-exit logic in SkCanvas.cpp, which aborts early | 113 // This recreates the early-exit logic in SkCanvas.cpp. |
114 // if the paint will "draw nothing". | 114 SkRect scratch; |
| 115 if (paint.canComputeFastBounds() && |
| 116 quickReject(paint.computeFastBounds(rect, &scratch))) { |
| 117 return; |
| 118 } |
| 119 |
| 120 // An extra no-op check SkCanvas.cpp doesn't do. |
115 if (paint.nothingToDraw()) | 121 if (paint.nothingToDraw()) |
116 return; | 122 return; |
117 | 123 |
118 bool does_cover_canvas = IsFullQuad(this, rect); | 124 bool does_cover_canvas = IsFullQuad(this, rect); |
119 | 125 |
120 SkXfermode::Mode xfermode; | 126 SkXfermode::Mode xfermode; |
121 SkXfermode::AsMode(paint.getXfermode(), &xfermode); | 127 SkXfermode::AsMode(paint.getXfermode(), &xfermode); |
122 | 128 |
123 // This canvas will become transparent if the following holds: | 129 // This canvas will become transparent if the following holds: |
124 // - The quad is a full tile quad | 130 // - The quad is a full tile quad |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 force_not_transparent_stack_level_ = kNoLayer; | 441 force_not_transparent_stack_level_ = kNoLayer; |
436 } | 442 } |
437 } | 443 } |
438 | 444 |
439 INHERITED::willRestore(); | 445 INHERITED::willRestore(); |
440 } | 446 } |
441 | 447 |
442 } // namespace skia | 448 } // namespace skia |
443 | 449 |
444 | 450 |
OLD | NEW |