Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 149 max_transfer_buffer_usage_bytes); | 149 max_transfer_buffer_usage_bytes); |
| 150 } | 150 } |
| 151 | 151 |
| 152 size_t GetMaxStagingResourceCount() { | 152 size_t GetMaxStagingResourceCount() { |
| 153 // Upper bound for number of staging resource to allow. | 153 // Upper bound for number of staging resource to allow. |
| 154 return 32; | 154 return 32; |
| 155 } | 155 } |
| 156 | 156 |
| 157 } // namespace | 157 } // namespace |
| 158 | 158 |
| 159 LayerTreeHostImpl::FrameData::FrameData() : has_no_damage(false) { | 159 FrameData::FrameData() : has_no_damage(false) { |
| 160 } | 160 } |
| 161 | 161 |
| 162 LayerTreeHostImpl::FrameData::~FrameData() {} | 162 FrameData::~FrameData() { |
| 163 } | |
| 163 | 164 |
| 164 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( | 165 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( |
| 165 const LayerTreeSettings& settings, | 166 const LayerTreeSettings& settings, |
| 166 LayerTreeHostImplClient* client, | 167 LayerTreeHostImplClient* client, |
| 167 Proxy* proxy, | 168 Proxy* proxy, |
| 168 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 169 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
| 169 SharedBitmapManager* shared_bitmap_manager, | 170 SharedBitmapManager* shared_bitmap_manager, |
| 170 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 171 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
| 171 int id) { | 172 int id) { |
| 172 return make_scoped_ptr(new LayerTreeHostImpl(settings, | 173 return make_scoped_ptr(new LayerTreeHostImpl(settings, |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 542 render_surface->damage_tracker()->UpdateDamageTrackingState( | 543 render_surface->damage_tracker()->UpdateDamageTrackingState( |
| 543 render_surface->layer_list(), | 544 render_surface->layer_list(), |
| 544 render_surface_layer->id(), | 545 render_surface_layer->id(), |
| 545 render_surface->SurfacePropertyChangedOnlyFromDescendant(), | 546 render_surface->SurfacePropertyChangedOnlyFromDescendant(), |
| 546 render_surface->content_rect(), | 547 render_surface->content_rect(), |
| 547 render_surface_layer->mask_layer(), | 548 render_surface_layer->mask_layer(), |
| 548 render_surface_layer->filters()); | 549 render_surface_layer->filters()); |
| 549 } | 550 } |
| 550 } | 551 } |
| 551 | 552 |
| 552 void LayerTreeHostImpl::FrameData::AsValueInto( | 553 void FrameData::AsValueInto(base::trace_event::TracedValue* value) const { |
| 553 base::trace_event::TracedValue* value) const { | |
| 554 value->SetBoolean("has_no_damage", has_no_damage); | 554 value->SetBoolean("has_no_damage", has_no_damage); |
| 555 | 555 |
| 556 // Quad data can be quite large, so only dump render passes if we select | 556 // Quad data can be quite large, so only dump render passes if we select |
| 557 // cc.debug.quads. | 557 // cc.debug.quads. |
| 558 bool quads_enabled; | 558 bool quads_enabled; |
| 559 TRACE_EVENT_CATEGORY_GROUP_ENABLED( | 559 TRACE_EVENT_CATEGORY_GROUP_ENABLED( |
| 560 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); | 560 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled); |
| 561 if (quads_enabled) { | 561 if (quads_enabled) { |
| 562 value->BeginArray("render_passes"); | 562 value->BeginArray("render_passes"); |
| 563 for (size_t i = 0; i < render_passes.size(); ++i) { | 563 for (size_t i = 0; i < render_passes.size(); ++i) { |
| 564 value->BeginDictionary(); | 564 value->BeginDictionary(); |
| 565 render_passes[i]->AsValueInto(value); | 565 render_passes[i]->AsValueInto(value); |
| 566 value->EndDictionary(); | 566 value->EndDictionary(); |
| 567 } | 567 } |
| 568 value->EndArray(); | 568 value->EndArray(); |
| 569 } | 569 } |
| 570 } | 570 } |
| 571 | 571 |
| 572 void LayerTreeHostImpl::FrameData::AppendRenderPass( | 572 void FrameData::AppendRenderPass(scoped_ptr<RenderPass> render_pass) { |
| 573 scoped_ptr<RenderPass> render_pass) { | |
| 574 render_passes_by_id[render_pass->id] = render_pass.get(); | 573 render_passes_by_id[render_pass->id] = render_pass.get(); |
| 575 render_passes.push_back(render_pass.Pass()); | 574 render_passes.push_back(render_pass.Pass()); |
| 576 } | 575 } |
| 577 | 576 |
| 578 DrawMode LayerTreeHostImpl::GetDrawMode() const { | 577 DrawMode LayerTreeHostImpl::GetDrawMode() const { |
| 579 if (resourceless_software_draw_) { | 578 if (resourceless_software_draw_) { |
| 580 return DRAW_MODE_RESOURCELESS_SOFTWARE; | 579 return DRAW_MODE_RESOURCELESS_SOFTWARE; |
| 581 } else if (output_surface_->context_provider()) { | 580 } else if (output_surface_->context_provider()) { |
| 582 return DRAW_MODE_HARDWARE; | 581 return DRAW_MODE_HARDWARE; |
| 583 } else { | 582 } else { |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 942 | 941 |
| 943 void LayerTreeHostImpl::DidAnimateScrollOffset() { | 942 void LayerTreeHostImpl::DidAnimateScrollOffset() { |
| 944 client_->SetNeedsCommitOnImplThread(); | 943 client_->SetNeedsCommitOnImplThread(); |
| 945 client_->RenewTreePriority(); | 944 client_->RenewTreePriority(); |
| 946 } | 945 } |
| 947 | 946 |
| 948 void LayerTreeHostImpl::SetViewportDamage(const gfx::Rect& damage_rect) { | 947 void LayerTreeHostImpl::SetViewportDamage(const gfx::Rect& damage_rect) { |
| 949 viewport_damage_rect_.Union(damage_rect); | 948 viewport_damage_rect_.Union(damage_rect); |
| 950 } | 949 } |
| 951 | 950 |
| 952 static inline RenderPass* FindRenderPassById( | 951 static inline RenderPass* FindRenderPassById(RenderPassId render_pass_id, |
| 953 RenderPassId render_pass_id, | 952 const FrameData& frame) { |
| 954 const LayerTreeHostImpl::FrameData& frame) { | |
| 955 RenderPassIdHashMap::const_iterator it = | 953 RenderPassIdHashMap::const_iterator it = |
| 956 frame.render_passes_by_id.find(render_pass_id); | 954 frame.render_passes_by_id.find(render_pass_id); |
| 957 return it != frame.render_passes_by_id.end() ? it->second : NULL; | 955 return it != frame.render_passes_by_id.end() ? it->second : NULL; |
| 958 } | 956 } |
| 959 | 957 |
| 960 static void RemoveRenderPassesRecursive(RenderPassId remove_render_pass_id, | 958 static void RemoveRenderPassesRecursive(RenderPassId remove_render_pass_id, |
| 961 LayerTreeHostImpl::FrameData* frame) { | 959 FrameData* frame) { |
| 962 RenderPass* remove_render_pass = | 960 RenderPass* remove_render_pass = |
| 963 FindRenderPassById(remove_render_pass_id, *frame); | 961 FindRenderPassById(remove_render_pass_id, *frame); |
| 964 // The pass was already removed by another quad - probably the original, and | 962 // The pass was already removed by another quad - probably the original, and |
| 965 // we are the replica. | 963 // we are the replica. |
| 966 if (!remove_render_pass) | 964 if (!remove_render_pass) |
| 967 return; | 965 return; |
| 968 RenderPassList& render_passes = frame->render_passes; | 966 RenderPassList& render_passes = frame->render_passes; |
| 969 RenderPassList::iterator to_remove = std::find(render_passes.begin(), | 967 RenderPassList::iterator to_remove = std::find(render_passes.begin(), |
| 970 render_passes.end(), | 968 render_passes.end(), |
| 971 remove_render_pass); | 969 remove_render_pass); |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1520 pending_tree_->root_layer(), | 1518 pending_tree_->root_layer(), |
| 1521 [](LayerImpl* layer) { layer->DidBeginTracing(); }); | 1519 [](LayerImpl* layer) { layer->DidBeginTracing(); }); |
| 1522 } | 1520 } |
| 1523 LayerTreeHostCommon::CallFunctionForSubtree( | 1521 LayerTreeHostCommon::CallFunctionForSubtree( |
| 1524 active_tree_->root_layer(), | 1522 active_tree_->root_layer(), |
| 1525 [](LayerImpl* layer) { layer->DidBeginTracing(); }); | 1523 [](LayerImpl* layer) { layer->DidBeginTracing(); }); |
| 1526 } | 1524 } |
| 1527 | 1525 |
| 1528 { | 1526 { |
| 1529 TRACE_EVENT0("cc", "DrawLayers.FrameViewerTracing"); | 1527 TRACE_EVENT0("cc", "DrawLayers.FrameViewerTracing"); |
| 1530 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( | 1528 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( |
|
danakj
2015/03/16 19:06:49
Did you mean to call TraceLayerTreeSnapshot here?
| |
| 1531 TRACE_DISABLED_BY_DEFAULT("cc.debug") "," | 1529 TRACE_DISABLED_BY_DEFAULT("cc.debug") "," |
| 1532 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads") "," | 1530 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads") "," |
| 1533 TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers"), | 1531 TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers"), |
| 1534 "cc::LayerTreeHostImpl", | 1532 "cc::LayerTreeHostImpl", |
| 1535 id_, | 1533 id_, |
| 1536 AsValueWithFrame(frame)); | 1534 AsValueWithFrame(frame)); |
| 1537 } | 1535 } |
| 1538 | 1536 |
| 1539 const DrawMode draw_mode = GetDrawMode(); | 1537 const DrawMode draw_mode = GetDrawMode(); |
| 1540 | 1538 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1622 // We would not have any content to draw until the pending tree is activated. | 1620 // We would not have any content to draw until the pending tree is activated. |
| 1623 // Prevent the active tree from drawing until activation. | 1621 // Prevent the active tree from drawing until activation. |
| 1624 SetRequiresHighResToDraw(); | 1622 SetRequiresHighResToDraw(); |
| 1625 } | 1623 } |
| 1626 | 1624 |
| 1627 const RendererCapabilitiesImpl& | 1625 const RendererCapabilitiesImpl& |
| 1628 LayerTreeHostImpl::GetRendererCapabilities() const { | 1626 LayerTreeHostImpl::GetRendererCapabilities() const { |
| 1629 return renderer_->Capabilities(); | 1627 return renderer_->Capabilities(); |
| 1630 } | 1628 } |
| 1631 | 1629 |
| 1632 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { | 1630 bool LayerTreeHostImpl::SwapBuffers(const FrameData& frame) { |
| 1633 ResetRequiresHighResToDraw(); | 1631 ResetRequiresHighResToDraw(); |
| 1634 if (frame.has_no_damage) { | 1632 if (frame.has_no_damage) { |
| 1635 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS); | 1633 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS); |
| 1636 return false; | 1634 return false; |
| 1637 } | 1635 } |
| 1638 CompositorFrameMetadata metadata = MakeCompositorFrameMetadata(); | 1636 CompositorFrameMetadata metadata = MakeCompositorFrameMetadata(); |
| 1639 active_tree()->FinishSwapPromises(&metadata); | 1637 active_tree()->FinishSwapPromises(&metadata); |
| 1640 for (auto& latency : metadata.latency_info) { | 1638 for (auto& latency : metadata.latency_info) { |
| 1641 TRACE_EVENT_FLOW_STEP0( | 1639 TRACE_EVENT_FLOW_STEP0( |
| 1642 "input,benchmark", | 1640 "input,benchmark", |
| (...skipping 1827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3470 new_target.SetToMin(layer_impl->MaxScrollOffset()); | 3468 new_target.SetToMin(layer_impl->MaxScrollOffset()); |
| 3471 | 3469 |
| 3472 curve->UpdateTarget( | 3470 curve->UpdateTarget( |
| 3473 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) | 3471 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) |
| 3474 .InSecondsF(), | 3472 .InSecondsF(), |
| 3475 new_target); | 3473 new_target); |
| 3476 | 3474 |
| 3477 return true; | 3475 return true; |
| 3478 } | 3476 } |
| 3479 } // namespace cc | 3477 } // namespace cc |
| OLD | NEW |