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/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| 11 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
| 12 #include "cc/append_quads_data.h" | 12 #include "cc/append_quads_data.h" |
| 13 #include "cc/compositor_frame_metadata.h" | |
| 13 #include "cc/damage_tracker.h" | 14 #include "cc/damage_tracker.h" |
| 14 #include "cc/debug_rect_history.h" | 15 #include "cc/debug_rect_history.h" |
| 15 #include "cc/delay_based_time_source.h" | 16 #include "cc/delay_based_time_source.h" |
| 16 #include "cc/delegating_renderer.h" | 17 #include "cc/delegating_renderer.h" |
| 17 #include "cc/frame_rate_counter.h" | 18 #include "cc/frame_rate_counter.h" |
| 19 #include "cc/gl_compositor_frame.h" | |
| 18 #include "cc/gl_renderer.h" | 20 #include "cc/gl_renderer.h" |
| 19 #include "cc/heads_up_display_layer_impl.h" | 21 #include "cc/heads_up_display_layer_impl.h" |
| 20 #include "cc/layer_iterator.h" | 22 #include "cc/layer_iterator.h" |
| 21 #include "cc/layer_tree_host.h" | 23 #include "cc/layer_tree_host.h" |
| 22 #include "cc/layer_tree_host_common.h" | 24 #include "cc/layer_tree_host_common.h" |
| 23 #include "cc/layer_tree_impl.h" | 25 #include "cc/layer_tree_impl.h" |
| 24 #include "cc/math_util.h" | 26 #include "cc/math_util.h" |
| 25 #include "cc/overdraw_metrics.h" | 27 #include "cc/overdraw_metrics.h" |
| 26 #include "cc/page_scale_animation.h" | 28 #include "cc/page_scale_animation.h" |
| 27 #include "cc/prioritized_resource_manager.h" | 29 #include "cc/prioritized_resource_manager.h" |
| (...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 861 | 863 |
| 862 // TODO(piman): We may need to do some validation on this ack before process ing it. | 864 // TODO(piman): We may need to do some validation on this ack before process ing it. |
| 863 m_renderer->receiveCompositorFrameAck(ack); | 865 m_renderer->receiveCompositorFrameAck(ack); |
| 864 } | 866 } |
| 865 | 867 |
| 866 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) | 868 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) |
| 867 { | 869 { |
| 868 m_client->onCanDrawStateChanged(canDraw()); | 870 m_client->onCanDrawStateChanged(canDraw()); |
| 869 } | 871 } |
| 870 | 872 |
| 873 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | |
| 874 { | |
| 875 if (!rootScrollLayer()) | |
| 876 return CompositorFrameMetadata(); | |
|
piman
2012/12/14 22:02:22
nit: (I know it sucks) consistency for indents? +4
aelias_OOO_until_Jul13
2012/12/15 00:06:17
Done.
| |
| 877 | |
| 878 CompositorFrameMetadata metadata; | |
|
danakj
2012/12/14 22:23:34
How about making a constructor that takes all thes
| |
| 879 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); | |
| 880 metadata.page_scale_factor = m_pinchZoomViewport.totalPageScaleFactor(); | |
| 881 metadata.viewport_size = m_pinchZoomViewport.bounds().size(); | |
| 882 metadata.root_layer_size = rootScrollLayer()->bounds(); | |
| 883 metadata.min_page_scale_factor = m_pinchZoomViewport.minPageScaleFactor(); | |
| 884 metadata.max_page_scale_factor = m_pinchZoomViewport.maxPageScaleFactor(); | |
| 885 if (!m_settings.pageScalePinchZoomEnabled) { | |
| 886 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.pageScaleFacto r()); | |
| 887 metadata.root_layer_size.Scale(1 / m_pinchZoomViewport.pageScaleFactor() ); | |
| 888 } | |
| 889 | |
| 890 return metadata; | |
| 891 } | |
| 892 | |
| 871 void LayerTreeHostImpl::drawLayers(FrameData& frame) | 893 void LayerTreeHostImpl::drawLayers(FrameData& frame) |
| 872 { | 894 { |
| 873 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); | 895 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); |
| 874 DCHECK(canDraw()); | 896 DCHECK(canDraw()); |
| 875 DCHECK(!frame.renderPasses.empty()); | 897 DCHECK(!frame.renderPasses.empty()); |
| 876 | 898 |
| 877 // FIXME: use the frame begin time from the overall compositor scheduler. | 899 // FIXME: use the frame begin time from the overall compositor scheduler. |
| 878 // This value is currently inaccessible because it is up in Chromium's | 900 // This value is currently inaccessible because it is up in Chromium's |
| 879 // RenderWidget. | 901 // RenderWidget. |
| 880 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); | 902 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); |
| 881 | 903 |
| 882 if (m_debugState.showHudRects()) | 904 if (m_debugState.showHudRects()) |
| 883 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState); | 905 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState); |
| 884 | 906 |
| 885 // Because the contents of the HUD depend on everything else in the frame, t he contents | 907 // Because the contents of the HUD depend on everything else in the frame, t he contents |
| 886 // of its texture are updated as the last thing before the frame is drawn. | 908 // of its texture are updated as the last thing before the frame is drawn. |
| 887 if (m_activeTree->hud_layer()) | 909 if (m_activeTree->hud_layer()) |
| 888 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get()); | 910 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get()); |
| 889 | 911 |
| 890 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); | 912 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); |
| 891 | 913 |
| 892 // The render passes should be consumed by the renderer. | 914 // The render passes should be consumed by the renderer. |
| 893 DCHECK(frame.renderPasses.empty()); | 915 DCHECK(frame.renderPasses.empty()); |
| 894 DCHECK(frame.renderPassesById.empty()); | 916 DCHECK(frame.renderPassesById.empty()); |
| 895 | 917 |
| 896 // The next frame should start by assuming nothing has changed, and changes are noted as they occur. | 918 // The next frame should start by assuming nothing has changed, and changes are noted as they occur. |
| 897 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) | 919 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) |
| 898 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea(); | 920 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea(); |
| 899 rootLayer()->resetAllChangeTrackingForSubtree(); | 921 rootLayer()->resetAllChangeTrackingForSubtree(); |
| 922 | |
| 923 if (settings().compositorFrameMessage && outputSurface()->Context3D()) { | |
|
piman
2012/12/14 22:02:22
Shouldn't this happen in GLRenderer::drawFrame ins
aelias_OOO_until_Jul13
2012/12/15 00:06:17
Done. I gave the GLRenderer an OutputSurface in t
| |
| 924 GLCompositorFrame compositor_frame; | |
| 925 compositor_frame.metadata = makeCompositorFrameMetadata(); | |
| 926 outputSurface()->SendFrameToParentCompositor(compositor_frame); | |
| 927 } | |
| 900 } | 928 } |
| 901 | 929 |
| 902 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) | 930 void LayerTreeHostImpl::didDrawAllLayers(const FrameData& frame) |
| 903 { | 931 { |
| 904 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i) | 932 for (size_t i = 0; i < frame.willDrawLayers.size(); ++i) |
| 905 frame.willDrawLayers[i]->didDraw(m_resourceProvider.get()); | 933 frame.willDrawLayers[i]->didDraw(m_resourceProvider.get()); |
| 906 | 934 |
| 907 // Once all layers have been drawn, pending texture uploads should no | 935 // Once all layers have been drawn, pending texture uploads should no |
| 908 // longer block future uploads. | 936 // longer block future uploads. |
| 909 m_resourceProvider->markPendingUploadsAsNonBlocking(); | 937 m_resourceProvider->markPendingUploadsAsNonBlocking(); |
| (...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1723 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); | 1751 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); |
| 1724 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1752 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| 1725 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1753 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
| 1726 m_client->setNeedsRedrawOnImplThread(); | 1754 m_client->setNeedsRedrawOnImplThread(); |
| 1727 | 1755 |
| 1728 for (size_t i = 0; i < layer->children().size(); ++i) | 1756 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1729 animateScrollbarsRecursive(layer->children()[i], time); | 1757 animateScrollbarsRecursive(layer->children()[i], time); |
| 1730 } | 1758 } |
| 1731 | 1759 |
| 1732 } // namespace cc | 1760 } // namespace cc |
| OLD | NEW |