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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 1413053004: cc: Remove LayerTreeHostImpl::FrameData::render_passes_by_id. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: renderpasshashmap: windows Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_impl.cc
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 9f1efdcdadbd9853f533b60d065aee811459e38f..ff8670c009adf7375dbfbf948a0a3d51434b1224 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -638,7 +638,6 @@ void LayerTreeHostImpl::FrameData::AsValueInto(
void LayerTreeHostImpl::FrameData::AppendRenderPass(
scoped_ptr<RenderPass> render_pass) {
- render_passes_by_id[render_pass->id] = render_pass.get();
render_passes.push_back(render_pass.Pass());
}
@@ -738,6 +737,13 @@ static void AppendQuadsToFillScreen(const gfx::Rect& root_scroll_layer_rect,
}
}
+static RenderPass* FindRenderPassById(const RenderPassList& list,
+ RenderPassId id) {
+ auto it = std::find_if(list.begin(), list.end(),
+ [id](const RenderPass* p) { return p->id == id; });
+ return it == list.end() ? nullptr : *it;
+}
+
DrawResult LayerTreeHostImpl::CalculateRenderPasses(
FrameData* frame) {
DCHECK(frame->render_passes.empty());
@@ -847,7 +853,7 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses(
RenderPassId target_render_pass_id =
it.target_render_surface_layer()->render_surface()->GetRenderPassId();
RenderPass* target_render_pass =
- frame->render_passes_by_id[target_render_pass_id];
+ FindRenderPassById(frame->render_passes, target_render_pass_id);
AppendQuadsData append_quads_data;
@@ -862,7 +868,7 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses(
RenderPassId contributing_render_pass_id =
it->render_surface()->GetRenderPassId();
RenderPass* contributing_render_pass =
- frame->render_passes_by_id[contributing_render_pass_id];
+ FindRenderPassById(frame->render_passes, contributing_render_pass_id);
AppendQuadsForRenderSurfaceLayer(target_render_pass,
*it,
contributing_render_pass,
@@ -879,13 +885,12 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses(
if (it->HasContributingDelegatedRenderPasses()) {
RenderPassId contributing_render_pass_id =
it->FirstContributingRenderPassId();
- while (frame->render_passes_by_id.find(contributing_render_pass_id) !=
- frame->render_passes_by_id.end()) {
- RenderPass* render_pass =
- frame->render_passes_by_id[contributing_render_pass_id];
-
- it->AppendQuads(render_pass, &append_quads_data);
-
+ while (true) {
+ RenderPass* pass = FindRenderPassById(frame->render_passes,
+ contributing_render_pass_id);
+ if (!pass)
+ break;
+ it->AppendQuads(pass, &append_quads_data);
contributing_render_pass_id =
it->NextContributingRenderPassId(contributing_render_pass_id);
}
@@ -956,11 +961,9 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses(
for (const auto& render_pass : frame->render_passes) {
for (const auto& quad : render_pass->quad_list)
DCHECK(quad->shared_quad_state);
- DCHECK(frame->render_passes_by_id.find(render_pass->id) !=
- frame->render_passes_by_id.end());
}
-#endif
DCHECK(frame->render_passes.back()->output_rect.origin().IsOrigin());
+#endif
if (!active_tree_->has_transparent_background()) {
frame->render_passes.back()->has_transparent_background = false;
@@ -1076,7 +1079,6 @@ DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) {
frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList();
frame->render_passes.clear();
- frame->render_passes_by_id.clear();
frame->will_draw_layers.clear();
frame->has_no_damage = false;
@@ -1140,7 +1142,6 @@ void LayerTreeHostImpl::RemoveRenderPasses(FrameData* frame) {
if (pass->quad_list.empty() && pass->copy_requests.empty()) {
// Remove the pass and decrement |i| to counter the for loop's increment,
// so we don't skip the next pass in the loop.
- frame->render_passes_by_id.erase(pass->id);
frame->render_passes.erase(frame->render_passes.begin() + i);
--i;
continue;
@@ -1169,7 +1170,6 @@ void LayerTreeHostImpl::RemoveRenderPasses(FrameData* frame) {
pass_references[quad->render_pass_id]--;
}
- frame->render_passes_by_id.erase(pass->id);
frame->render_passes.erase(frame->render_passes.end() - 2 - i);
--i;
}
@@ -1630,7 +1630,6 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame) {
}
// The render passes should be consumed by the renderer.
DCHECK(frame->render_passes.empty());
- frame->render_passes_by_id.clear();
// The next frame should start by assuming nothing has changed, and changes
// are noted as they occur.
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698