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

Side by Side Diff: cc/playback/display_list_raster_source.cc

Issue 1666583002: Use SkTLazy for ScopedDecodedImageLock's optional paint (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698