Chromium Code Reviews| 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 SkTLazy<SkPaint> decoded_paint_; |
|
vmpstr
2016/02/03 19:30:59
nit: Can you add a TODO here to use base::Optional
f(malita)
2016/02/03 20:34:41
Done.
| |
| 182 }; | 180 }; |
| 183 | 181 |
| 184 ImageDecodeController* image_decode_controller_; | 182 ImageDecodeController* image_decode_controller_; |
| 185 }; | 183 }; |
| 186 | 184 |
| 187 } // namespace | 185 } // namespace |
| 188 | 186 |
| 189 scoped_refptr<DisplayListRasterSource> | 187 scoped_refptr<DisplayListRasterSource> |
| 190 DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 188 DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
| 191 const DisplayListRecordingSource* other, | 189 const DisplayListRecordingSource* other, |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 502 ImageDecodeController* image_decode_controller) { | 500 ImageDecodeController* image_decode_controller) { |
| 503 DCHECK(image_decode_controller); | 501 DCHECK(image_decode_controller); |
| 504 // Note that although this function should only be called once, tests tend to | 502 // Note that although this function should only be called once, tests tend to |
| 505 // call it several times using the same controller. | 503 // call it several times using the same controller. |
| 506 DCHECK(!image_decode_controller_ || | 504 DCHECK(!image_decode_controller_ || |
| 507 image_decode_controller_ == image_decode_controller); | 505 image_decode_controller_ == image_decode_controller); |
| 508 image_decode_controller_ = image_decode_controller; | 506 image_decode_controller_ = image_decode_controller; |
| 509 } | 507 } |
| 510 | 508 |
| 511 } // namespace cc | 509 } // namespace cc |
| OLD | NEW |