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 "skia/ext/analysis_canvas.h" | 6 #include "skia/ext/analysis_canvas.h" |
7 #include "third_party/skia/include/core/SkDevice.h" | 7 #include "third_party/skia/include/core/SkDevice.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 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 isSolidColor_ = false; | 195 isSolidColor_ = false; |
196 } | 196 } |
197 } | 197 } |
198 | 198 |
199 void AnalysisDevice::drawPaint(const SkDraw&, const SkPaint& paint) { | 199 void AnalysisDevice::drawPaint(const SkDraw&, const SkPaint& paint) { |
200 estimatedCost_ += kUnknownExpensiveCost; | 200 estimatedCost_ += kUnknownExpensiveCost; |
201 if (hasBitmap(paint)) { | 201 if (hasBitmap(paint)) { |
202 estimatedCost_ += kUnknownBitmapCost; | 202 estimatedCost_ += kUnknownBitmapCost; |
203 addBitmapFromPaint(paint); | 203 addBitmapFromPaint(paint); |
204 } | 204 } |
205 isSolidColor_ = false; | 205 isSolidColor_ = |
| 206 (isSolidColor_ && isSolidColorPaint(paint) && paint.getColor() == color_); |
206 isTransparent_ = false; | 207 isTransparent_ = false; |
207 } | 208 } |
208 | 209 |
209 void AnalysisDevice::drawPoints(const SkDraw&, SkCanvas::PointMode mode, | 210 void AnalysisDevice::drawPoints(const SkDraw&, SkCanvas::PointMode mode, |
210 size_t count, const SkPoint[], | 211 size_t count, const SkPoint[], |
211 const SkPaint& paint) { | 212 const SkPaint& paint) { |
212 estimatedCost_ += kUnknownExpensiveCost; | 213 estimatedCost_ += kUnknownExpensiveCost; |
213 if (hasBitmap(paint)) { | 214 if (hasBitmap(paint)) { |
214 estimatedCost_ += kUnknownBitmapCost; | 215 estimatedCost_ += kUnknownBitmapCost; |
215 addBitmapFromPaint(paint); | 216 addBitmapFromPaint(paint); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 else if (paint.getAlpha() != 0 || | 257 else if (paint.getAlpha() != 0 || |
257 xferMode != SkXfermode::kSrc_Mode) { | 258 xferMode != SkXfermode::kSrc_Mode) { |
258 isTransparent_ = false; | 259 isTransparent_ = false; |
259 } | 260 } |
260 | 261 |
261 // This bitmap is solid if and only if the following holds. | 262 // This bitmap is solid if and only if the following holds. |
262 // Note that this might be overly conservative: | 263 // Note that this might be overly conservative: |
263 // - We're not in "forced not solid" mode | 264 // - We're not in "forced not solid" mode |
264 // - Paint is solid color | 265 // - Paint is solid color |
265 // - The quad is a full tile quad | 266 // - The quad is a full tile quad |
| 267 // - The exception is if the tile is already solid tile, |
| 268 // and we're drawing the same solid color paint then |
| 269 // the tile remains solid. |
266 if (!isForcedNotSolid_ && | 270 if (!isForcedNotSolid_ && |
267 isSolidColorPaint(paint) && | 271 isSolidColorPaint(paint) && |
268 doesCoverCanvas) { | 272 (doesCoverCanvas || (isSolidColor_ && paint.getColor() == color_))) { |
269 isSolidColor_ = true; | 273 isSolidColor_ = true; |
270 color_ = paint.getColor(); | 274 color_ = paint.getColor(); |
271 hasText_ = false; | 275 hasText_ = false; |
272 } | 276 } |
273 else { | 277 else { |
274 isSolidColor_ = false; | 278 isSolidColor_ = false; |
275 } | 279 } |
276 } | 280 } |
277 | 281 |
278 void AnalysisDevice::drawOval(const SkDraw&, const SkRect& oval, | 282 void AnalysisDevice::drawOval(const SkDraw&, const SkRect& oval, |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 if (savedStackSize_ < forceNotTransparentStackLevel_) { | 563 if (savedStackSize_ < forceNotTransparentStackLevel_) { |
560 (static_cast<AnalysisDevice*>(getDevice()))->setForceNotTransparent(false)
; | 564 (static_cast<AnalysisDevice*>(getDevice()))->setForceNotTransparent(false)
; |
561 forceNotTransparentStackLevel_ = kNoLayer; | 565 forceNotTransparentStackLevel_ = kNoLayer; |
562 } | 566 } |
563 } | 567 } |
564 } | 568 } |
565 | 569 |
566 } // namespace skia | 570 } // namespace skia |
567 | 571 |
568 | 572 |
OLD | NEW |