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 |