OLD | NEW |
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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 } | 344 } |
345 | 345 |
346 bool Layer::HasAncestor(const Layer* ancestor) const { | 346 bool Layer::HasAncestor(const Layer* ancestor) const { |
347 for (const Layer* layer = parent(); layer; layer = layer->parent()) { | 347 for (const Layer* layer = parent(); layer; layer = layer->parent()) { |
348 if (layer == ancestor) | 348 if (layer == ancestor) |
349 return true; | 349 return true; |
350 } | 350 } |
351 return false; | 351 return false; |
352 } | 352 } |
353 | 353 |
354 void Layer::RequestCopyOfOutput( | 354 void Layer::RequestCopyOfOutput(std::unique_ptr<CopyOutputRequest> request) { |
355 scoped_ptr<CopyOutputRequest> request) { | |
356 DCHECK(IsPropertyChangeAllowed()); | 355 DCHECK(IsPropertyChangeAllowed()); |
357 if (void* source = request->source()) { | 356 if (void* source = request->source()) { |
358 auto it = std::find_if(copy_requests_.begin(), copy_requests_.end(), | 357 auto it = |
359 [source](const scoped_ptr<CopyOutputRequest>& x) { | 358 std::find_if(copy_requests_.begin(), copy_requests_.end(), |
360 return x->source() == source; | 359 [source](const std::unique_ptr<CopyOutputRequest>& x) { |
361 }); | 360 return x->source() == source; |
| 361 }); |
362 if (it != copy_requests_.end()) | 362 if (it != copy_requests_.end()) |
363 copy_requests_.erase(it); | 363 copy_requests_.erase(it); |
364 } | 364 } |
365 if (request->IsEmpty()) | 365 if (request->IsEmpty()) |
366 return; | 366 return; |
367 copy_requests_.push_back(std::move(request)); | 367 copy_requests_.push_back(std::move(request)); |
368 SetSubtreePropertyChanged(); | 368 SetSubtreePropertyChanged(); |
369 SetNeedsCommit(); | 369 SetNeedsCommit(); |
370 } | 370 } |
371 | 371 |
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1089 } | 1089 } |
1090 | 1090 |
1091 void Layer::SetPositionConstraint(const LayerPositionConstraint& constraint) { | 1091 void Layer::SetPositionConstraint(const LayerPositionConstraint& constraint) { |
1092 DCHECK(IsPropertyChangeAllowed()); | 1092 DCHECK(IsPropertyChangeAllowed()); |
1093 if (position_constraint_ == constraint) | 1093 if (position_constraint_ == constraint) |
1094 return; | 1094 return; |
1095 position_constraint_ = constraint; | 1095 position_constraint_ = constraint; |
1096 SetNeedsCommit(); | 1096 SetNeedsCommit(); |
1097 } | 1097 } |
1098 | 1098 |
1099 static void RunCopyCallbackOnMainThread(scoped_ptr<CopyOutputRequest> request, | 1099 static void RunCopyCallbackOnMainThread( |
1100 scoped_ptr<CopyOutputResult> result) { | 1100 std::unique_ptr<CopyOutputRequest> request, |
| 1101 std::unique_ptr<CopyOutputResult> result) { |
1101 request->SendResult(std::move(result)); | 1102 request->SendResult(std::move(result)); |
1102 } | 1103 } |
1103 | 1104 |
1104 static void PostCopyCallbackToMainThread( | 1105 static void PostCopyCallbackToMainThread( |
1105 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, | 1106 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, |
1106 scoped_ptr<CopyOutputRequest> request, | 1107 std::unique_ptr<CopyOutputRequest> request, |
1107 scoped_ptr<CopyOutputResult> result) { | 1108 std::unique_ptr<CopyOutputResult> result) { |
1108 main_thread_task_runner->PostTask(FROM_HERE, | 1109 main_thread_task_runner->PostTask(FROM_HERE, |
1109 base::Bind(&RunCopyCallbackOnMainThread, | 1110 base::Bind(&RunCopyCallbackOnMainThread, |
1110 base::Passed(&request), | 1111 base::Passed(&request), |
1111 base::Passed(&result))); | 1112 base::Passed(&result))); |
1112 } | 1113 } |
1113 | 1114 |
1114 void Layer::PushPropertiesTo(LayerImpl* layer) { | 1115 void Layer::PushPropertiesTo(LayerImpl* layer) { |
1115 TRACE_EVENT0("cc", "Layer::PushPropertiesTo"); | 1116 TRACE_EVENT0("cc", "Layer::PushPropertiesTo"); |
1116 DCHECK(layer_tree_host_); | 1117 DCHECK(layer_tree_host_); |
1117 | 1118 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1235 // active tree. To do so, avoid scrolling the pending tree along with it | 1236 // active tree. To do so, avoid scrolling the pending tree along with it |
1236 // instead of trying to undo that scrolling later. | 1237 // instead of trying to undo that scrolling later. |
1237 if (ScrollOffsetAnimationWasInterrupted()) | 1238 if (ScrollOffsetAnimationWasInterrupted()) |
1238 layer_tree_host() | 1239 layer_tree_host() |
1239 ->property_trees() | 1240 ->property_trees() |
1240 ->scroll_tree.SetScrollOffsetClobberActiveValue(layer->id()); | 1241 ->scroll_tree.SetScrollOffsetClobberActiveValue(layer->id()); |
1241 | 1242 |
1242 { | 1243 { |
1243 TRACE_EVENT0("cc", "Layer::PushPropertiesTo::CopyOutputRequests"); | 1244 TRACE_EVENT0("cc", "Layer::PushPropertiesTo::CopyOutputRequests"); |
1244 // Wrap the copy_requests_ in a PostTask to the main thread. | 1245 // Wrap the copy_requests_ in a PostTask to the main thread. |
1245 std::vector<scoped_ptr<CopyOutputRequest>> main_thread_copy_requests; | 1246 std::vector<std::unique_ptr<CopyOutputRequest>> main_thread_copy_requests; |
1246 for (auto it = copy_requests_.begin(); it != copy_requests_.end(); ++it) { | 1247 for (auto it = copy_requests_.begin(); it != copy_requests_.end(); ++it) { |
1247 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner = | 1248 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner = |
1248 layer_tree_host()->task_runner_provider()->MainThreadTaskRunner(); | 1249 layer_tree_host()->task_runner_provider()->MainThreadTaskRunner(); |
1249 scoped_ptr<CopyOutputRequest> original_request = std::move(*it); | 1250 std::unique_ptr<CopyOutputRequest> original_request = std::move(*it); |
1250 const CopyOutputRequest& original_request_ref = *original_request; | 1251 const CopyOutputRequest& original_request_ref = *original_request; |
1251 scoped_ptr<CopyOutputRequest> main_thread_request = | 1252 std::unique_ptr<CopyOutputRequest> main_thread_request = |
1252 CopyOutputRequest::CreateRelayRequest( | 1253 CopyOutputRequest::CreateRelayRequest( |
1253 original_request_ref, | 1254 original_request_ref, |
1254 base::Bind(&PostCopyCallbackToMainThread, main_thread_task_runner, | 1255 base::Bind(&PostCopyCallbackToMainThread, main_thread_task_runner, |
1255 base::Passed(&original_request))); | 1256 base::Passed(&original_request))); |
1256 main_thread_copy_requests.push_back(std::move(main_thread_request)); | 1257 main_thread_copy_requests.push_back(std::move(main_thread_request)); |
1257 } | 1258 } |
1258 if (!copy_requests_.empty() && layer_tree_host_) | 1259 if (!copy_requests_.empty() && layer_tree_host_) |
1259 layer_tree_host_->property_trees()->needs_rebuild = true; | 1260 layer_tree_host_->property_trees()->needs_rebuild = true; |
1260 | 1261 |
1261 copy_requests_.clear(); | 1262 copy_requests_.clear(); |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1567 int child_id = base.clip_children_ids(i); | 1568 int child_id = base.clip_children_ids(i); |
1568 scoped_refptr<Layer> child = layer_tree_host_->LayerById(child_id); | 1569 scoped_refptr<Layer> child = layer_tree_host_->LayerById(child_id); |
1569 clip_children_->insert(child.get()); | 1570 clip_children_->insert(child.get()); |
1570 } | 1571 } |
1571 | 1572 |
1572 scroll_offset_ = ProtoToScrollOffset(base.scroll_offset()); | 1573 scroll_offset_ = ProtoToScrollOffset(base.scroll_offset()); |
1573 | 1574 |
1574 update_rect_.Union(ProtoToRect(base.update_rect())); | 1575 update_rect_.Union(ProtoToRect(base.update_rect())); |
1575 } | 1576 } |
1576 | 1577 |
1577 scoped_ptr<LayerImpl> Layer::CreateLayerImpl(LayerTreeImpl* tree_impl) { | 1578 std::unique_ptr<LayerImpl> Layer::CreateLayerImpl(LayerTreeImpl* tree_impl) { |
1578 return LayerImpl::Create(tree_impl, layer_id_); | 1579 return LayerImpl::Create(tree_impl, layer_id_); |
1579 } | 1580 } |
1580 | 1581 |
1581 bool Layer::DrawsContent() const { | 1582 bool Layer::DrawsContent() const { |
1582 return draws_content_; | 1583 return draws_content_; |
1583 } | 1584 } |
1584 | 1585 |
1585 bool Layer::HasDrawableContent() const { | 1586 bool Layer::HasDrawableContent() const { |
1586 return is_drawable_; | 1587 return is_drawable_; |
1587 } | 1588 } |
(...skipping 30 matching lines...) Expand all Loading... |
1618 DCHECK_EQ(layer_tree_host_->source_frame_number(), | 1619 DCHECK_EQ(layer_tree_host_->source_frame_number(), |
1619 paint_properties_.source_frame_number) << | 1620 paint_properties_.source_frame_number) << |
1620 "SavePaintProperties must be called for any layer that is painted."; | 1621 "SavePaintProperties must be called for any layer that is painted."; |
1621 return false; | 1622 return false; |
1622 } | 1623 } |
1623 | 1624 |
1624 bool Layer::IsSuitableForGpuRasterization() const { | 1625 bool Layer::IsSuitableForGpuRasterization() const { |
1625 return true; | 1626 return true; |
1626 } | 1627 } |
1627 | 1628 |
1628 scoped_ptr<base::trace_event::ConvertableToTraceFormat> Layer::TakeDebugInfo() { | 1629 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> |
| 1630 Layer::TakeDebugInfo() { |
1629 if (client_) | 1631 if (client_) |
1630 return client_->TakeDebugInfo(this); | 1632 return client_->TakeDebugInfo(this); |
1631 else | 1633 else |
1632 return nullptr; | 1634 return nullptr; |
1633 } | 1635 } |
1634 | 1636 |
1635 void Layer::SetHasRenderSurface(bool has_render_surface) { | 1637 void Layer::SetHasRenderSurface(bool has_render_surface) { |
1636 if (has_render_surface_ == has_render_surface) | 1638 if (has_render_surface_ == has_render_surface) |
1637 return; | 1639 return; |
1638 has_render_surface_ = has_render_surface; | 1640 has_render_surface_ = has_render_surface; |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1836 ->data.num_copy_requests_in_subtree; | 1838 ->data.num_copy_requests_in_subtree; |
1837 } | 1839 } |
1838 | 1840 |
1839 gfx::Transform Layer::screen_space_transform() const { | 1841 gfx::Transform Layer::screen_space_transform() const { |
1840 DCHECK_NE(transform_tree_index_, -1); | 1842 DCHECK_NE(transform_tree_index_, -1); |
1841 return draw_property_utils::ScreenSpaceTransform( | 1843 return draw_property_utils::ScreenSpaceTransform( |
1842 this, layer_tree_host_->property_trees()->transform_tree); | 1844 this, layer_tree_host_->property_trees()->transform_tree); |
1843 } | 1845 } |
1844 | 1846 |
1845 } // namespace cc | 1847 } // namespace cc |
OLD | NEW |