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

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: Add missing CC_EXPORT...learn to run try jobs manually 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
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_settings.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 , m_cumulativeNumLayersDrawn(0) 149 , m_cumulativeNumLayersDrawn(0)
149 , m_cumulativeNumMissingTiles(0) 150 , m_cumulativeNumMissingTiles(0)
150 , m_lastSentMemoryVisibleBytes(0) 151 , m_lastSentMemoryVisibleBytes(0)
151 , m_lastSentMemoryVisibleAndNearbyBytes(0) 152 , m_lastSentMemoryVisibleAndNearbyBytes(0)
152 , m_lastSentMemoryUseBytes(0) 153 , m_lastSentMemoryUseBytes(0)
153 , m_animationRegistrar(AnimationRegistrar::create()) 154 , m_animationRegistrar(AnimationRegistrar::create())
154 { 155 {
155 DCHECK(m_proxy->isImplThread()); 156 DCHECK(m_proxy->isImplThread());
156 didVisibilityChange(this, m_visible); 157 didVisibilityChange(this, m_visible);
157 158
159 if (settings.calculateTopControlsPosition)
160 m_topControlsManager = TopControlsManager::Create(this, settings.topCont rolsHeightPx);
161
158 // LTHI always has an active tree. 162 // LTHI always has an active tree.
159 m_activeTree = LayerTreeImpl::create(this); 163 m_activeTree = LayerTreeImpl::create(this);
160 } 164 }
161 165
162 LayerTreeHostImpl::~LayerTreeHostImpl() 166 LayerTreeHostImpl::~LayerTreeHostImpl()
163 { 167 {
164 DCHECK(m_proxy->isImplThread()); 168 DCHECK(m_proxy->isImplThread());
165 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 169 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
166 170
167 if (rootLayer()) { 171 if (rootLayer()) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 OutputSurface* LayerTreeHostImpl::outputSurface() const 227 OutputSurface* LayerTreeHostImpl::outputSurface() const
224 { 228 {
225 return m_outputSurface.get(); 229 return m_outputSurface.get();
226 } 230 }
227 231
228 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime) 232 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime)
229 { 233 {
230 animatePageScale(monotonicTime); 234 animatePageScale(monotonicTime);
231 animateLayers(monotonicTime, wallClockTime); 235 animateLayers(monotonicTime, wallClockTime);
232 animateScrollbars(monotonicTime); 236 animateScrollbars(monotonicTime);
237 if (m_topControlsManager)
238 m_topControlsManager->Animate(monotonicTime);
233 } 239 }
234 240
235 void LayerTreeHostImpl::manageTiles() 241 void LayerTreeHostImpl::manageTiles()
236 { 242 {
237 DCHECK(m_tileManager); 243 DCHECK(m_tileManager);
238 m_tileManager->ManageTiles(); 244 m_tileManager->ManageTiles();
239 245
240 size_t memoryRequiredBytes; 246 size_t memoryRequiredBytes;
241 size_t memoryNiceToHaveBytes; 247 size_t memoryNiceToHaveBytes;
242 size_t memoryUsedBytes; 248 size_t memoryUsedBytes;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 { 330 {
325 if (!needsUpdateDrawProperties()) 331 if (!needsUpdateDrawProperties())
326 return; 332 return;
327 333
328 if (!m_renderer) { // For maxTextureSize. 334 if (!m_renderer) { // For maxTextureSize.
329 // This will get set if renderer gets initialized. 335 // This will get set if renderer gets initialized.
330 m_needsUpdateDrawProperties = false; 336 m_needsUpdateDrawProperties = false;
331 return; 337 return;
332 } 338 }
333 339
340 if (m_topControlsManager)
341 m_topControlsManager->UpdateDrawPositions();
334 activeTree()->UpdateDrawProperties(); 342 activeTree()->UpdateDrawProperties();
335 if (pendingTree()) 343 if (pendingTree())
336 pendingTree()->UpdateDrawProperties(); 344 pendingTree()->UpdateDrawProperties();
337 345
338 m_needsUpdateDrawProperties = false; 346 m_needsUpdateDrawProperties = false;
339 } 347 }
340 348
341 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 349 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
342 { 350 {
343 renderPassesById[renderPass->id] = renderPass.get(); 351 renderPassesById[renderPass->id] = renderPass.get();
(...skipping 421 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.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon trolsManager->content_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::checkForCompletedSetPixels() 926 void LayerTreeHostImpl::checkForCompletedSetPixels()
910 { 927 {
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1091 updateMaxScrollOffset(); 1108 updateMaxScrollOffset();
1092 } 1109 }
1093 1110
1094 void LayerTreeHostImpl::updateMaxScrollOffset() 1111 void LayerTreeHostImpl::updateMaxScrollOffset()
1095 { 1112 {
1096 activeTree()->UpdateMaxScrollOffset(); 1113 activeTree()->UpdateMaxScrollOffset();
1097 if (pendingTree()) 1114 if (pendingTree())
1098 pendingTree()->UpdateMaxScrollOffset(); 1115 pendingTree()->UpdateMaxScrollOffset();
1099 } 1116 }
1100 1117
1118 void LayerTreeHostImpl::setNeedsUpdateDrawProperties()
1119 {
1120 m_needsUpdateDrawProperties = true;
1121 }
1122
1101 void LayerTreeHostImpl::setNeedsRedraw() 1123 void LayerTreeHostImpl::setNeedsRedraw()
1102 { 1124 {
1103 m_client->setNeedsRedrawOnImplThread(); 1125 m_client->setNeedsRedrawOnImplThread();
1104 } 1126 }
1105 1127
1106 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1128 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1107 { 1129 {
1108 updateDrawProperties(); 1130 updateDrawProperties();
1109 return activeTree()->RenderSurfaceLayerList().size(); 1131 return activeTree()->RenderSurfaceLayerList().size();
1110 } 1132 }
1111 1133
1112 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) 1134 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type)
1113 { 1135 {
1114 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); 1136 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin");
1115 1137
1138 if (m_topControlsManager)
1139 m_topControlsManager->ScrollBegin();
1140
1116 DCHECK(!currentlyScrollingLayer()); 1141 DCHECK(!currentlyScrollingLayer());
1117 clearCurrentlyScrollingLayer(); 1142 clearCurrentlyScrollingLayer();
1118 1143
1119 if (!ensureRenderSurfaceLayerList()) 1144 if (!ensureRenderSurfaceLayerList())
1120 return ScrollIgnored; 1145 return ScrollIgnored;
1121 1146
1122 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor); 1147 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor);
1123 1148
1124 // First find out which layer was hit from the saved list of visible layers 1149 // First find out which layer was hit from the saved list of visible layers
1125 // in the most recent frame. 1150 // in the most recent frame.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 bool didScroll = false; 1263 bool didScroll = false;
1239 1264
1240 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) { 1265 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) {
1241 if (!layerImpl->scrollable()) 1266 if (!layerImpl->scrollable())
1242 continue; 1267 continue;
1243 1268
1244 PinchZoomViewport* viewport = NULL; 1269 PinchZoomViewport* viewport = NULL;
1245 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ()) 1270 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ())
1246 viewport = &m_pinchZoomViewport; 1271 viewport = &m_pinchZoomViewport;
1247 gfx::Vector2dF appliedDelta; 1272 gfx::Vector2dF appliedDelta;
1273 if (m_topControlsManager && layerImpl == rootScrollLayer())
1274 pendingDelta = m_topControlsManager->ScrollBy(pendingDelta);
1275
1248 if (m_scrollDeltaIsInViewportSpace) { 1276 if (m_scrollDeltaIsInViewportSpace) {
1249 float scaleFromViewportToScreenSpace = m_deviceScaleFactor; 1277 float scaleFromViewportToScreenSpace = m_deviceScaleFactor;
1250 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta); 1278 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta);
1251 } else 1279 } else
1252 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta); 1280 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta);
1253 1281
1254 // If the layer wasn't able to move, try the next one in the hierarchy. 1282 // If the layer wasn't able to move, try the next one in the hierarchy.
1255 float moveThresholdSquared = 0.1f * 0.1f; 1283 float moveThresholdSquared = 0.1f * 0.1f;
1256 if (appliedDelta.LengthSquared() < moveThresholdSquared) 1284 if (appliedDelta.LengthSquared() < moveThresholdSquared)
1257 continue; 1285 continue;
(...skipping 24 matching lines...) Expand all
1282 return didScroll; 1310 return didScroll;
1283 } 1311 }
1284 1312
1285 void LayerTreeHostImpl::clearCurrentlyScrollingLayer() 1313 void LayerTreeHostImpl::clearCurrentlyScrollingLayer()
1286 { 1314 {
1287 m_activeTree->ClearCurrentlyScrollingLayer(); 1315 m_activeTree->ClearCurrentlyScrollingLayer();
1288 } 1316 }
1289 1317
1290 void LayerTreeHostImpl::scrollEnd() 1318 void LayerTreeHostImpl::scrollEnd()
1291 { 1319 {
1320 if (m_topControlsManager)
1321 m_topControlsManager->ScrollEnd();
1292 clearCurrentlyScrollingLayer(); 1322 clearCurrentlyScrollingLayer();
1293 } 1323 }
1294 1324
1295 void LayerTreeHostImpl::pinchGestureBegin() 1325 void LayerTreeHostImpl::pinchGestureBegin()
1296 { 1326 {
1297 m_pinchGestureActive = true; 1327 m_pinchGestureActive = true;
1298 m_previousPinchAnchor = gfx::Point(); 1328 m_previousPinchAnchor = gfx::Point();
1299 1329
1300 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) 1330 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
1301 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( ); 1331 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( );
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1639 } 1669 }
1640 1670
1641 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture() 1671 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture()
1642 { 1672 {
1643 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree(); 1673 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree();
1644 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); 1674 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer());
1645 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); 1675 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>();
1646 } 1676 }
1647 1677
1648 } // namespace cc 1678 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_settings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698