Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 26 matching lines...) Expand all Loading... | |
| 37 | 37 |
| 38 bool DelegatedRendererLayerImpl::HasDelegatedContent() const { return true; } | 38 bool DelegatedRendererLayerImpl::HasDelegatedContent() const { return true; } |
| 39 | 39 |
| 40 bool DelegatedRendererLayerImpl::HasContributingDelegatedRenderPasses() const { | 40 bool DelegatedRendererLayerImpl::HasContributingDelegatedRenderPasses() const { |
| 41 // The root RenderPass for the layer is merged with its target | 41 // The root RenderPass for the layer is merged with its target |
| 42 // RenderPass in each frame. So we only have extra RenderPasses | 42 // RenderPass in each frame. So we only have extra RenderPasses |
| 43 // to merge when we have a non-root RenderPass present. | 43 // to merge when we have a non-root RenderPass present. |
| 44 return render_passes_in_draw_order_.size() > 1; | 44 return render_passes_in_draw_order_.size() > 1; |
| 45 } | 45 } |
| 46 | 46 |
| 47 static ResourceId ResourceRemapHelper( | |
| 48 bool* invalid_frame, | |
| 49 const ResourceProvider::ResourceIdMap& child_to_parent_map, | |
| 50 ResourceProvider::ResourceIdSet* resources_in_frame, | |
| 51 ResourceId id) { | |
| 52 ResourceProvider::ResourceIdMap::const_iterator it = | |
| 53 child_to_parent_map.find(id); | |
| 54 if (it == child_to_parent_map.end()) { | |
| 55 *invalid_frame = true; | |
| 56 return 0; | |
| 57 } | |
| 58 | |
| 59 DCHECK_EQ(it->first, id); | |
| 60 ResourceId remapped_id = it->second; | |
| 61 resources_in_frame->insert(id); | |
| 62 return remapped_id; | |
| 63 } | |
| 64 | |
| 65 void DelegatedRendererLayerImpl::PushPropertiesTo(LayerImpl* layer) { | 47 void DelegatedRendererLayerImpl::PushPropertiesTo(LayerImpl* layer) { |
| 66 LayerImpl::PushPropertiesTo(layer); | 48 LayerImpl::PushPropertiesTo(layer); |
| 67 | 49 |
| 68 DelegatedRendererLayerImpl* delegated_layer = | 50 DelegatedRendererLayerImpl* delegated_layer = |
| 69 static_cast<DelegatedRendererLayerImpl*>(layer); | 51 static_cast<DelegatedRendererLayerImpl*>(layer); |
| 70 | 52 |
| 71 // If we have a new child_id to give to the active layer, it should | 53 // If we have a new child_id to give to the active layer, it should |
| 72 // have already deleted its old child_id. | 54 // have already deleted its old child_id. |
| 73 DCHECK(delegated_layer->child_id_ == 0 || | 55 DCHECK(delegated_layer->child_id_ == 0 || |
| 74 delegated_layer->child_id_ == child_id_); | 56 delegated_layer->child_id_ == child_id_); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 127 #if defined(COMPILER_MSVC) | 109 #if defined(COMPILER_MSVC) |
| 128 resources_in_frame.reserve(reserve_size); | 110 resources_in_frame.reserve(reserve_size); |
| 129 #elif defined(COMPILER_GCC) | 111 #elif defined(COMPILER_GCC) |
| 130 // Pre-standard hash-tables only implement resize, which behaves similarly | 112 // Pre-standard hash-tables only implement resize, which behaves similarly |
| 131 // to reserve for these keys. Resizing to 0 may also be broken (particularly | 113 // to reserve for these keys. Resizing to 0 may also be broken (particularly |
| 132 // on stlport). | 114 // on stlport). |
| 133 // TODO(jbauman): Replace with reserve when C++11 is supported everywhere. | 115 // TODO(jbauman): Replace with reserve when C++11 is supported everywhere. |
| 134 if (reserve_size) | 116 if (reserve_size) |
| 135 resources_in_frame.resize(reserve_size); | 117 resources_in_frame.resize(reserve_size); |
| 136 #endif | 118 #endif |
| 137 DrawQuad::ResourceIteratorCallback remap_resources_to_parent_callback = | |
| 138 base::Bind(&ResourceRemapHelper, | |
| 139 &invalid_frame, | |
| 140 resource_map, | |
| 141 &resources_in_frame); | |
| 142 for (const auto& pass : render_pass_list) { | 119 for (const auto& pass : render_pass_list) { |
| 143 for (const auto& quad : pass->quad_list) | 120 for (const auto& quad : pass->quad_list) { |
| 144 quad->IterateResources(remap_resources_to_parent_callback); | 121 for (ResourceId& resource_id : quad->resources) { |
| 122 ResourceProvider::ResourceIdMap::const_iterator it = | |
| 123 resource_map.find(resource_id); | |
| 124 if (it == resource_map.end()) { | |
| 125 invalid_frame = true; | |
| 126 resource_id = 0; | |
| 127 continue; | |
|
piman
2015/05/28 19:35:46
You can break here actually.
vmpstr
2015/05/28 22:36:58
Done. Should resource_id be set to 0 here? It's in
| |
| 128 } | |
| 129 | |
| 130 DCHECK_EQ(it->first, resource_id); | |
| 131 ResourceId remapped_id = it->second; | |
| 132 resources_in_frame.insert(resource_id); | |
| 133 resource_id = remapped_id; | |
| 134 } | |
| 135 } | |
| 145 } | 136 } |
| 146 | 137 |
| 147 if (invalid_frame) { | 138 if (invalid_frame) { |
| 148 // Declare we are still using the last frame's resources. Drops ownership of | 139 // Declare we are still using the last frame's resources. Drops ownership of |
| 149 // any invalid resources, keeping only those in use by the active tree. | 140 // any invalid resources, keeping only those in use by the active tree. |
| 150 resource_provider->DeclareUsedResourcesFromChild(child_id_, resources_); | 141 resource_provider->DeclareUsedResourcesFromChild(child_id_, resources_); |
| 151 return; | 142 return; |
| 152 } | 143 } |
| 153 | 144 |
| 154 // Save the new frame's resources, but don't give them to the ResourceProvider | 145 // Save the new frame's resources, but don't give them to the ResourceProvider |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 526 if (own_child_id_) { | 517 if (own_child_id_) { |
| 527 ResourceProvider* provider = layer_tree_impl()->resource_provider(); | 518 ResourceProvider* provider = layer_tree_impl()->resource_provider(); |
| 528 provider->DestroyChild(child_id_); | 519 provider->DestroyChild(child_id_); |
| 529 } | 520 } |
| 530 | 521 |
| 531 resources_.clear(); | 522 resources_.clear(); |
| 532 child_id_ = 0; | 523 child_id_ = 0; |
| 533 } | 524 } |
| 534 | 525 |
| 535 } // namespace cc | 526 } // namespace cc |
| OLD | NEW |