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

Side by Side Diff: cc/layers/layer.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 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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/layer.h" 5 #include "cc/layers/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/atomic_sequence_num.h" 9 #include "base/atomic_sequence_num.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 } 330 }
331 331
332 void Layer::ReplaceChild(Layer* reference, scoped_refptr<Layer> new_layer) { 332 void Layer::ReplaceChild(Layer* reference, scoped_refptr<Layer> new_layer) {
333 DCHECK(reference); 333 DCHECK(reference);
334 DCHECK_EQ(reference->parent(), this); 334 DCHECK_EQ(reference->parent(), this);
335 DCHECK(IsPropertyChangeAllowed()); 335 DCHECK(IsPropertyChangeAllowed());
336 336
337 if (reference == new_layer.get()) 337 if (reference == new_layer.get())
338 return; 338 return;
339 339
340 int reference_index = IndexOfChild(reference); 340 // Find the index of |reference| in |children_|.
341 if (reference_index == -1) { 341 auto reference_it =
342 NOTREACHED(); 342 std::find_if(children_.begin(), children_.end(),
343 return; 343 [reference](const scoped_refptr<Layer>& layer) {
344 } 344 return layer.get() == reference;
345 345 });
346 DCHECK(reference_it != children_.end());
347 size_t reference_index = reference_it - children_.begin();
346 reference->RemoveFromParent(); 348 reference->RemoveFromParent();
347 349
348 if (new_layer.get()) { 350 if (new_layer.get()) {
349 new_layer->RemoveFromParent(); 351 new_layer->RemoveFromParent();
350 InsertChild(new_layer, reference_index); 352 InsertChild(new_layer, reference_index);
351 } 353 }
352 } 354 }
353 355
354 int Layer::IndexOfChild(const Layer* reference) {
355 for (size_t i = 0; i < children_.size(); ++i) {
356 if (children_[i].get() == reference)
357 return i;
358 }
359 return -1;
360 }
361
362 void Layer::SetBounds(const gfx::Size& size) { 356 void Layer::SetBounds(const gfx::Size& size) {
363 DCHECK(IsPropertyChangeAllowed()); 357 DCHECK(IsPropertyChangeAllowed());
364 if (bounds() == size) 358 if (bounds() == size)
365 return; 359 return;
366 bounds_ = size; 360 bounds_ = size;
367 361
368 if (!layer_tree_host_) 362 if (!layer_tree_host_)
369 return; 363 return;
370 364
371 if (ClipNode* clip_node = layer_tree_host_->property_trees()->clip_tree.Node( 365 if (ClipNode* clip_node = layer_tree_host_->property_trees()->clip_tree.Node(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 for (const Layer* layer = parent(); layer; layer = layer->parent()) { 403 for (const Layer* layer = parent(); layer; layer = layer->parent()) {
410 if (layer == ancestor) 404 if (layer == ancestor)
411 return true; 405 return true;
412 } 406 }
413 return false; 407 return false;
414 } 408 }
415 409
416 void Layer::RequestCopyOfOutput( 410 void Layer::RequestCopyOfOutput(
417 scoped_ptr<CopyOutputRequest> request) { 411 scoped_ptr<CopyOutputRequest> request) {
418 DCHECK(IsPropertyChangeAllowed()); 412 DCHECK(IsPropertyChangeAllowed());
419 int size = copy_requests_.size(); 413 bool had_no_copy_requests = copy_requests_.empty();
420 if (void* source = request->source()) { 414 if (void* source = request->source()) {
421 auto it = std::find_if( 415 auto it = std::find_if(
422 copy_requests_.begin(), copy_requests_.end(), 416 copy_requests_.begin(), copy_requests_.end(),
423 [source](const CopyOutputRequest* x) { return x->source() == source; }); 417 [source](const CopyOutputRequest* x) { return x->source() == source; });
424 if (it != copy_requests_.end()) 418 if (it != copy_requests_.end())
425 copy_requests_.erase(it); 419 copy_requests_.erase(it);
426 } 420 }
427 if (request->IsEmpty()) 421 if (request->IsEmpty())
428 return; 422 return;
429 copy_requests_.push_back(request.Pass()); 423 copy_requests_.push_back(request.Pass());
430 if (size == 0) { 424 if (had_no_copy_requests) {
431 bool copy_request_added = true; 425 bool copy_request_added = true;
432 UpdateNumCopyRequestsForSubtree(copy_request_added); 426 UpdateNumCopyRequestsForSubtree(copy_request_added);
433 } 427 }
434 SetNeedsCommit(); 428 SetNeedsCommit();
435 } 429 }
436 430
437 void Layer::UpdateNumCopyRequestsForSubtree(bool add) { 431 void Layer::UpdateNumCopyRequestsForSubtree(bool add) {
438 int change = add ? 1 : -1; 432 int change = add ? 1 : -1;
439 for (Layer* layer = this; layer; layer = layer->parent()) { 433 for (Layer* layer = this; layer; layer = layer->parent()) {
440 layer->num_layer_or_descendants_with_copy_request_ += change; 434 layer->num_layer_or_descendants_with_copy_request_ += change;
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 // the pending tree will clobber any impl-side scrolling occuring on the 1261 // the pending tree will clobber any impl-side scrolling occuring on the
1268 // active tree. To do so, avoid scrolling the pending tree along with it 1262 // active tree. To do so, avoid scrolling the pending tree along with it
1269 // instead of trying to undo that scrolling later. 1263 // instead of trying to undo that scrolling later.
1270 if (layer_animation_controller_->scroll_offset_animation_was_interrupted()) 1264 if (layer_animation_controller_->scroll_offset_animation_was_interrupted())
1271 layer->PushScrollOffsetFromMainThreadAndClobberActiveValue(scroll_offset_); 1265 layer->PushScrollOffsetFromMainThreadAndClobberActiveValue(scroll_offset_);
1272 else 1266 else
1273 layer->PushScrollOffsetFromMainThread(scroll_offset_); 1267 layer->PushScrollOffsetFromMainThread(scroll_offset_);
1274 layer->SetScrollCompensationAdjustment(ScrollCompensationAdjustment()); 1268 layer->SetScrollCompensationAdjustment(ScrollCompensationAdjustment());
1275 1269
1276 // Wrap the copy_requests_ in a PostTask to the main thread. 1270 // Wrap the copy_requests_ in a PostTask to the main thread.
1277 int size = copy_requests_.size(); 1271 bool had_copy_requests = !copy_requests_.empty();
1278 ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests; 1272 ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests;
1279 for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin(); 1273 for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin();
1280 it != copy_requests_.end(); 1274 it != copy_requests_.end();
1281 ++it) { 1275 ++it) {
1282 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner = 1276 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner =
1283 layer_tree_host()->proxy()->MainThreadTaskRunner(); 1277 layer_tree_host()->proxy()->MainThreadTaskRunner();
1284 scoped_ptr<CopyOutputRequest> original_request = copy_requests_.take(it); 1278 scoped_ptr<CopyOutputRequest> original_request = copy_requests_.take(it);
1285 const CopyOutputRequest& original_request_ref = *original_request; 1279 const CopyOutputRequest& original_request_ref = *original_request;
1286 scoped_ptr<CopyOutputRequest> main_thread_request = 1280 scoped_ptr<CopyOutputRequest> main_thread_request =
1287 CopyOutputRequest::CreateRelayRequest( 1281 CopyOutputRequest::CreateRelayRequest(
1288 original_request_ref, 1282 original_request_ref,
1289 base::Bind(&PostCopyCallbackToMainThread, 1283 base::Bind(&PostCopyCallbackToMainThread,
1290 main_thread_task_runner, 1284 main_thread_task_runner,
1291 base::Passed(&original_request))); 1285 base::Passed(&original_request)));
1292 main_thread_copy_requests.push_back(main_thread_request.Pass()); 1286 main_thread_copy_requests.push_back(main_thread_request.Pass());
1293 } 1287 }
1294 if (!copy_requests_.empty() && layer_tree_host_) 1288 if (!copy_requests_.empty() && layer_tree_host_)
1295 layer_tree_host_->property_trees()->needs_rebuild = true; 1289 layer_tree_host_->property_trees()->needs_rebuild = true;
1296 if (size != 0) 1290 if (had_copy_requests)
1297 UpdateNumCopyRequestsForSubtree(false); 1291 UpdateNumCopyRequestsForSubtree(false);
1298 copy_requests_.clear(); 1292 copy_requests_.clear();
1299 layer->PassCopyRequests(&main_thread_copy_requests); 1293 layer->PassCopyRequests(&main_thread_copy_requests);
1300 1294
1301 // If the main thread commits multiple times before the impl thread actually 1295 // If the main thread commits multiple times before the impl thread actually
1302 // draws, then damage tracking will become incorrect if we simply clobber the 1296 // draws, then damage tracking will become incorrect if we simply clobber the
1303 // update_rect here. The LayerImpl's update_rect needs to accumulate (i.e. 1297 // update_rect here. The LayerImpl's update_rect needs to accumulate (i.e.
1304 // union) any update changes that have occurred on the main thread. 1298 // union) any update changes that have occurred on the main thread.
1305 update_rect_.Union(layer->update_rect()); 1299 update_rect_.Union(layer->update_rect());
1306 layer->SetUpdateRect(update_rect_); 1300 layer->SetUpdateRect(update_rect_);
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 ? layer_tree_host()->meta_information_sequence_number() 1641 ? layer_tree_host()->meta_information_sequence_number()
1648 : 0; 1642 : 0;
1649 } 1643 }
1650 1644
1651 bool Layer::sorted_for_recursion() { 1645 bool Layer::sorted_for_recursion() {
1652 return sorted_for_recursion_tracker_ == 1646 return sorted_for_recursion_tracker_ ==
1653 layer_tree_host()->meta_information_sequence_number(); 1647 layer_tree_host()->meta_information_sequence_number();
1654 } 1648 }
1655 1649
1656 } // namespace cc 1650 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/layer.h ('k') | cc/layers/layer_impl.cc » ('j') | cc/output/gl_renderer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698