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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 23171014: Fix UpdateTilePriorities viewport in Android WebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase to 221292 Created 7 years, 3 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('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/trees/layer_tree_host_impl.h" 5 #include "cc/trees/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/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 memory_history_(MemoryHistory::Create()), 190 memory_history_(MemoryHistory::Create()),
191 debug_rect_history_(DebugRectHistory::Create()), 191 debug_rect_history_(DebugRectHistory::Create()),
192 max_memory_needed_bytes_(0), 192 max_memory_needed_bytes_(0),
193 last_sent_memory_visible_bytes_(0), 193 last_sent_memory_visible_bytes_(0),
194 last_sent_memory_visible_and_nearby_bytes_(0), 194 last_sent_memory_visible_and_nearby_bytes_(0),
195 last_sent_memory_use_bytes_(0), 195 last_sent_memory_use_bytes_(0),
196 zero_budget_(false), 196 zero_budget_(false),
197 device_scale_factor_(1.f), 197 device_scale_factor_(1.f),
198 overhang_ui_resource_id_(0), 198 overhang_ui_resource_id_(0),
199 overdraw_bottom_height_(0.f), 199 overdraw_bottom_height_(0.f),
200 device_viewport_valid_for_tile_management_(true),
200 external_stencil_test_enabled_(false), 201 external_stencil_test_enabled_(false),
201 animation_registrar_(AnimationRegistrar::Create()), 202 animation_registrar_(AnimationRegistrar::Create()),
202 rendering_stats_instrumentation_(rendering_stats_instrumentation), 203 rendering_stats_instrumentation_(rendering_stats_instrumentation),
203 need_to_update_visible_tiles_before_draw_(false) { 204 need_to_update_visible_tiles_before_draw_(false) {
204 DCHECK(proxy_->IsImplThread()); 205 DCHECK(proxy_->IsImplThread());
205 DidVisibilityChange(this, visible_); 206 DidVisibilityChange(this, visible_);
206 207
207 SetDebugState(settings.initial_debug_state); 208 SetDebugState(settings.initial_debug_state);
208 209
209 if (settings.calculate_top_controls_position) { 210 if (settings.calculate_top_controls_position) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 // draw_and_swap_full_viewport_every_frame check. Tracked in crbug.com/264967. 287 // draw_and_swap_full_viewport_every_frame check. Tracked in crbug.com/264967.
287 if (!active_tree_->root_layer()) { 288 if (!active_tree_->root_layer()) {
288 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no root layer", 289 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no root layer",
289 TRACE_EVENT_SCOPE_THREAD); 290 TRACE_EVENT_SCOPE_THREAD);
290 return false; 291 return false;
291 } 292 }
292 293
293 if (output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) 294 if (output_surface_->capabilities().draw_and_swap_full_viewport_every_frame)
294 return true; 295 return true;
295 296
296 if (device_viewport_size_.IsEmpty()) { 297 if (DrawViewportSize().IsEmpty()) {
297 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw empty viewport", 298 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw empty viewport",
298 TRACE_EVENT_SCOPE_THREAD); 299 TRACE_EVENT_SCOPE_THREAD);
299 return false; 300 return false;
300 } 301 }
301 if (active_tree_->ViewportSizeInvalid()) { 302 if (active_tree_->ViewportSizeInvalid()) {
302 TRACE_EVENT_INSTANT0( 303 TRACE_EVENT_INSTANT0(
303 "cc", "LayerTreeHostImpl::CanDraw viewport size recently changed", 304 "cc", "LayerTreeHostImpl::CanDraw viewport size recently changed",
304 TRACE_EVENT_SCOPE_THREAD); 305 TRACE_EVENT_SCOPE_THREAD);
305 return false; 306 return false;
306 } 307 }
(...skipping 14 matching lines...) Expand all
321 AnimateLayers(monotonic_time, wall_clock_time); 322 AnimateLayers(monotonic_time, wall_clock_time);
322 AnimateScrollbars(monotonic_time); 323 AnimateScrollbars(monotonic_time);
323 AnimateTopControls(monotonic_time); 324 AnimateTopControls(monotonic_time);
324 } 325 }
325 326
326 void LayerTreeHostImpl::ManageTiles() { 327 void LayerTreeHostImpl::ManageTiles() {
327 if (!tile_manager_) 328 if (!tile_manager_)
328 return; 329 return;
329 if (!manage_tiles_needed_) 330 if (!manage_tiles_needed_)
330 return; 331 return;
332 if (!device_viewport_valid_for_tile_management_)
333 return;
334
331 manage_tiles_needed_ = false; 335 manage_tiles_needed_ = false;
332 tile_manager_->ManageTiles(); 336 tile_manager_->ManageTiles();
333 337
334 size_t memory_required_bytes; 338 size_t memory_required_bytes;
335 size_t memory_nice_to_have_bytes; 339 size_t memory_nice_to_have_bytes;
336 size_t memory_allocated_bytes; 340 size_t memory_allocated_bytes;
337 size_t memory_used_bytes; 341 size_t memory_used_bytes;
338 tile_manager_->GetMemoryStats(&memory_required_bytes, 342 tile_manager_->GetMemoryStats(&memory_required_bytes,
339 &memory_nice_to_have_bytes, 343 &memory_nice_to_have_bytes,
340 &memory_allocated_bytes, 344 &memory_allocated_bytes,
341 &memory_used_bytes); 345 &memory_used_bytes);
342 SendManagedMemoryStats(memory_required_bytes, 346 SendManagedMemoryStats(memory_required_bytes,
343 memory_nice_to_have_bytes, 347 memory_nice_to_have_bytes,
344 memory_used_bytes); 348 memory_used_bytes);
345 } 349 }
346 350
347 void LayerTreeHostImpl::StartPageScaleAnimation(gfx::Vector2d target_offset, 351 void LayerTreeHostImpl::StartPageScaleAnimation(gfx::Vector2d target_offset,
348 bool anchor_point, 352 bool anchor_point,
349 float page_scale, 353 float page_scale,
350 base::TimeTicks start_time, 354 base::TimeTicks start_time,
351 base::TimeDelta duration) { 355 base::TimeDelta duration) {
352 if (!RootScrollLayer()) 356 if (!RootScrollLayer())
353 return; 357 return;
354 358
355 gfx::Vector2dF scroll_total = 359 gfx::Vector2dF scroll_total =
356 RootScrollLayer()->scroll_offset() + RootScrollLayer()->ScrollDelta(); 360 RootScrollLayer()->scroll_offset() + RootScrollLayer()->ScrollDelta();
357 gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize(); 361 gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize();
358 gfx::SizeF viewport_size = VisibleViewportSize(); 362 gfx::SizeF viewport_size = UnscaledScrollableViewportSize();
359 363
360 double start_time_seconds = (start_time - base::TimeTicks()).InSecondsF(); 364 double start_time_seconds = (start_time - base::TimeTicks()).InSecondsF();
361 365
362 // Easing constants experimentally determined. 366 // Easing constants experimentally determined.
363 scoped_ptr<TimingFunction> timing_function = 367 scoped_ptr<TimingFunction> timing_function =
364 CubicBezierTimingFunction::Create(.8, 0, .3, .9).PassAs<TimingFunction>(); 368 CubicBezierTimingFunction::Create(.8, 0, .3, .9).PassAs<TimingFunction>();
365 369
366 page_scale_animation_ = 370 page_scale_animation_ =
367 PageScaleAnimation::Create(scroll_total, 371 PageScaleAnimation::Create(scroll_total,
368 active_tree_->total_page_scale_factor(), 372 active_tree_->total_page_scale_factor(),
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after
1180 old_policy.priority_cutoff_when_visible) { 1184 old_policy.priority_cutoff_when_visible) {
1181 needs_commit = false; 1185 needs_commit = false;
1182 } 1186 }
1183 1187
1184 if (needs_commit) 1188 if (needs_commit)
1185 client_->SetNeedsCommitOnImplThread(); 1189 client_->SetNeedsCommitOnImplThread();
1186 } 1190 }
1187 1191
1188 void LayerTreeHostImpl::SetExternalDrawConstraints( 1192 void LayerTreeHostImpl::SetExternalDrawConstraints(
1189 const gfx::Transform& transform, 1193 const gfx::Transform& transform,
1190 gfx::Rect viewport) { 1194 gfx::Rect viewport,
1195 gfx::Rect clip,
1196 bool valid_for_tile_management) {
1191 external_transform_ = transform; 1197 external_transform_ = transform;
1192 external_viewport_ = viewport; 1198 external_viewport_ = viewport;
1199 external_clip_ = clip;
1200 device_viewport_valid_for_tile_management_ = valid_for_tile_management;
1193 } 1201 }
1194 1202
1195 void LayerTreeHostImpl::SetExternalStencilTest(bool enabled) { 1203 void LayerTreeHostImpl::SetExternalStencilTest(bool enabled) {
1196 external_stencil_test_enabled_ = enabled; 1204 external_stencil_test_enabled_ = enabled;
1197 } 1205 }
1198 1206
1199 void LayerTreeHostImpl::SetNeedsRedrawRect(gfx::Rect damage_rect) { 1207 void LayerTreeHostImpl::SetNeedsRedrawRect(gfx::Rect damage_rect) {
1200 client_->SetNeedsRedrawRectOnImplThread(damage_rect); 1208 client_->SetNeedsRedrawRectOnImplThread(damage_rect);
1201 } 1209 }
1202 1210
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 1391
1384 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) { 1392 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) {
1385 if (output_surface_) 1393 if (output_surface_)
1386 output_surface_->SetNeedsBeginFrame(enable); 1394 output_surface_->SetNeedsBeginFrame(enable);
1387 } 1395 }
1388 1396
1389 float LayerTreeHostImpl::DeviceScaleFactor() const { 1397 float LayerTreeHostImpl::DeviceScaleFactor() const {
1390 return device_scale_factor_; 1398 return device_scale_factor_;
1391 } 1399 }
1392 1400
1393 gfx::SizeF LayerTreeHostImpl::VisibleViewportSize() const { 1401 gfx::SizeF LayerTreeHostImpl::UnscaledScrollableViewportSize() const {
1394 // The container layer bounds should be used if non-overlay scrollbars may 1402 // The container layer bounds should be used if non-overlay scrollbars may
1395 // exist since it adjusts for them. 1403 // exist since it adjusts for them.
1396 LayerImpl* container_layer = active_tree_->RootContainerLayer(); 1404 LayerImpl* container_layer = active_tree_->RootContainerLayer();
1397 if (!Settings().solid_color_scrollbars && container_layer) { 1405 if (!Settings().solid_color_scrollbars && container_layer) {
1398 DCHECK(!top_controls_manager_); 1406 DCHECK(!top_controls_manager_);
1399 DCHECK_EQ(0, overdraw_bottom_height_); 1407 DCHECK_EQ(0, overdraw_bottom_height_);
1400 return container_layer->bounds(); 1408 return container_layer->bounds();
1401 } 1409 }
1402 1410
1403 gfx::SizeF dip_size = 1411 gfx::SizeF dip_size =
1404 gfx::ScaleSize(device_viewport_size(), 1.f / device_scale_factor()); 1412 gfx::ScaleSize(device_viewport_size_, 1.f / device_scale_factor());
1405 1413
1406 float top_offset = 1414 float top_offset =
1407 top_controls_manager_ ? top_controls_manager_->content_top_offset() : 0.f; 1415 top_controls_manager_ ? top_controls_manager_->content_top_offset() : 0.f;
1408 return gfx::SizeF(dip_size.width(), 1416 return gfx::SizeF(dip_size.width(),
1409 dip_size.height() - top_offset - overdraw_bottom_height_); 1417 dip_size.height() - top_offset - overdraw_bottom_height_);
1410 } 1418 }
1411 1419
1412 const LayerTreeSettings& LayerTreeHostImpl::Settings() const { 1420 const LayerTreeSettings& LayerTreeHostImpl::Settings() const {
1413 return settings(); 1421 return settings();
1414 } 1422 }
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1789 1797
1790 SetOffscreenContextProvider(NULL); 1798 SetOffscreenContextProvider(NULL);
1791 1799
1792 client_->SetNeedsCommitOnImplThread(); 1800 client_->SetNeedsCommitOnImplThread();
1793 } 1801 }
1794 1802
1795 void LayerTreeHostImpl::SetViewportSize(gfx::Size device_viewport_size) { 1803 void LayerTreeHostImpl::SetViewportSize(gfx::Size device_viewport_size) {
1796 if (device_viewport_size == device_viewport_size_) 1804 if (device_viewport_size == device_viewport_size_)
1797 return; 1805 return;
1798 1806
1799 if (pending_tree_ && device_viewport_size_ != device_viewport_size) 1807 if (pending_tree_)
1800 active_tree_->SetViewportSizeInvalid(); 1808 active_tree_->SetViewportSizeInvalid();
1801 1809
1802 device_viewport_size_ = device_viewport_size; 1810 device_viewport_size_ = device_viewport_size;
1803 1811
1804 UpdateMaxScrollOffset(); 1812 UpdateMaxScrollOffset();
1805 1813
1806 if (renderer_) 1814 if (renderer_)
1807 renderer_->ViewportChanged(); 1815 renderer_->ViewportChanged();
1808 1816
1809 client_->OnCanDrawStateChanged(CanDraw()); 1817 client_->OnCanDrawStateChanged(CanDraw());
(...skipping 21 matching lines...) Expand all
1831 return; 1839 return;
1832 device_scale_factor_ = device_scale_factor; 1840 device_scale_factor_ = device_scale_factor;
1833 1841
1834 if (renderer_) 1842 if (renderer_)
1835 renderer_->ViewportChanged(); 1843 renderer_->ViewportChanged();
1836 1844
1837 UpdateMaxScrollOffset(); 1845 UpdateMaxScrollOffset();
1838 SetFullRootLayerDamage(); 1846 SetFullRootLayerDamage();
1839 } 1847 }
1840 1848
1849 gfx::Size LayerTreeHostImpl::DrawViewportSize() const {
1850 return DeviceViewport().size();
1851 }
1852
1841 gfx::Rect LayerTreeHostImpl::DeviceViewport() const { 1853 gfx::Rect LayerTreeHostImpl::DeviceViewport() const {
1842 if (external_viewport_.IsEmpty()) 1854 if (external_viewport_.IsEmpty())
1843 return gfx::Rect(device_viewport_size_); 1855 return gfx::Rect(device_viewport_size_);
1844 1856
1845 return external_viewport_; 1857 return external_viewport_;
1846 } 1858 }
1847 1859
1848 const gfx::Transform& LayerTreeHostImpl::DeviceTransform() const { 1860 gfx::Rect LayerTreeHostImpl::DeviceClip() const {
1861 if (external_clip_.IsEmpty())
1862 return DeviceViewport();
1863
1864 return external_clip_;
1865 }
1866
1867 const gfx::Transform& LayerTreeHostImpl::DrawTransform() const {
1849 return external_transform_; 1868 return external_transform_;
1850 } 1869 }
1851 1870
1852 void LayerTreeHostImpl::UpdateMaxScrollOffset() { 1871 void LayerTreeHostImpl::UpdateMaxScrollOffset() {
1853 active_tree_->UpdateMaxScrollOffset(); 1872 active_tree_->UpdateMaxScrollOffset();
1854 } 1873 }
1855 1874
1856 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 1875 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
1857 client_->SetNeedsRedrawOnImplThread(); 1876 client_->SetNeedsRedrawOnImplThread();
1858 active_tree_->set_needs_update_draw_properties(); 1877 active_tree_->set_needs_update_draw_properties();
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
2291 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet()); 2310 scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet());
2292 2311
2293 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer()); 2312 CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer());
2294 scroll_info->page_scale_delta = active_tree_->page_scale_delta(); 2313 scroll_info->page_scale_delta = active_tree_->page_scale_delta();
2295 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); 2314 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta);
2296 2315
2297 return scroll_info.Pass(); 2316 return scroll_info.Pass();
2298 } 2317 }
2299 2318
2300 void LayerTreeHostImpl::SetFullRootLayerDamage() { 2319 void LayerTreeHostImpl::SetFullRootLayerDamage() {
2301 SetViewportDamage(gfx::Rect(device_viewport_size_)); 2320 SetViewportDamage(gfx::Rect(DrawViewportSize()));
2302 } 2321 }
2303 2322
2304 void LayerTreeHostImpl::AnimatePageScale(base::TimeTicks time) { 2323 void LayerTreeHostImpl::AnimatePageScale(base::TimeTicks time) {
2305 if (!page_scale_animation_ || !RootScrollLayer()) 2324 if (!page_scale_animation_ || !RootScrollLayer())
2306 return; 2325 return;
2307 2326
2308 double monotonic_time = (time - base::TimeTicks()).InSecondsF(); 2327 double monotonic_time = (time - base::TimeTicks()).InSecondsF();
2309 gfx::Vector2dF scroll_total = RootScrollLayer()->scroll_offset() + 2328 gfx::Vector2dF scroll_total = RootScrollLayer()->scroll_offset() +
2310 RootScrollLayer()->ScrollDelta(); 2329 RootScrollLayer()->ScrollDelta();
2311 2330
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
2611 2630
2612 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( 2631 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource(
2613 UIResourceId uid) const { 2632 UIResourceId uid) const {
2614 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); 2633 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid);
2615 if (iter != ui_resource_map_.end()) 2634 if (iter != ui_resource_map_.end())
2616 return iter->second; 2635 return iter->second;
2617 return 0; 2636 return 0;
2618 } 2637 }
2619 2638
2620 } // namespace cc 2639 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698