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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11552009: Add support for calculating the position of the top controls in the cc layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Switch to a layer specific to top controls. Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
(...skipping 19 matching lines...) Expand all
30 #include "cc/quad_culler.h" 30 #include "cc/quad_culler.h"
31 #include "cc/render_pass_draw_quad.h" 31 #include "cc/render_pass_draw_quad.h"
32 #include "cc/rendering_stats.h" 32 #include "cc/rendering_stats.h"
33 #include "cc/scrollbar_animation_controller.h" 33 #include "cc/scrollbar_animation_controller.h"
34 #include "cc/scrollbar_layer_impl.h" 34 #include "cc/scrollbar_layer_impl.h"
35 #include "cc/shared_quad_state.h" 35 #include "cc/shared_quad_state.h"
36 #include "cc/single_thread_proxy.h" 36 #include "cc/single_thread_proxy.h"
37 #include "cc/software_renderer.h" 37 #include "cc/software_renderer.h"
38 #include "cc/solid_color_draw_quad.h" 38 #include "cc/solid_color_draw_quad.h"
39 #include "cc/texture_uploader.h" 39 #include "cc/texture_uploader.h"
40 #include "cc/top_controls_manager.h"
40 #include "cc/util.h" 41 #include "cc/util.h"
41 #include "ui/gfx/size_conversions.h" 42 #include "ui/gfx/size_conversions.h"
42 #include "ui/gfx/vector2d_conversions.h" 43 #include "ui/gfx/vector2d_conversions.h"
43 44
44 namespace { 45 namespace {
45 46
46 void didVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) 47 void didVisibilityChange(cc::LayerTreeHostImpl* id, bool visible)
47 { 48 {
48 if (visible) { 49 if (visible) {
49 TRACE_EVENT_ASYNC_BEGIN1("webkit", "LayerTreeHostImpl::setVisible", id, "LayerTreeHostImpl", id); 50 TRACE_EVENT_ASYNC_BEGIN1("webkit", "LayerTreeHostImpl::setVisible", id, "LayerTreeHostImpl", id);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 , m_cumulativeNumLayersDrawn(0) 130 , m_cumulativeNumLayersDrawn(0)
130 , m_cumulativeNumMissingTiles(0) 131 , m_cumulativeNumMissingTiles(0)
131 , m_lastSentMemoryVisibleBytes(0) 132 , m_lastSentMemoryVisibleBytes(0)
132 , m_lastSentMemoryVisibleAndNearbyBytes(0) 133 , m_lastSentMemoryVisibleAndNearbyBytes(0)
133 , m_lastSentMemoryUseBytes(0) 134 , m_lastSentMemoryUseBytes(0)
134 , m_animationRegistrar(AnimationRegistrar::create()) 135 , m_animationRegistrar(AnimationRegistrar::create())
135 { 136 {
136 DCHECK(m_proxy->isImplThread()); 137 DCHECK(m_proxy->isImplThread());
137 didVisibilityChange(this, m_visible); 138 didVisibilityChange(this, m_visible);
138 139
140 if (settings.calculateTopControlsPosition)
141 m_topControlsManager = TopControlsManager::Create(this, settings.topCont rolsHeightPx);
142
139 // LTHI always has an active tree. 143 // LTHI always has an active tree.
140 m_activeTree = LayerTreeImpl::create(this); 144 m_activeTree = LayerTreeImpl::create(this);
141 } 145 }
142 146
143 LayerTreeHostImpl::~LayerTreeHostImpl() 147 LayerTreeHostImpl::~LayerTreeHostImpl()
144 { 148 {
145 DCHECK(m_proxy->isImplThread()); 149 DCHECK(m_proxy->isImplThread());
146 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 150 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
147 151
148 if (rootLayer()) { 152 if (rootLayer()) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 OutputSurface* LayerTreeHostImpl::outputSurface() const 216 OutputSurface* LayerTreeHostImpl::outputSurface() const
213 { 217 {
214 return m_outputSurface.get(); 218 return m_outputSurface.get();
215 } 219 }
216 220
217 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime) 221 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime)
218 { 222 {
219 animatePageScale(monotonicTime); 223 animatePageScale(monotonicTime);
220 animateLayers(monotonicTime, wallClockTime); 224 animateLayers(monotonicTime, wallClockTime);
221 animateScrollbars(monotonicTime); 225 animateScrollbars(monotonicTime);
226 if (m_topControlsManager)
227 m_topControlsManager->Animate(monotonicTime);
222 } 228 }
223 229
224 void LayerTreeHostImpl::manageTiles() 230 void LayerTreeHostImpl::manageTiles()
225 { 231 {
226 DCHECK(m_tileManager); 232 DCHECK(m_tileManager);
227 m_tileManager->ManageTiles(); 233 m_tileManager->ManageTiles();
228 234
229 size_t memoryRequiredBytes; 235 size_t memoryRequiredBytes;
230 size_t memoryNiceToHaveBytes; 236 size_t memoryNiceToHaveBytes;
231 size_t memoryUsedBytes; 237 size_t memoryUsedBytes;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 { 319 {
314 if (!needsUpdateDrawProperties()) 320 if (!needsUpdateDrawProperties())
315 return; 321 return;
316 322
317 if (!m_renderer) { // For maxTextureSize. 323 if (!m_renderer) { // For maxTextureSize.
318 // This will get set if renderer gets initialized. 324 // This will get set if renderer gets initialized.
319 m_needsUpdateDrawProperties = false; 325 m_needsUpdateDrawProperties = false;
320 return; 326 return;
321 } 327 }
322 328
329 if (m_topControlsManager)
330 m_topControlsManager->UpdateDrawPositions();
323 activeTree()->UpdateDrawProperties(); 331 activeTree()->UpdateDrawProperties();
324 if (pendingTree()) 332 if (pendingTree())
325 pendingTree()->UpdateDrawProperties(); 333 pendingTree()->UpdateDrawProperties();
326 334
327 m_needsUpdateDrawProperties = false; 335 m_needsUpdateDrawProperties = false;
328 } 336 }
329 337
330 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 338 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
331 { 339 {
332 renderPassesById[renderPass->id] = renderPass.get(); 340 renderPassesById[renderPass->id] = renderPass.get();
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 773
766 CompositorFrameMetadata metadata; 774 CompositorFrameMetadata metadata;
767 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); 775 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta();
768 if (!m_settings.pageScalePinchZoomEnabled) 776 if (!m_settings.pageScalePinchZoomEnabled)
769 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); 777 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor());
770 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); 778 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor();
771 metadata.viewport_size = m_pinchZoomViewport.Bounds().size(); 779 metadata.viewport_size = m_pinchZoomViewport.Bounds().size();
772 metadata.root_layer_size = contentSize(); 780 metadata.root_layer_size = contentSize();
773 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; 781 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ;
774 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; 782 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ;
783 if (m_topControlsManager) {
784 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager- >controls_top_offset());
785 metadata.content_offset = gfx::Vector2dF(0.f, m_topControlsManager->cont ent_top_offset());
786 }
775 787
776 return metadata; 788 return metadata;
777 } 789 }
778 790
779 void LayerTreeHostImpl::drawLayers(FrameData& frame) 791 void LayerTreeHostImpl::drawLayers(FrameData& frame)
780 { 792 {
781 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); 793 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers");
782 DCHECK(canDraw()); 794 DCHECK(canDraw());
783 DCHECK(!frame.renderPasses.empty()); 795 DCHECK(!frame.renderPasses.empty());
784 796
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 903
892 if (layerImpl->scrollable()) 904 if (layerImpl->scrollable())
893 return layerImpl; 905 return layerImpl;
894 906
895 if (layerImpl->drawsContent() && layerImpl->parent() && layerImpl->parent()- >scrollable()) 907 if (layerImpl->drawsContent() && layerImpl->parent() && layerImpl->parent()- >scrollable())
896 return layerImpl->parent(); 908 return layerImpl->parent();
897 909
898 return 0; 910 return 0;
899 } 911 }
900 912
913 LayerTreeImpl* LayerTreeHostImpl::activeTree()
914 {
915 return m_activeTree.get();
916 }
917
901 void LayerTreeHostImpl::createPendingTree() 918 void LayerTreeHostImpl::createPendingTree()
902 { 919 {
903 CHECK(!m_pendingTree); 920 CHECK(!m_pendingTree);
904 m_pendingTree = LayerTreeImpl::create(this); 921 m_pendingTree = LayerTreeImpl::create(this);
905 m_client->onCanDrawStateChanged(canDraw()); 922 m_client->onCanDrawStateChanged(canDraw());
906 m_client->onHasPendingTreeStateChanged(pendingTree()); 923 m_client->onHasPendingTreeStateChanged(pendingTree());
907 } 924 }
908 925
909 void LayerTreeHostImpl::activatePendingTreeIfNeeded() 926 void LayerTreeHostImpl::activatePendingTreeIfNeeded()
910 { 927 {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 updateMaxScrollOffset(); 1100 updateMaxScrollOffset();
1084 } 1101 }
1085 1102
1086 void LayerTreeHostImpl::updateMaxScrollOffset() 1103 void LayerTreeHostImpl::updateMaxScrollOffset()
1087 { 1104 {
1088 activeTree()->UpdateMaxScrollOffset(); 1105 activeTree()->UpdateMaxScrollOffset();
1089 if (pendingTree()) 1106 if (pendingTree())
1090 pendingTree()->UpdateMaxScrollOffset(); 1107 pendingTree()->UpdateMaxScrollOffset();
1091 } 1108 }
1092 1109
1110 void LayerTreeHostImpl::setNeedsUpdateDrawProperties()
1111 {
1112 m_needsUpdateDrawProperties = true;
1113 }
1114
1093 void LayerTreeHostImpl::setNeedsRedraw() 1115 void LayerTreeHostImpl::setNeedsRedraw()
1094 { 1116 {
1095 m_client->setNeedsRedrawOnImplThread(); 1117 m_client->setNeedsRedrawOnImplThread();
1096 } 1118 }
1097 1119
1098 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1120 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1099 { 1121 {
1100 updateDrawProperties(); 1122 updateDrawProperties();
1101 return activeTree()->RenderSurfaceLayerList().size(); 1123 return activeTree()->RenderSurfaceLayerList().size();
1102 } 1124 }
1103 1125
1104 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) 1126 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type)
1105 { 1127 {
1106 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); 1128 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin");
1107 1129
1130 if (m_topControlsManager)
1131 m_topControlsManager->ScrollBegin();
1132
1108 DCHECK(!currentlyScrollingLayer()); 1133 DCHECK(!currentlyScrollingLayer());
1109 clearCurrentlyScrollingLayer(); 1134 clearCurrentlyScrollingLayer();
1110 1135
1111 if (!ensureRenderSurfaceLayerList()) 1136 if (!ensureRenderSurfaceLayerList())
1112 return ScrollIgnored; 1137 return ScrollIgnored;
1113 1138
1114 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor); 1139 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor);
1115 1140
1116 // First find out which layer was hit from the saved list of visible layers 1141 // First find out which layer was hit from the saved list of visible layers
1117 // in the most recent frame. 1142 // in the most recent frame.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1230 bool didScroll = false; 1255 bool didScroll = false;
1231 1256
1232 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) { 1257 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) {
1233 if (!layerImpl->scrollable()) 1258 if (!layerImpl->scrollable())
1234 continue; 1259 continue;
1235 1260
1236 PinchZoomViewport* viewport = NULL; 1261 PinchZoomViewport* viewport = NULL;
1237 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ()) 1262 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ())
1238 viewport = &m_pinchZoomViewport; 1263 viewport = &m_pinchZoomViewport;
1239 gfx::Vector2dF appliedDelta; 1264 gfx::Vector2dF appliedDelta;
1265 if (m_topControlsManager && layerImpl == rootScrollLayer())
1266 pendingDelta = m_topControlsManager->ScrollBy(pendingDelta);
1267
1240 if (m_scrollDeltaIsInViewportSpace) { 1268 if (m_scrollDeltaIsInViewportSpace) {
1241 float scaleFromViewportToScreenSpace = m_deviceScaleFactor; 1269 float scaleFromViewportToScreenSpace = m_deviceScaleFactor;
1242 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta); 1270 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta);
1243 } else 1271 } else
1244 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta); 1272 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta);
1245 1273
1246 // If the layer wasn't able to move, try the next one in the hierarchy. 1274 // If the layer wasn't able to move, try the next one in the hierarchy.
1247 float moveThresholdSquared = 0.1f * 0.1f; 1275 float moveThresholdSquared = 0.1f * 0.1f;
1248 if (appliedDelta.LengthSquared() < moveThresholdSquared) 1276 if (appliedDelta.LengthSquared() < moveThresholdSquared)
1249 continue; 1277 continue;
(...skipping 24 matching lines...) Expand all
1274 return didScroll; 1302 return didScroll;
1275 } 1303 }
1276 1304
1277 void LayerTreeHostImpl::clearCurrentlyScrollingLayer() 1305 void LayerTreeHostImpl::clearCurrentlyScrollingLayer()
1278 { 1306 {
1279 m_activeTree->ClearCurrentlyScrollingLayer(); 1307 m_activeTree->ClearCurrentlyScrollingLayer();
1280 } 1308 }
1281 1309
1282 void LayerTreeHostImpl::scrollEnd() 1310 void LayerTreeHostImpl::scrollEnd()
1283 { 1311 {
1312 if (m_topControlsManager)
1313 m_topControlsManager->ScrollEnd();
1284 clearCurrentlyScrollingLayer(); 1314 clearCurrentlyScrollingLayer();
1285 } 1315 }
1286 1316
1287 void LayerTreeHostImpl::pinchGestureBegin() 1317 void LayerTreeHostImpl::pinchGestureBegin()
1288 { 1318 {
1289 m_pinchGestureActive = true; 1319 m_pinchGestureActive = true;
1290 m_previousPinchAnchor = gfx::Point(); 1320 m_previousPinchAnchor = gfx::Point();
1291 1321
1292 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) 1322 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
1293 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( ); 1323 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( );
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1631 } 1661 }
1632 1662
1633 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture() 1663 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture()
1634 { 1664 {
1635 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree(); 1665 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree();
1636 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); 1666 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer());
1637 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); 1667 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>();
1638 } 1668 }
1639 1669
1640 } // namespace cc 1670 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698