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

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: Rebased 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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 , m_cumulativeNumLayersDrawn(0) 148 , m_cumulativeNumLayersDrawn(0)
148 , m_cumulativeNumMissingTiles(0) 149 , m_cumulativeNumMissingTiles(0)
149 , m_lastSentMemoryVisibleBytes(0) 150 , m_lastSentMemoryVisibleBytes(0)
150 , m_lastSentMemoryVisibleAndNearbyBytes(0) 151 , m_lastSentMemoryVisibleAndNearbyBytes(0)
151 , m_lastSentMemoryUseBytes(0) 152 , m_lastSentMemoryUseBytes(0)
152 , m_animationRegistrar(AnimationRegistrar::create()) 153 , m_animationRegistrar(AnimationRegistrar::create())
153 { 154 {
154 DCHECK(m_proxy->isImplThread()); 155 DCHECK(m_proxy->isImplThread());
155 didVisibilityChange(this, m_visible); 156 didVisibilityChange(this, m_visible);
156 157
158 if (settings.calculateTopControlsPosition)
159 m_topControlsManager = TopControlsManager::Create(this, settings.topCont rolsHeightPx);
160
157 // LTHI always has an active tree. 161 // LTHI always has an active tree.
158 m_activeTree = LayerTreeImpl::create(this); 162 m_activeTree = LayerTreeImpl::create(this);
159 } 163 }
160 164
161 LayerTreeHostImpl::~LayerTreeHostImpl() 165 LayerTreeHostImpl::~LayerTreeHostImpl()
162 { 166 {
163 DCHECK(m_proxy->isImplThread()); 167 DCHECK(m_proxy->isImplThread());
164 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 168 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
165 169
166 if (rootLayer()) { 170 if (rootLayer()) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 OutputSurface* LayerTreeHostImpl::outputSurface() const 234 OutputSurface* LayerTreeHostImpl::outputSurface() const
231 { 235 {
232 return m_outputSurface.get(); 236 return m_outputSurface.get();
233 } 237 }
234 238
235 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime) 239 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime)
236 { 240 {
237 animatePageScale(monotonicTime); 241 animatePageScale(monotonicTime);
238 animateLayers(monotonicTime, wallClockTime); 242 animateLayers(monotonicTime, wallClockTime);
239 animateScrollbars(monotonicTime); 243 animateScrollbars(monotonicTime);
244 if (m_topControlsManager)
245 m_topControlsManager->Animate(monotonicTime);
240 } 246 }
241 247
242 void LayerTreeHostImpl::manageTiles() 248 void LayerTreeHostImpl::manageTiles()
243 { 249 {
244 DCHECK(m_tileManager); 250 DCHECK(m_tileManager);
245 m_tileManager->ManageTiles(); 251 m_tileManager->ManageTiles();
246 252
247 size_t memoryRequiredBytes; 253 size_t memoryRequiredBytes;
248 size_t memoryNiceToHaveBytes; 254 size_t memoryNiceToHaveBytes;
249 size_t memoryUsedBytes; 255 size_t memoryUsedBytes;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 { 337 {
332 if (!needsUpdateDrawProperties()) 338 if (!needsUpdateDrawProperties())
333 return; 339 return;
334 340
335 if (!m_renderer) { // For maxTextureSize. 341 if (!m_renderer) { // For maxTextureSize.
336 // This will get set if renderer gets initialized. 342 // This will get set if renderer gets initialized.
337 m_needsUpdateDrawProperties = false; 343 m_needsUpdateDrawProperties = false;
338 return; 344 return;
339 } 345 }
340 346
347 if (m_topControlsManager)
348 m_topControlsManager->UpdateDrawPositions();
341 activeTree()->UpdateDrawProperties(); 349 activeTree()->UpdateDrawProperties();
342 if (pendingTree()) 350 if (pendingTree())
343 pendingTree()->UpdateDrawProperties(); 351 pendingTree()->UpdateDrawProperties();
344 352
345 m_needsUpdateDrawProperties = false; 353 m_needsUpdateDrawProperties = false;
346 } 354 }
347 355
348 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 356 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
349 { 357 {
350 renderPassesById[renderPass->id] = renderPass.get(); 358 renderPassesById[renderPass->id] = renderPass.get();
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 791
784 CompositorFrameMetadata metadata; 792 CompositorFrameMetadata metadata;
785 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); 793 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta();
786 if (!m_settings.pageScalePinchZoomEnabled) 794 if (!m_settings.pageScalePinchZoomEnabled)
787 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); 795 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor());
788 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); 796 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor();
789 metadata.viewport_size = m_pinchZoomViewport.Bounds().size(); 797 metadata.viewport_size = m_pinchZoomViewport.Bounds().size();
790 metadata.root_layer_size = contentSize(); 798 metadata.root_layer_size = contentSize();
791 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; 799 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ;
792 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; 800 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ;
801 if (m_topControlsManager) {
802 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager- >controls_top_offset());
803 metadata.content_offset = gfx::Vector2dF(0.f, m_topControlsManager->cont ent_top_offset());
804 }
793 805
794 return metadata; 806 return metadata;
795 } 807 }
796 808
797 void LayerTreeHostImpl::drawLayers(FrameData& frame) 809 void LayerTreeHostImpl::drawLayers(FrameData& frame)
798 { 810 {
799 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); 811 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers");
800 DCHECK(canDraw()); 812 DCHECK(canDraw());
801 DCHECK(!frame.renderPasses.empty()); 813 DCHECK(!frame.renderPasses.empty());
802 814
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 921
910 if (layerImpl->scrollable()) 922 if (layerImpl->scrollable())
911 return layerImpl; 923 return layerImpl;
912 924
913 if (layerImpl->drawsContent() && layerImpl->parent() && layerImpl->parent()- >scrollable()) 925 if (layerImpl->drawsContent() && layerImpl->parent() && layerImpl->parent()- >scrollable())
914 return layerImpl->parent(); 926 return layerImpl->parent();
915 927
916 return 0; 928 return 0;
917 } 929 }
918 930
931 LayerTreeImpl* LayerTreeHostImpl::activeTree()
932 {
933 return m_activeTree.get();
934 }
935
919 void LayerTreeHostImpl::createPendingTree() 936 void LayerTreeHostImpl::createPendingTree()
920 { 937 {
921 CHECK(!m_pendingTree); 938 CHECK(!m_pendingTree);
922 m_pendingTree = LayerTreeImpl::create(this); 939 m_pendingTree = LayerTreeImpl::create(this);
923 m_client->onCanDrawStateChanged(canDraw()); 940 m_client->onCanDrawStateChanged(canDraw());
924 m_client->onHasPendingTreeStateChanged(pendingTree()); 941 m_client->onHasPendingTreeStateChanged(pendingTree());
925 } 942 }
926 943
927 void LayerTreeHostImpl::activatePendingTreeIfNeeded() 944 void LayerTreeHostImpl::activatePendingTreeIfNeeded()
928 { 945 {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 updateMaxScrollOffset(); 1118 updateMaxScrollOffset();
1102 } 1119 }
1103 1120
1104 void LayerTreeHostImpl::updateMaxScrollOffset() 1121 void LayerTreeHostImpl::updateMaxScrollOffset()
1105 { 1122 {
1106 activeTree()->UpdateMaxScrollOffset(); 1123 activeTree()->UpdateMaxScrollOffset();
1107 if (pendingTree()) 1124 if (pendingTree())
1108 pendingTree()->UpdateMaxScrollOffset(); 1125 pendingTree()->UpdateMaxScrollOffset();
1109 } 1126 }
1110 1127
1128 void LayerTreeHostImpl::setNeedsUpdateDrawProperties()
1129 {
1130 m_needsUpdateDrawProperties = true;
1131 }
1132
1111 void LayerTreeHostImpl::setNeedsRedraw() 1133 void LayerTreeHostImpl::setNeedsRedraw()
1112 { 1134 {
1113 m_client->setNeedsRedrawOnImplThread(); 1135 m_client->setNeedsRedrawOnImplThread();
1114 } 1136 }
1115 1137
1116 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList() 1138 bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
1117 { 1139 {
1118 updateDrawProperties(); 1140 updateDrawProperties();
1119 return activeTree()->RenderSurfaceLayerList().size(); 1141 return activeTree()->RenderSurfaceLayerList().size();
1120 } 1142 }
1121 1143
1122 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type) 1144 InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp ortPoint, InputHandlerClient::ScrollInputType type)
1123 { 1145 {
1124 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin"); 1146 TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBegin");
1125 1147
1148 if (m_topControlsManager)
1149 m_topControlsManager->ScrollBegin();
1150
1126 DCHECK(!currentlyScrollingLayer()); 1151 DCHECK(!currentlyScrollingLayer());
1127 clearCurrentlyScrollingLayer(); 1152 clearCurrentlyScrollingLayer();
1128 1153
1129 if (!ensureRenderSurfaceLayerList()) 1154 if (!ensureRenderSurfaceLayerList())
1130 return ScrollIgnored; 1155 return ScrollIgnored;
1131 1156
1132 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor); 1157 gfx::PointF deviceViewportPoint = gfx::ScalePoint(viewportPoint, m_deviceSca leFactor);
1133 1158
1134 // First find out which layer was hit from the saved list of visible layers 1159 // First find out which layer was hit from the saved list of visible layers
1135 // in the most recent frame. 1160 // in the most recent frame.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 bool didScroll = false; 1273 bool didScroll = false;
1249 1274
1250 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) { 1275 for (LayerImpl* layerImpl = currentlyScrollingLayer(); layerImpl; layerImpl = layerImpl->parent()) {
1251 if (!layerImpl->scrollable()) 1276 if (!layerImpl->scrollable())
1252 continue; 1277 continue;
1253 1278
1254 PinchZoomViewport* viewport = NULL; 1279 PinchZoomViewport* viewport = NULL;
1255 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ()) 1280 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer ())
1256 viewport = &m_pinchZoomViewport; 1281 viewport = &m_pinchZoomViewport;
1257 gfx::Vector2dF appliedDelta; 1282 gfx::Vector2dF appliedDelta;
1283 if (m_topControlsManager && layerImpl == rootScrollLayer())
1284 pendingDelta = m_topControlsManager->ScrollBy(pendingDelta);
1285
1258 if (m_scrollDeltaIsInViewportSpace) { 1286 if (m_scrollDeltaIsInViewportSpace) {
1259 float scaleFromViewportToScreenSpace = m_deviceScaleFactor; 1287 float scaleFromViewportToScreenSpace = m_deviceScaleFactor;
1260 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta); 1288 appliedDelta = scrollLayerWithViewportSpaceDelta(viewport, *layerImp l, scaleFromViewportToScreenSpace, viewportPoint, pendingDelta);
1261 } else 1289 } else
1262 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta); 1290 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta);
1263 1291
1264 // If the layer wasn't able to move, try the next one in the hierarchy. 1292 // If the layer wasn't able to move, try the next one in the hierarchy.
1265 float moveThresholdSquared = 0.1f * 0.1f; 1293 float moveThresholdSquared = 0.1f * 0.1f;
1266 if (appliedDelta.LengthSquared() < moveThresholdSquared) 1294 if (appliedDelta.LengthSquared() < moveThresholdSquared)
1267 continue; 1295 continue;
(...skipping 24 matching lines...) Expand all
1292 return didScroll; 1320 return didScroll;
1293 } 1321 }
1294 1322
1295 void LayerTreeHostImpl::clearCurrentlyScrollingLayer() 1323 void LayerTreeHostImpl::clearCurrentlyScrollingLayer()
1296 { 1324 {
1297 m_activeTree->ClearCurrentlyScrollingLayer(); 1325 m_activeTree->ClearCurrentlyScrollingLayer();
1298 } 1326 }
1299 1327
1300 void LayerTreeHostImpl::scrollEnd() 1328 void LayerTreeHostImpl::scrollEnd()
1301 { 1329 {
1330 if (m_topControlsManager)
1331 m_topControlsManager->ScrollEnd();
1302 clearCurrentlyScrollingLayer(); 1332 clearCurrentlyScrollingLayer();
1303 } 1333 }
1304 1334
1305 void LayerTreeHostImpl::pinchGestureBegin() 1335 void LayerTreeHostImpl::pinchGestureBegin()
1306 { 1336 {
1307 m_pinchGestureActive = true; 1337 m_pinchGestureActive = true;
1308 m_previousPinchAnchor = gfx::Point(); 1338 m_previousPinchAnchor = gfx::Point();
1309 1339
1310 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) 1340 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
1311 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( ); 1341 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( );
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 } 1679 }
1650 1680
1651 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture() 1681 skia::RefPtr<SkPicture> LayerTreeHostImpl::capturePicture()
1652 { 1682 {
1653 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree(); 1683 LayerTreeImpl* tree = pendingTree() ? pendingTree() : activeTree();
1654 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); 1684 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer());
1655 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); 1685 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>();
1656 } 1686 }
1657 1687
1658 } // namespace cc 1688 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698