render_widget_compositor.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/gpu/render_widget_compositor.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <limits> 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(OS_ANDROID) 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/android/sys_utils.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/synchronization/lock.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/values.h" 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "cc/base/latency_info_swap_promise.h" 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "cc/base/latency_info_swap_promise_monitor.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/switches.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/layer_tree_debug_state.h" 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/debug/micro_benchmark.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/layer_tree_host.h" 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/child/child_shared_bitmap_manager.h" 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/common/content_switches_internal.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/gpu/client/context_provider_command_buffer.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/content_switches.h" 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/input/input_handler_manager.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/render_thread_impl.h" 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "gpu/command_buffer/client/gles2_interface.h" 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebSize.h" 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebWidget.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_switches.h" 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/native_theme/native_theme_switches.h" 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/renderer/compositor_bindings/web_layer_impl.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace base { 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Value; 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Layer; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFloatPoint; 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSize; 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRect; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GetSwitchValueAsInt( 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CommandLine& command_line, 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& switch_string, 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int min_value, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_value, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* result) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string string_value = command_line.GetSwitchValueASCII(switch_string); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int int_value; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToInt(string_value, &int_value) && 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int_value >= min_value && int_value <= max_value) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *result = int_value; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Failed to parse switch " << switch_string << ": " << 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string_value; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( 78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderWidget* widget, 79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool threaded) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<RenderWidgetCompositor> compositor( 81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch new RenderWidgetCompositor(widget, threaded)); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine* cmd = CommandLine::ForCurrentProcess(); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeSettings settings; 86b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 87b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // For web contents, layer transforms should scale up the contents of layers 88b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // to keep content always crisp when possible. 89b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) settings.layer_transforms_should_scale_layer_contents = true; 90b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) settings.throttle_frame_production = 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) !cmd->HasSwitch(switches::kDisableGpuVsync); 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.begin_frame_scheduling_enabled = 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cmd->HasSwitch(switches::kEnableBeginFrameScheduling); 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.main_frame_before_activation_enabled = 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableMainFrameBeforeActivation) && 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeActivation); 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.main_frame_before_draw_enabled = 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeDraw); 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) settings.using_synchronous_renderer_compositor = 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) widget->UsingSynchronousRendererCompositor(); 102a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch settings.report_overscroll_only_for_scrollable_axes = 103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch !widget->UsingSynchronousRendererCompositor(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.accelerated_animation_enabled = 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableThreadedAnimation); 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) settings.touch_hit_testing = 107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch !cmd->HasSwitch(cc::switches::kDisableCompositorTouchHitTesting); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int default_tile_width = settings.default_tile_size.width(); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kDefaultTileWidth)) { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kDefaultTileWidth, 1, 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), &default_tile_width); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int default_tile_height = settings.default_tile_size.height(); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kDefaultTileHeight)) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kDefaultTileHeight, 1, 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), &default_tile_height); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.default_tile_size = gfx::Size(default_tile_width, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_tile_height); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_untiled_layer_width = settings.max_untiled_layer_size.width(); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kMaxUntiledLayerWidth)) { 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerWidth, 1, 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &max_untiled_layer_width); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_untiled_layer_height = settings.max_untiled_layer_size.height(); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kMaxUntiledLayerHeight)) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerHeight, 1, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &max_untiled_layer_height); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.max_untiled_layer_size = gfx::Size(max_untiled_layer_width, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_untiled_layer_height); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RenderThreadImpl* render_thread = RenderThreadImpl::current(); 1395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // render_thread may be NULL in tests. 1405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (render_thread) { 1415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.impl_side_painting = 1425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu render_thread->is_impl_side_painting_enabled(); 1435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (render_thread->is_gpu_rasterization_forced()) 1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.rasterization_site = cc::LayerTreeSettings::GpuRasterization; 1455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu else if (render_thread->is_gpu_rasterization_enabled()) 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.rasterization_site = cc::LayerTreeSettings::HybridRasterization; 1475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu else 1485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.rasterization_site = cc::LayerTreeSettings::CpuRasterization; 1495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.create_low_res_tiling = render_thread->is_low_res_tiling_enabled(); 1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.can_use_lcd_text = render_thread->is_lcd_text_enabled(); 1515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.use_zero_copy = render_thread->is_zero_copy_enabled(); 1525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.use_one_copy = render_thread->is_one_copy_enabled(); 1535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.calculate_top_controls_position = 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableTopControlsPositionCalculation); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsHeight)) { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string controls_height_str = 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsHeight); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double controls_height; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(controls_height_str, &controls_height) && 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controls_height > 0) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_height = controls_height; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (settings.calculate_top_controls_position && 1675e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) settings.top_controls_height <= 0) { 1685e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) DCHECK(false) 1695e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) << "Top controls repositioning enabled without valid height set."; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.calculate_top_controls_position = false; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsShowThreshold)) { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string top_threshold_str = 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsShowThreshold); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double show_threshold; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(top_threshold_str, &show_threshold) && 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_threshold >= 0.f && show_threshold <= 1.f) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_show_threshold = show_threshold; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsHideThreshold)) { 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string top_threshold_str = 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsHideThreshold); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double hide_threshold; 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(top_threshold_str, &hide_threshold) && 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hide_threshold >= 0.f && hide_threshold <= 1.f) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_hide_threshold = hide_threshold; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) settings.use_pinch_virtual_viewport = 19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport); 193ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch settings.allow_antialiasing &= 194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch !cmd->HasSwitch(cc::switches::kDisableCompositedAntialiasing); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These flags should be mirrored by UI versions in ui/compositor/. 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_debug_borders = 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowCompositedLayerBorders); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_fps_counter = 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowFPSCounter); 201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) settings.initial_debug_state.show_layer_animation_bounds_rects = 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) cmd->HasSwitch(cc::switches::kShowLayerAnimationBounds); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_paint_rects = 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(switches::kShowPaintRects); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_property_changed_rects = 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowPropertyChangedRects); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_surface_damage_rects = 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowSurfaceDamageRects); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_screen_space_rects = 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowScreenSpaceRects); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_replica_screen_space_rects = 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_occluding_rects = 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowOccludingRects); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_non_occluding_rects = 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowNonOccludingRects); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.SetRecordRenderingStats( 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableGpuBenchmarking)); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kSlowDownRasterScaleFactor)) { 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kMinSlowDownScaleFactor = 0; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kMaxSlowDownScaleFactor = INT_MAX; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt( 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *cmd, 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::switches::kSlowDownRasterScaleFactor, 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kMinSlowDownScaleFactor, 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kMaxSlowDownScaleFactor, 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &settings.initial_debug_state.slow_down_raster_scale_factor); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kMaxTilesForInterestArea)) { 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int max_tiles_for_interest_area; 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (GetSwitchValueAsInt(*cmd, 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc::switches::kMaxTilesForInterestArea, 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1, std::numeric_limits<int>::max(), 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &max_tiles_for_interest_area)) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.max_tiles_for_interest_area = max_tiles_for_interest_area; 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kMaxUnusedResourceMemoryUsagePercentage)) { 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int max_unused_resource_memory_percentage; 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (GetSwitchValueAsInt( 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *cmd, 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc::switches::kMaxUnusedResourceMemoryUsagePercentage, 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0, 100, 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &max_unused_resource_memory_percentage)) { 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.max_unused_resource_memory_percentage = 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) max_unused_resource_memory_percentage; 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.strict_layer_property_change_checking = 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cmd->HasSwitch(cc::switches::kStrictLayerPropertyChangeChecking); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.max_partial_texture_updates = 0; 258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade; 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch settings.solid_color_scrollbar_color = 260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) (widget->UsingSynchronousRendererCompositor()) // It is Android Webview. 2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ? SK_ColorTRANSPARENT 2627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : SkColorSetARGB(128, 128, 128, 128); 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.highp_threshold_min = 2048; 264a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Android WebView handles root layer flings itself. 265a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) settings.ignore_root_layer_flings = 266a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) widget->UsingSynchronousRendererCompositor(); 267d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // RGBA_4444 textures are only enabled for low end devices 268d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // and are disabled for Android WebView as it doesn't support the format. 269d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) settings.use_rgba_4444_textures = 270d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::android::SysUtils::IsLowEndDevice() && 271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !widget->UsingSynchronousRendererCompositor(); 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (widget->UsingSynchronousRendererCompositor()) { 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(boliu): Set this ratio for Webview. 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (base::android::SysUtils::IsLowEndDevice()) { 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // On low-end we want to be very carefull about killing other 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // apps. So initially we use 50% more memory to avoid flickering 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // or raster-on-demand. 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.max_memory_for_prepaint_percentage = 67; 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // On other devices we have increased memory excessively to avoid 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // raster-on-demand already, so now we reserve 50% _only_ to avoid 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // raster-on-demand, and use 50% of the memory otherwise. 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.max_memory_for_prepaint_percentage = 50; 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 285effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Webview does not own the surface so should not clear it. 286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch settings.should_clear_root_render_pass = 287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch !widget->UsingSynchronousRendererCompositor(); 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 289c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#elif !defined(OS_MACOSX) 29023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (ui::IsOverlayScrollbarEnabled()) { 29158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::Thinning; 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport)) { 2945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // use_pinch_zoom_scrollbars is only true on desktop when non-overlay 2955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // scrollbars are in use. 2965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.use_pinch_zoom_scrollbars = true; 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade; 298c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 299c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) compositor->Initialize(settings); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return compositor.Pass(); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 307ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochRenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 308ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool threaded) 309ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch : threaded_(threaded), 310ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch suppress_schedule_composite_(false), 311ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch widget_(widget) { 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderWidgetCompositor::~RenderWidgetCompositor() {} 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const base::WeakPtr<cc::InputHandler>& 31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RenderWidgetCompositor::GetInputHandler() { 31890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return layer_tree_host_->GetInputHandler(); 31990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 32090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (suppress_schedule_composite_ == suppress) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (suppress) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_EVENT_ASYNC_BEGIN0("gpu", 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_EVENT_ASYNC_END0("gpu", 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) suppress_schedule_composite_ = suppress; 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool RenderWidgetCompositor::BeginMainFrameRequested() const { 3351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return layer_tree_host_->BeginMainFrameRequested(); 3361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) { 339b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) layer_tree_host_->UpdateClientAnimations(time); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::Composite(base::TimeTicks frame_begin_time) { 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->Composite(frame_begin_time); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetNeedsDisplayOnAllLayers(); 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); 35290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) current.rasterize_only_visible_content = true; 35390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_tree_host_->SetDebugState(current); 35490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 35590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 35690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderWidgetCompositor::UpdateTopControlsState( 35790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::TopControlsState constraints, 35890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::TopControlsState current, 35990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool animate) { 36090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_tree_host_->UpdateTopControlsState(constraints, 36190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) current, 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) animate); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::SetOverdrawBottomHeight( 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float overdraw_bottom_height) { 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetOverdrawBottomHeight(overdraw_bottom_height); 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsRedrawRect(gfx::Rect damage_rect) { 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetNeedsRedrawRect(damage_rect); 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsForcedRedraw() { 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer_tree_host_->SetNextCommitForcesRedraw(); 376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) setNeedsAnimate(); 3774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 379a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)scoped_ptr<cc::SwapPromiseMonitor> 380a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor( 381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::LatencyInfo* latency) { 382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<cc::SwapPromiseMonitor>( 383a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) new cc::LatencyInfoSwapPromiseMonitor( 384a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) latency, layer_tree_host_.get(), NULL)); 385b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 386b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 387a3f7b4e666c476898878fa745f637129375cd889Ben Murdochint RenderWidgetCompositor::GetLayerTreeId() const { 388a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return layer_tree_host_->id(); 389a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 390a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 391a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void RenderWidgetCompositor::NotifyInputThrottledUntilCommit() { 392a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) layer_tree_host_->NotifyInputThrottledUntilCommit(); 393a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 394a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 3953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const cc::Layer* RenderWidgetCompositor::GetRootLayer() const { 3963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return layer_tree_host_->root_layer(); 3973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 3983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool RenderWidgetCompositor::ScheduleMicroBenchmark( 4004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& name, 4018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_ptr<base::Value> value, 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::Callback<void(scoped_ptr<base::Value>)>& callback) { 4038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return layer_tree_host_->ScheduleMicroBenchmark(name, value.Pass(), callback); 4044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::Initialize(cc::LayerTreeSettings settings) { 4075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy; 4085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RenderThreadImpl* render_thread = RenderThreadImpl::current(); 4095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cc::SharedBitmapManager* shared_bitmap_manager = NULL; 4105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // render_thread may be NULL in tests. 4115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (render_thread) { 4125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu compositor_message_loop_proxy = 4135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu render_thread->compositor_message_loop_proxy(); 4145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu shared_bitmap_manager = render_thread->shared_bitmap_manager(); 4155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (compositor_message_loop_proxy.get()) { 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( 4185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, shared_bitmap_manager, settings, compositor_message_loop_proxy); 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( 4215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, this, shared_bitmap_manager, settings); 422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 4235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(layer_tree_host_); 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setSurfaceReady() { 427b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) layer_tree_host_->SetLayerTreeHostClientReady(); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetRootLayer( 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<const webkit::WebLayerImpl*>(&layer)->layer()); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::clearRootLayer() { 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setViewportSize( 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebSize&, 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebSize& device_viewport_size) { 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetViewportSize(device_viewport_size); 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize RenderWidgetCompositor::layoutViewportSize() const { 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return layer_tree_host_->device_viewport_size(); 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize RenderWidgetCompositor::deviceViewportSize() const { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->device_viewport_size(); 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebFloatPoint RenderWidgetCompositor::adjustEventPointForPinchZoom( 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebFloatPoint& point) const { 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return point; 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setDeviceScaleFactor(float device_scale) { 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDeviceScaleFactor(device_scale); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float RenderWidgetCompositor::deviceScaleFactor() const { 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->device_scale_factor(); 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::setBackgroundColor(blink::WebColor color) { 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->set_background_color(color); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setHasTransparentBackground(bool transparent) { 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->set_has_transparent_background(transparent); 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 47458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void RenderWidgetCompositor::setOverhangBitmap(const SkBitmap& bitmap) { 47558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) layer_tree_host_->SetOverhangBitmap(bitmap); 47658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 47758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setVisible(bool visible) { 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetVisible(visible); 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setPageScaleFactorAndLimits( 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float page_scale_factor, float minimum, float maximum) { 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetPageScaleFactorAndLimits( 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor, minimum, maximum); 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::startPageScaleAnimation( 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebPoint& destination, 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_anchor, 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float new_page_scale, 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double duration_sec) { 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta duration = base::TimeDelta::FromMicroseconds( 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) duration_sec * base::Time::kMicrosecondsPerSecond); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->StartPageScaleAnimation( 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d(destination.x, destination.y), 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) use_anchor, 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_page_scale, 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) duration); 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RenderWidgetCompositor::heuristicsForGpuRasterizationUpdated( 5035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool matches_heuristics) { 5045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layer_tree_host_->set_has_gpu_rasterization_trigger(matches_heuristics); 5055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 5065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setNeedsAnimate() { 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetNeedsAnimate(); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderWidgetCompositor::commitRequested() const { 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->CommitRequested(); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::didStopFlinging() { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->DidStopFlinging(); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::registerForAnimations(blink::WebLayer* layer) { 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::Layer* cc_layer = static_cast<webkit::WebLayerImpl*>(layer)->layer(); 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc_layer->layer_animation_controller()->SetAnimationRegistrar( 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->animation_registrar()); 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 525d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void RenderWidgetCompositor::registerViewportLayers( 526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* pageScaleLayer, 527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* innerViewportScrollLayer, 528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* outerViewportScrollLayer) { 529d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layer_tree_host_->RegisterViewportLayers( 530d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) static_cast<const webkit::WebLayerImpl*>(pageScaleLayer)->layer(), 531d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) static_cast<const webkit::WebLayerImpl*>(innerViewportScrollLayer) 532d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ->layer(), 533d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // The outer viewport layer will only exist when using pinch virtual 534d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // viewports. 535d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) outerViewportScrollLayer ? static_cast<const webkit::WebLayerImpl*>( 536d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) outerViewportScrollLayer)->layer() 537d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) : NULL); 538d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 539d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 540d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void RenderWidgetCompositor::clearViewportLayers() { 541d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(), 542d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<cc::Layer>(), 543d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<cc::Layer>()); 544d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 545d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderWidgetCompositor::compositeAndReadback( 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *pixels, const WebRect& rect_in_device_viewport) { 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->CompositeAndReadback(pixels, 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rect_in_device_viewport); 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::finishAllRendering() { 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->FinishAllRendering(); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDeferCommits(defer_commits); 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowFPSCounter(bool show) { 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_fps_counter = show; 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowPaintRects(bool show) { 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_paint_rects = show; 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowDebugBorders(bool show) { 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_debug_borders = show; 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setContinuousPaintingEnabled(bool enabled) { 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.continuous_painting = enabled; 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid RenderWidgetCompositor::setShowScrollBottleneckRects(bool show) { 5857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_touch_event_handler_rects = show; 5877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_wheel_event_handler_rects = show; 5887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_non_fast_scrollable_rects = show; 5897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch layer_tree_host_->SetDebugState(debug_state); 5907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 5917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 592f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { 593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->InstrumentWillBeginFrame(frame_id); 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->willBeginCompositorFrame(); 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void RenderWidgetCompositor::DidBeginMainFrame() { 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->InstrumentDidBeginFrame(); 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::Animate(base::TimeTicks frame_begin_time) { 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) widget_->webwidget()->animate( 6035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (frame_begin_time - base::TimeTicks()).InSecondsF()); 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::Layout() { 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->webwidget()->layout(); 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::ApplyScrollAndScale( 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Vector2d& scroll_delta, 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float page_scale) { 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 616a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( 617a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool fallback) { 618a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return widget_->CreateOutputSurface(fallback); 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RenderWidgetCompositor::DidInitializeOutputSurface() { 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::WillCommit() { 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->InstrumentWillComposite(); 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCommit() { 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->DidCommitCompositorFrame(); 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didBecomeReadyForAdditionalInput(); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCommitAndDrawFrame() { 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didCommitAndDrawCompositorFrame(); 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCompleteSwapBuffers() { 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didCompleteSwapBuffers(); 639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!threaded_) 640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersComplete(); 641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::ScheduleComposite() { 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!suppress_schedule_composite_) 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->scheduleComposite(); 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::ScheduleAnimation() { 649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->scheduleAnimation(); 650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::DidPostSwapBuffers() { 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersPosted(); 654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::DidAbortSwapBuffers() { 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersAborted(); 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cc::ContextProvider* provider = 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 667