OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "cc/playback/display_list_raster_source.h" | 5 #include "cc/playback/display_list_raster_source.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/containers/adapters.h" | 9 #include "base/containers/adapters.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
11 #include "cc/base/region.h" | 11 #include "cc/base/region.h" |
12 #include "cc/debug/debug_colors.h" | 12 #include "cc/debug/debug_colors.h" |
13 #include "cc/playback/discardable_image_map.h" | 13 #include "cc/playback/discardable_image_map.h" |
14 #include "cc/playback/display_item_list.h" | 14 #include "cc/playback/display_item_list.h" |
15 #include "cc/tiles/image_decode_controller.h" | 15 #include "cc/tiles/image_decode_controller.h" |
16 #include "skia/ext/analysis_canvas.h" | 16 #include "skia/ext/analysis_canvas.h" |
17 #include "third_party/skia/include/core/SkCanvas.h" | 17 #include "third_party/skia/include/core/SkCanvas.h" |
18 #include "third_party/skia/include/core/SkPictureRecorder.h" | 18 #include "third_party/skia/include/core/SkPictureRecorder.h" |
| 19 #include "third_party/skia/include/core/SkTLazy.h" |
19 #include "third_party/skia/include/utils/SkNWayCanvas.h" | 20 #include "third_party/skia/include/utils/SkNWayCanvas.h" |
20 #include "ui/gfx/geometry/rect_conversions.h" | 21 #include "ui/gfx/geometry/rect_conversions.h" |
21 | 22 |
22 namespace cc { | 23 namespace cc { |
23 | 24 |
24 namespace { | 25 namespace { |
25 | 26 |
26 SkIRect RoundOutRect(const SkRect& rect) { | 27 SkIRect RoundOutRect(const SkRect& rect) { |
27 SkIRect result; | 28 SkIRect result; |
28 rect.roundOut(&result); | 29 rect.roundOut(&result); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 class ScopedDecodedImageLock { | 139 class ScopedDecodedImageLock { |
139 public: | 140 public: |
140 ScopedDecodedImageLock(ImageDecodeController* image_decode_controller, | 141 ScopedDecodedImageLock(ImageDecodeController* image_decode_controller, |
141 const SkImage* image, | 142 const SkImage* image, |
142 const SkRect& src_rect, | 143 const SkRect& src_rect, |
143 const SkSize& scale, | 144 const SkSize& scale, |
144 bool is_decomposable, | 145 bool is_decomposable, |
145 bool has_perspective, | 146 bool has_perspective, |
146 const SkPaint* paint) | 147 const SkPaint* paint) |
147 : image_decode_controller_(image_decode_controller), | 148 : image_decode_controller_(image_decode_controller), |
148 paint_(paint), | |
149 draw_image_(image, | 149 draw_image_(image, |
150 RoundOutRect(src_rect), | 150 RoundOutRect(src_rect), |
151 scale, | 151 scale, |
152 paint ? paint->getFilterQuality() : kNone_SkFilterQuality, | 152 paint ? paint->getFilterQuality() : kNone_SkFilterQuality, |
153 has_perspective, | 153 has_perspective, |
154 is_decomposable), | 154 is_decomposable), |
155 decoded_draw_image_( | 155 decoded_draw_image_( |
156 image_decode_controller_->GetDecodedImageForDraw(draw_image_)) { | 156 image_decode_controller_->GetDecodedImageForDraw(draw_image_)) { |
157 DCHECK(image->isLazyGenerated()); | 157 DCHECK(image->isLazyGenerated()); |
158 if (paint) { | 158 if (paint) |
159 decoded_paint_ = *paint; | 159 decoded_paint_.set(*paint)->setFilterQuality( |
160 decoded_paint_.setFilterQuality(decoded_draw_image_.filter_quality()); | 160 decoded_draw_image_.filter_quality()); |
161 } | |
162 } | 161 } |
163 | 162 |
164 ~ScopedDecodedImageLock() { | 163 ~ScopedDecodedImageLock() { |
165 image_decode_controller_->DrawWithImageFinished(draw_image_, | 164 image_decode_controller_->DrawWithImageFinished(draw_image_, |
166 decoded_draw_image_); | 165 decoded_draw_image_); |
167 } | 166 } |
168 | 167 |
169 const DecodedDrawImage& decoded_image() const { | 168 const DecodedDrawImage& decoded_image() const { |
170 return decoded_draw_image_; | 169 return decoded_draw_image_; |
171 } | 170 } |
172 const SkPaint* decoded_paint() const { | 171 const SkPaint* decoded_paint() const { |
173 return paint_ ? &decoded_paint_ : nullptr; | 172 return decoded_paint_.getMaybeNull(); |
174 } | 173 } |
175 | 174 |
176 private: | 175 private: |
177 ImageDecodeController* image_decode_controller_; | 176 ImageDecodeController* image_decode_controller_; |
178 const SkPaint* paint_; | |
179 DrawImage draw_image_; | 177 DrawImage draw_image_; |
180 DecodedDrawImage decoded_draw_image_; | 178 DecodedDrawImage decoded_draw_image_; |
181 SkPaint decoded_paint_; | 179 // TODO(fmalita): use base::Optional when it becomes available |
| 180 SkTLazy<SkPaint> decoded_paint_; |
182 }; | 181 }; |
183 | 182 |
184 ImageDecodeController* image_decode_controller_; | 183 ImageDecodeController* image_decode_controller_; |
185 }; | 184 }; |
186 | 185 |
187 } // namespace | 186 } // namespace |
188 | 187 |
189 scoped_refptr<DisplayListRasterSource> | 188 scoped_refptr<DisplayListRasterSource> |
190 DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 189 DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
191 const DisplayListRecordingSource* other, | 190 const DisplayListRecordingSource* other, |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 ImageDecodeController* image_decode_controller) { | 501 ImageDecodeController* image_decode_controller) { |
503 DCHECK(image_decode_controller); | 502 DCHECK(image_decode_controller); |
504 // Note that although this function should only be called once, tests tend to | 503 // Note that although this function should only be called once, tests tend to |
505 // call it several times using the same controller. | 504 // call it several times using the same controller. |
506 DCHECK(!image_decode_controller_ || | 505 DCHECK(!image_decode_controller_ || |
507 image_decode_controller_ == image_decode_controller); | 506 image_decode_controller_ == image_decode_controller); |
508 image_decode_controller_ = image_decode_controller; | 507 image_decode_controller_ = image_decode_controller; |
509 } | 508 } |
510 | 509 |
511 } // namespace cc | 510 } // namespace cc |
OLD | NEW |