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

Side by Side Diff: cc/layers/delegated_renderer_layer_impl.cc

Issue 1158433010: Reland: cc: Fix size_t to int truncations in layers/ output/ playback/ quads/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/layers/delegated_renderer_layer_impl.h" 5 #include "cc/layers/delegated_renderer_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 } 183 }
184 184
185 void DelegatedRendererLayerImpl::SetRenderPasses( 185 void DelegatedRendererLayerImpl::SetRenderPasses(
186 RenderPassList* render_passes_in_draw_order) { 186 RenderPassList* render_passes_in_draw_order) {
187 ClearRenderPasses(); 187 ClearRenderPasses();
188 188
189 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { 189 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) {
190 RenderPassList::iterator to_take = 190 RenderPassList::iterator to_take =
191 render_passes_in_draw_order->begin() + i; 191 render_passes_in_draw_order->begin() + i;
192 render_passes_index_by_id_.insert( 192 render_passes_index_by_id_.insert(
193 std::pair<RenderPassId, int>((*to_take)->id, i)); 193 RenderPassToIndexMap::value_type((*to_take)->id, i));
194 scoped_ptr<RenderPass> taken_render_pass = 194 scoped_ptr<RenderPass> taken_render_pass =
195 render_passes_in_draw_order->take(to_take); 195 render_passes_in_draw_order->take(to_take);
196 render_passes_in_draw_order_.push_back(taken_render_pass.Pass()); 196 render_passes_in_draw_order_.push_back(taken_render_pass.Pass());
197 } 197 }
198 198
199 // Give back an empty array instead of nulls. 199 // Give back an empty array instead of nulls.
200 render_passes_in_draw_order->clear(); 200 render_passes_in_draw_order->clear();
201 201
202 // The render passes given here become part of the RenderSurfaceLayerList, so 202 // The render passes given here become part of the RenderSurfaceLayerList, so
203 // changing them requires recomputing the RenderSurfaceLayerList. 203 // changing them requires recomputing the RenderSurfaceLayerList.
204 layer_tree_impl()->set_needs_update_draw_properties(); 204 layer_tree_impl()->set_needs_update_draw_properties();
205 } 205 }
206 206
207 void DelegatedRendererLayerImpl::ClearRenderPasses() { 207 void DelegatedRendererLayerImpl::ClearRenderPasses() {
208 render_passes_index_by_id_.clear(); 208 render_passes_index_by_id_.clear();
209 render_passes_in_draw_order_.clear(); 209 render_passes_in_draw_order_.clear();
210 } 210 }
211 211
212 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( 212 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl(
213 LayerTreeImpl* tree_impl) { 213 LayerTreeImpl* tree_impl) {
214 return DelegatedRendererLayerImpl::Create(tree_impl, id()); 214 return DelegatedRendererLayerImpl::Create(tree_impl, id());
215 } 215 }
216 216
217 void DelegatedRendererLayerImpl::ReleaseResources() { 217 void DelegatedRendererLayerImpl::ReleaseResources() {
218 ClearRenderPasses(); 218 ClearRenderPasses();
219 ClearChildId(); 219 ClearChildId();
220 have_render_passes_to_push_ = false; 220 have_render_passes_to_push_ = false;
221 } 221 }
222 222
223 static inline int IndexToId(int index) { return index + 1; } 223 static inline size_t IndexToId(size_t index) {
224 static inline int IdToIndex(int id) { return id - 1; } 224 return index + 1;
225 }
226 static inline size_t IdToIndex(size_t id) {
227 DCHECK_GT(id, 0u);
228 return id - 1;
229 }
225 230
226 RenderPassId DelegatedRendererLayerImpl::FirstContributingRenderPassId() const { 231 RenderPassId DelegatedRendererLayerImpl::FirstContributingRenderPassId() const {
227 return RenderPassId(id(), IndexToId(0)); 232 return RenderPassId(id(), IndexToId(0));
228 } 233 }
229 234
230 RenderPassId DelegatedRendererLayerImpl::NextContributingRenderPassId( 235 RenderPassId DelegatedRendererLayerImpl::NextContributingRenderPassId(
231 RenderPassId previous) const { 236 RenderPassId previous) const {
232 return RenderPassId(previous.layer_id, previous.index + 1); 237 return RenderPassId(previous.layer_id, previous.index + 1);
233 } 238 }
234 239
235 bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( 240 bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId(
236 RenderPassId delegated_render_pass_id, 241 RenderPassId delegated_render_pass_id,
237 RenderPassId* output_render_pass_id) const { 242 RenderPassId* output_render_pass_id) const {
238 base::hash_map<RenderPassId, int>::const_iterator found = 243 RenderPassToIndexMap::const_iterator found =
239 render_passes_index_by_id_.find(delegated_render_pass_id); 244 render_passes_index_by_id_.find(delegated_render_pass_id);
240 if (found == render_passes_index_by_id_.end()) { 245 if (found == render_passes_index_by_id_.end()) {
241 // Be robust against a RenderPass id that isn't part of the frame. 246 // Be robust against a RenderPass id that isn't part of the frame.
242 return false; 247 return false;
243 } 248 }
244 unsigned delegated_render_pass_index = found->second; 249 size_t delegated_render_pass_index = found->second;
245 *output_render_pass_id = 250 *output_render_pass_id =
246 RenderPassId(id(), IndexToId(delegated_render_pass_index)); 251 RenderPassId(id(), IndexToId(delegated_render_pass_index));
247 return true; 252 return true;
248 } 253 }
249 254
250 void DelegatedRendererLayerImpl::AppendContributingRenderPasses( 255 void DelegatedRendererLayerImpl::AppendContributingRenderPasses(
251 RenderPassSink* render_pass_sink) { 256 RenderPassSink* render_pass_sink) {
252 DCHECK(HasContributingDelegatedRenderPasses()); 257 DCHECK(HasContributingDelegatedRenderPasses());
253 258
254 const RenderPass* root_delegated_render_pass = 259 const RenderPass* root_delegated_render_pass =
255 render_passes_in_draw_order_.back(); 260 render_passes_in_draw_order_.back();
256 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); 261 gfx::Size frame_size = root_delegated_render_pass->output_rect.size();
257 gfx::Transform delegated_frame_to_root_transform = screen_space_transform(); 262 gfx::Transform delegated_frame_to_root_transform = screen_space_transform();
258 delegated_frame_to_root_transform.Scale(inverse_device_scale_factor_, 263 delegated_frame_to_root_transform.Scale(inverse_device_scale_factor_,
259 inverse_device_scale_factor_); 264 inverse_device_scale_factor_);
260 265
261 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { 266 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) {
262 RenderPassId output_render_pass_id(-1, -1); 267 RenderPassId output_render_pass_id(-1, -1);
263 bool present = 268 bool present =
264 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id, 269 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id,
265 &output_render_pass_id); 270 &output_render_pass_id);
266 271
267 // Don't clash with the RenderPass we generate if we own a RenderSurface. 272 // Don't clash with the RenderPass we generate if we own a RenderSurface.
268 DCHECK(present) << render_passes_in_draw_order_[i]->id.layer_id << ", " 273 DCHECK(present) << render_passes_in_draw_order_[i]->id.layer_id << ", "
269 << render_passes_in_draw_order_[i]->id.index; 274 << render_passes_in_draw_order_[i]->id.index;
270 DCHECK_GT(output_render_pass_id.index, 0); 275 DCHECK_GT(output_render_pass_id.index, 0u);
271 276
272 scoped_ptr<RenderPass> copy_pass = 277 scoped_ptr<RenderPass> copy_pass =
273 render_passes_in_draw_order_[i]->Copy(output_render_pass_id); 278 render_passes_in_draw_order_[i]->Copy(output_render_pass_id);
274 copy_pass->transform_to_root_target.ConcatTransform( 279 copy_pass->transform_to_root_target.ConcatTransform(
275 delegated_frame_to_root_transform); 280 delegated_frame_to_root_transform);
276 render_pass_sink->AppendRenderPass(copy_pass.Pass()); 281 render_pass_sink->AppendRenderPass(copy_pass.Pass());
277 } 282 }
278 } 283 }
279 284
280 bool DelegatedRendererLayerImpl::WillDraw(DrawMode draw_mode, 285 bool DelegatedRendererLayerImpl::WillDraw(DrawMode draw_mode,
(...skipping 30 matching lines...) Expand all
311 // render_target. 316 // render_target.
312 DCHECK(target_render_pass_id.layer_id == render_target()->id()); 317 DCHECK(target_render_pass_id.layer_id == render_target()->id());
313 318
314 AppendRenderPassQuads(render_pass, 319 AppendRenderPassQuads(render_pass,
315 root_delegated_render_pass, 320 root_delegated_render_pass,
316 frame_size); 321 frame_size);
317 } else { 322 } else {
318 // Verify that the RenderPass we are appending to was created by us. 323 // Verify that the RenderPass we are appending to was created by us.
319 DCHECK(target_render_pass_id.layer_id == id()); 324 DCHECK(target_render_pass_id.layer_id == id());
320 325
321 int render_pass_index = IdToIndex(target_render_pass_id.index); 326 size_t render_pass_index = IdToIndex(target_render_pass_id.index);
322 const RenderPass* delegated_render_pass = 327 const RenderPass* delegated_render_pass =
323 render_passes_in_draw_order_[render_pass_index]; 328 render_passes_in_draw_order_[render_pass_index];
324 AppendRenderPassQuads(render_pass, 329 AppendRenderPassQuads(render_pass,
325 delegated_render_pass, 330 delegated_render_pass,
326 frame_size); 331 frame_size);
327 } 332 }
328 } 333 }
329 334
330 void DelegatedRendererLayerImpl::AppendRainbowDebugBorder( 335 void DelegatedRendererLayerImpl::AppendRainbowDebugBorder(
331 RenderPass* render_pass) { 336 RenderPass* render_pass) {
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 if (own_child_id_) { 531 if (own_child_id_) {
527 ResourceProvider* provider = layer_tree_impl()->resource_provider(); 532 ResourceProvider* provider = layer_tree_impl()->resource_provider();
528 provider->DestroyChild(child_id_); 533 provider->DestroyChild(child_id_);
529 } 534 }
530 535
531 resources_.clear(); 536 resources_.clear();
532 child_id_ = 0; 537 child_id_ = 0;
533 } 538 }
534 539
535 } // namespace cc 540 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698