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

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 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 173 }
174 174
175 void DelegatedRendererLayerImpl::SetRenderPasses( 175 void DelegatedRendererLayerImpl::SetRenderPasses(
176 RenderPassList* render_passes_in_draw_order) { 176 RenderPassList* render_passes_in_draw_order) {
177 ClearRenderPasses(); 177 ClearRenderPasses();
178 178
179 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { 179 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) {
180 RenderPassList::iterator to_take = 180 RenderPassList::iterator to_take =
181 render_passes_in_draw_order->begin() + i; 181 render_passes_in_draw_order->begin() + i;
182 render_passes_index_by_id_.insert( 182 render_passes_index_by_id_.insert(
183 std::pair<RenderPassId, int>((*to_take)->id, i)); 183 RenderPassToIndexMap::value_type((*to_take)->id, i));
184 scoped_ptr<RenderPass> taken_render_pass = 184 scoped_ptr<RenderPass> taken_render_pass =
185 render_passes_in_draw_order->take(to_take); 185 render_passes_in_draw_order->take(to_take);
186 render_passes_in_draw_order_.push_back(taken_render_pass.Pass()); 186 render_passes_in_draw_order_.push_back(taken_render_pass.Pass());
187 } 187 }
188 188
189 // Give back an empty array instead of nulls. 189 // Give back an empty array instead of nulls.
190 render_passes_in_draw_order->clear(); 190 render_passes_in_draw_order->clear();
191 191
192 // The render passes given here become part of the RenderSurfaceLayerList, so 192 // The render passes given here become part of the RenderSurfaceLayerList, so
193 // changing them requires recomputing the RenderSurfaceLayerList. 193 // changing them requires recomputing the RenderSurfaceLayerList.
194 layer_tree_impl()->set_needs_update_draw_properties(); 194 layer_tree_impl()->set_needs_update_draw_properties();
195 } 195 }
196 196
197 void DelegatedRendererLayerImpl::ClearRenderPasses() { 197 void DelegatedRendererLayerImpl::ClearRenderPasses() {
198 render_passes_index_by_id_.clear(); 198 render_passes_index_by_id_.clear();
199 render_passes_in_draw_order_.clear(); 199 render_passes_in_draw_order_.clear();
200 } 200 }
201 201
202 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( 202 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl(
203 LayerTreeImpl* tree_impl) { 203 LayerTreeImpl* tree_impl) {
204 return DelegatedRendererLayerImpl::Create(tree_impl, id()); 204 return DelegatedRendererLayerImpl::Create(tree_impl, id());
205 } 205 }
206 206
207 void DelegatedRendererLayerImpl::ReleaseResources() { 207 void DelegatedRendererLayerImpl::ReleaseResources() {
208 ClearRenderPasses(); 208 ClearRenderPasses();
209 ClearChildId(); 209 ClearChildId();
210 have_render_passes_to_push_ = false; 210 have_render_passes_to_push_ = false;
211 } 211 }
212 212
213 static inline int IndexToId(int index) { return index + 1; } 213 static inline size_t IndexToId(size_t index) {
214 static inline int IdToIndex(int id) { return id - 1; } 214 return index + 1;
215 }
216 static inline size_t IdToIndex(size_t id) {
217 DCHECK_GT(id, 0u);
218 return id - 1;
219 }
215 220
216 RenderPassId DelegatedRendererLayerImpl::FirstContributingRenderPassId() const { 221 RenderPassId DelegatedRendererLayerImpl::FirstContributingRenderPassId() const {
217 return RenderPassId(id(), IndexToId(0)); 222 return RenderPassId(id(), IndexToId(0));
218 } 223 }
219 224
220 RenderPassId DelegatedRendererLayerImpl::NextContributingRenderPassId( 225 RenderPassId DelegatedRendererLayerImpl::NextContributingRenderPassId(
221 RenderPassId previous) const { 226 RenderPassId previous) const {
222 return RenderPassId(previous.layer_id, previous.index + 1); 227 return RenderPassId(previous.layer_id, previous.index + 1);
223 } 228 }
224 229
225 bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( 230 bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId(
226 RenderPassId delegated_render_pass_id, 231 RenderPassId delegated_render_pass_id,
227 RenderPassId* output_render_pass_id) const { 232 RenderPassId* output_render_pass_id) const {
228 base::hash_map<RenderPassId, int>::const_iterator found = 233 RenderPassToIndexMap::const_iterator found =
229 render_passes_index_by_id_.find(delegated_render_pass_id); 234 render_passes_index_by_id_.find(delegated_render_pass_id);
230 if (found == render_passes_index_by_id_.end()) { 235 if (found == render_passes_index_by_id_.end()) {
231 // Be robust against a RenderPass id that isn't part of the frame. 236 // Be robust against a RenderPass id that isn't part of the frame.
232 return false; 237 return false;
233 } 238 }
234 unsigned delegated_render_pass_index = found->second; 239 size_t delegated_render_pass_index = found->second;
235 *output_render_pass_id = 240 *output_render_pass_id =
236 RenderPassId(id(), IndexToId(delegated_render_pass_index)); 241 RenderPassId(id(), IndexToId(delegated_render_pass_index));
237 return true; 242 return true;
238 } 243 }
239 244
240 void DelegatedRendererLayerImpl::AppendContributingRenderPasses( 245 void DelegatedRendererLayerImpl::AppendContributingRenderPasses(
241 RenderPassSink* render_pass_sink) { 246 RenderPassSink* render_pass_sink) {
242 DCHECK(HasContributingDelegatedRenderPasses()); 247 DCHECK(HasContributingDelegatedRenderPasses());
243 248
244 const RenderPass* root_delegated_render_pass = 249 const RenderPass* root_delegated_render_pass =
245 render_passes_in_draw_order_.back(); 250 render_passes_in_draw_order_.back();
246 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); 251 gfx::Size frame_size = root_delegated_render_pass->output_rect.size();
247 gfx::Transform delegated_frame_to_root_transform = screen_space_transform(); 252 gfx::Transform delegated_frame_to_root_transform = screen_space_transform();
248 delegated_frame_to_root_transform.Scale(inverse_device_scale_factor_, 253 delegated_frame_to_root_transform.Scale(inverse_device_scale_factor_,
249 inverse_device_scale_factor_); 254 inverse_device_scale_factor_);
250 255
251 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { 256 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) {
252 RenderPassId output_render_pass_id(-1, -1); 257 RenderPassId output_render_pass_id;
253 bool present = 258 bool present =
254 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id, 259 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id,
255 &output_render_pass_id); 260 &output_render_pass_id);
256 261
257 // Don't clash with the RenderPass we generate if we own a RenderSurface. 262 // Don't clash with the RenderPass we generate if we own a RenderSurface.
258 DCHECK(present) << render_passes_in_draw_order_[i]->id.layer_id << ", " 263 DCHECK(present) << render_passes_in_draw_order_[i]->id.layer_id << ", "
259 << render_passes_in_draw_order_[i]->id.index; 264 << render_passes_in_draw_order_[i]->id.index;
260 DCHECK_GT(output_render_pass_id.index, 0); 265 DCHECK_GT(output_render_pass_id.index, 0u);
261 266
262 scoped_ptr<RenderPass> copy_pass = 267 scoped_ptr<RenderPass> copy_pass =
263 render_passes_in_draw_order_[i]->Copy(output_render_pass_id); 268 render_passes_in_draw_order_[i]->Copy(output_render_pass_id);
264 copy_pass->transform_to_root_target.ConcatTransform( 269 copy_pass->transform_to_root_target.ConcatTransform(
265 delegated_frame_to_root_transform); 270 delegated_frame_to_root_transform);
266 render_pass_sink->AppendRenderPass(copy_pass.Pass()); 271 render_pass_sink->AppendRenderPass(copy_pass.Pass());
267 } 272 }
268 } 273 }
269 274
270 bool DelegatedRendererLayerImpl::WillDraw(DrawMode draw_mode, 275 bool DelegatedRendererLayerImpl::WillDraw(DrawMode draw_mode,
(...skipping 30 matching lines...) Expand all
301 // render_target. 306 // render_target.
302 DCHECK(target_render_pass_id.layer_id == render_target()->id()); 307 DCHECK(target_render_pass_id.layer_id == render_target()->id());
303 308
304 AppendRenderPassQuads(render_pass, 309 AppendRenderPassQuads(render_pass,
305 root_delegated_render_pass, 310 root_delegated_render_pass,
306 frame_size); 311 frame_size);
307 } else { 312 } else {
308 // Verify that the RenderPass we are appending to was created by us. 313 // Verify that the RenderPass we are appending to was created by us.
309 DCHECK(target_render_pass_id.layer_id == id()); 314 DCHECK(target_render_pass_id.layer_id == id());
310 315
311 int render_pass_index = IdToIndex(target_render_pass_id.index); 316 size_t render_pass_index = IdToIndex(target_render_pass_id.index);
312 const RenderPass* delegated_render_pass = 317 const RenderPass* delegated_render_pass =
313 render_passes_in_draw_order_[render_pass_index]; 318 render_passes_in_draw_order_[render_pass_index];
314 AppendRenderPassQuads(render_pass, 319 AppendRenderPassQuads(render_pass,
315 delegated_render_pass, 320 delegated_render_pass,
316 frame_size); 321 frame_size);
317 } 322 }
318 } 323 }
319 324
320 void DelegatedRendererLayerImpl::AppendRainbowDebugBorder( 325 void DelegatedRendererLayerImpl::AppendRainbowDebugBorder(
321 RenderPass* render_pass) { 326 RenderPass* render_pass) {
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 continue; 484 continue;
480 485
481 if (delegated_quad->material != DrawQuad::RENDER_PASS) { 486 if (delegated_quad->material != DrawQuad::RENDER_PASS) {
482 DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad( 487 DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad(
483 delegated_quad, output_shared_quad_state); 488 delegated_quad, output_shared_quad_state);
484 output_quad->visible_rect = quad_visible_rect; 489 output_quad->visible_rect = quad_visible_rect;
485 ValidateQuadResources(output_quad); 490 ValidateQuadResources(output_quad);
486 } else { 491 } else {
487 RenderPassId delegated_contributing_render_pass_id = 492 RenderPassId delegated_contributing_render_pass_id =
488 RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id; 493 RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id;
489 RenderPassId output_contributing_render_pass_id(-1, -1); 494 RenderPassId output_contributing_render_pass_id;
490 495
491 bool present = 496 bool present =
492 ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id, 497 ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id,
493 &output_contributing_render_pass_id); 498 &output_contributing_render_pass_id);
494 // |present| being false means the child compositor sent an invalid frame. 499 // |present| being false means the child compositor sent an invalid frame.
495 DCHECK(present); 500 DCHECK(present);
496 DCHECK(output_contributing_render_pass_id != render_pass->id); 501 DCHECK(output_contributing_render_pass_id != render_pass->id);
497 502
498 RenderPassDrawQuad* output_quad = 503 RenderPassDrawQuad* output_quad =
499 render_pass->CopyFromAndAppendRenderPassDrawQuad( 504 render_pass->CopyFromAndAppendRenderPassDrawQuad(
(...skipping 16 matching lines...) Expand all
516 if (own_child_id_) { 521 if (own_child_id_) {
517 ResourceProvider* provider = layer_tree_impl()->resource_provider(); 522 ResourceProvider* provider = layer_tree_impl()->resource_provider();
518 provider->DestroyChild(child_id_); 523 provider->DestroyChild(child_id_);
519 } 524 }
520 525
521 resources_.clear(); 526 resources_.clear();
522 child_id_ = 0; 527 child_id_ = 0;
523 } 528 }
524 529
525 } // namespace cc 530 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698