render_widget_compositor.cc revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
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); 931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) settings.begin_impl_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(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.accelerated_animation_enabled = 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableThreadedAnimation); 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) settings.touch_hit_testing = 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableCompositorTouchHitTesting) && 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !cmd->HasSwitch(switches::kEnableBleedingEdgeRenderingFastPaths); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int default_tile_width = settings.default_tile_size.width(); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kDefaultTileWidth)) { 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kDefaultTileWidth, 1, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), &default_tile_width); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int default_tile_height = settings.default_tile_size.height(); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kDefaultTileHeight)) { 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kDefaultTileHeight, 1, 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), &default_tile_height); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.default_tile_size = gfx::Size(default_tile_width, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_tile_height); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_untiled_layer_width = settings.max_untiled_layer_size.width(); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kMaxUntiledLayerWidth)) { 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerWidth, 1, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &max_untiled_layer_width); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_untiled_layer_height = settings.max_untiled_layer_size.height(); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kMaxUntiledLayerHeight)) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerHeight, 1, 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &max_untiled_layer_height); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.max_untiled_layer_size = gfx::Size(max_untiled_layer_width, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_untiled_layer_height); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.impl_side_painting = 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderThreadImpl::current()->is_impl_side_painting_enabled(); 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (RenderThreadImpl::current()->is_gpu_rasterization_forced()) 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.rasterization_site = cc::LayerTreeSettings::GpuRasterization; 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else if (RenderThreadImpl::current()->is_gpu_rasterization_enabled()) 142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.rasterization_site = cc::LayerTreeSettings::HybridRasterization; 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.rasterization_site = cc::LayerTreeSettings::CpuRasterization; 14523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) settings.create_low_res_tiling = 14623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) RenderThreadImpl::current()->is_low_res_tiling_enabled(); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.calculate_top_controls_position = 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableTopControlsPositionCalculation); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsHeight)) { 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string controls_height_str = 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsHeight); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double controls_height; 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(controls_height_str, &controls_height) && 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controls_height > 0) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_height = controls_height; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (settings.calculate_top_controls_position && 1605e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) settings.top_controls_height <= 0) { 1615e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) DCHECK(false) 1625e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) << "Top controls repositioning enabled without valid height set."; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.calculate_top_controls_position = false; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsShowThreshold)) { 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string top_threshold_str = 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsShowThreshold); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double show_threshold; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(top_threshold_str, &show_threshold) && 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_threshold >= 0.f && show_threshold <= 1.f) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_show_threshold = show_threshold; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsHideThreshold)) { 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string top_threshold_str = 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsHideThreshold); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double hide_threshold; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(top_threshold_str, &hide_threshold) && 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hide_threshold >= 0.f && hide_threshold <= 1.f) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_hide_threshold = hide_threshold; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.can_use_lcd_text = 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderThreadImpl::current()->is_lcd_text_enabled(); 18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) settings.use_pinch_virtual_viewport = 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport); 188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch settings.allow_antialiasing &= 189ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch !cmd->HasSwitch(cc::switches::kDisableCompositedAntialiasing); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These flags should be mirrored by UI versions in ui/compositor/. 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_debug_borders = 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowCompositedLayerBorders); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_fps_counter = 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowFPSCounter); 196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) settings.initial_debug_state.show_layer_animation_bounds_rects = 197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) cmd->HasSwitch(cc::switches::kShowLayerAnimationBounds); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_paint_rects = 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(switches::kShowPaintRects); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_property_changed_rects = 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowPropertyChangedRects); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_surface_damage_rects = 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowSurfaceDamageRects); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_screen_space_rects = 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowScreenSpaceRects); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_replica_screen_space_rects = 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_occluding_rects = 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowOccludingRects); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_non_occluding_rects = 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowNonOccludingRects); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.SetRecordRenderingStats( 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableGpuBenchmarking)); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kSlowDownRasterScaleFactor)) { 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kMinSlowDownScaleFactor = 0; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kMaxSlowDownScaleFactor = INT_MAX; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt( 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *cmd, 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::switches::kSlowDownRasterScaleFactor, 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kMinSlowDownScaleFactor, 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kMaxSlowDownScaleFactor, 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &settings.initial_debug_state.slow_down_raster_scale_factor); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kMaxTilesForInterestArea)) { 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int max_tiles_for_interest_area; 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (GetSwitchValueAsInt(*cmd, 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc::switches::kMaxTilesForInterestArea, 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1, std::numeric_limits<int>::max(), 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &max_tiles_for_interest_area)) 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.max_tiles_for_interest_area = max_tiles_for_interest_area; 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kMaxUnusedResourceMemoryUsagePercentage)) { 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int max_unused_resource_memory_percentage; 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (GetSwitchValueAsInt( 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *cmd, 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc::switches::kMaxUnusedResourceMemoryUsagePercentage, 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0, 100, 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &max_unused_resource_memory_percentage)) { 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.max_unused_resource_memory_percentage = 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) max_unused_resource_memory_percentage; 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.strict_layer_property_change_checking = 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cmd->HasSwitch(cc::switches::kStrictLayerPropertyChangeChecking); 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.use_map_image = RenderThreadImpl::current()->is_map_image_enabled(); 25290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.max_partial_texture_updates = 0; 255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade; 2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch settings.solid_color_scrollbar_color = 257a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) (widget->UsingSynchronousRendererCompositor()) // It is Android Webview. 2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ? SK_ColorTRANSPARENT 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : SkColorSetARGB(128, 128, 128, 128); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.highp_threshold_min = 2048; 261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Android WebView handles root layer flings itself. 262a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) settings.ignore_root_layer_flings = 263a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) widget->UsingSynchronousRendererCompositor(); 264d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // RGBA_4444 textures are only enabled for low end devices 265d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // and are disabled for Android WebView as it doesn't support the format. 266d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) settings.use_rgba_4444_textures = 267d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::android::SysUtils::IsLowEndDevice() && 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !widget->UsingSynchronousRendererCompositor(); 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (widget->UsingSynchronousRendererCompositor()) { 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(boliu): Set this ratio for Webview. 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (base::android::SysUtils::IsLowEndDevice()) { 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // On low-end we want to be very carefull about killing other 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // apps. So initially we use 50% more memory to avoid flickering 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // or raster-on-demand. 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.max_memory_for_prepaint_percentage = 67; 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // On other devices we have increased memory excessively to avoid 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // raster-on-demand already, so now we reserve 50% _only_ to avoid 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // raster-on-demand, and use 50% of the memory otherwise. 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.max_memory_for_prepaint_percentage = 50; 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 283c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#elif !defined(OS_MACOSX) 28423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (ui::IsOverlayScrollbarEnabled()) { 28558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::Thinning; 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport)) { 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade; 289c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 290c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) compositor->Initialize(settings); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return compositor.Pass(); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 298ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochRenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 299ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool threaded) 300ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch : threaded_(threaded), 301ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch suppress_schedule_composite_(false), 302ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch widget_(widget) { 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderWidgetCompositor::~RenderWidgetCompositor() {} 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const base::WeakPtr<cc::InputHandler>& 30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RenderWidgetCompositor::GetInputHandler() { 30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return layer_tree_host_->GetInputHandler(); 31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (suppress_schedule_composite_ == suppress) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (suppress) 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_EVENT_ASYNC_BEGIN0("gpu", 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_EVENT_ASYNC_END0("gpu", 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) suppress_schedule_composite_ = suppress; 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool RenderWidgetCompositor::BeginMainFrameRequested() const { 3261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return layer_tree_host_->BeginMainFrameRequested(); 3271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) { 330b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) layer_tree_host_->UpdateClientAnimations(time); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::Composite(base::TimeTicks frame_begin_time) { 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->Composite(frame_begin_time); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetNeedsDisplayOnAllLayers(); 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { 34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); 34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) current.rasterize_only_visible_content = true; 34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_tree_host_->SetDebugState(current); 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderWidgetCompositor::UpdateTopControlsState( 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::TopControlsState constraints, 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::TopControlsState current, 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool animate) { 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_tree_host_->UpdateTopControlsState(constraints, 35290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) current, 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) animate); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::SetOverdrawBottomHeight( 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float overdraw_bottom_height) { 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetOverdrawBottomHeight(overdraw_bottom_height); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsRedrawRect(gfx::Rect damage_rect) { 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetNeedsRedrawRect(damage_rect); 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsForcedRedraw() { 3664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer_tree_host_->SetNextCommitForcesRedraw(); 367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) setNeedsAnimate(); 3684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)scoped_ptr<cc::SwapPromiseMonitor> 371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor( 372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::LatencyInfo* latency) { 373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<cc::SwapPromiseMonitor>( 374a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) new cc::LatencyInfoSwapPromiseMonitor( 375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) latency, layer_tree_host_.get(), NULL)); 376b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 377b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 378a3f7b4e666c476898878fa745f637129375cd889Ben Murdochint RenderWidgetCompositor::GetLayerTreeId() const { 379a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return layer_tree_host_->id(); 380a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 381a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 382a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void RenderWidgetCompositor::NotifyInputThrottledUntilCommit() { 383a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) layer_tree_host_->NotifyInputThrottledUntilCommit(); 384a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 385a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 3863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const cc::Layer* RenderWidgetCompositor::GetRootLayer() const { 3873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return layer_tree_host_->root_layer(); 3883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 3893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool RenderWidgetCompositor::ScheduleMicroBenchmark( 3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& name, 3928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_ptr<base::Value> value, 3934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::Callback<void(scoped_ptr<base::Value>)>& callback) { 3948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return layer_tree_host_->ScheduleMicroBenchmark(name, value.Pass(), callback); 3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::Initialize(cc::LayerTreeSettings settings) { 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy = 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderThreadImpl::current()->compositor_message_loop_proxy(); 400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (compositor_message_loop_proxy.get()) { 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this, 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ChildThread::current()->shared_bitmap_manager(), 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings, 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) compositor_message_loop_proxy); 406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this, this, ChildThread::current()->shared_bitmap_manager(), settings); 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(layer_tree_host_); 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setSurfaceReady() { 414b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) layer_tree_host_->SetLayerTreeHostClientReady(); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetRootLayer( 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<const webkit::WebLayerImpl*>(&layer)->layer()); 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::clearRootLayer() { 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setViewportSize( 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebSize&, 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebSize& device_viewport_size) { 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetViewportSize(device_viewport_size); 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize RenderWidgetCompositor::layoutViewportSize() const { 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return layer_tree_host_->device_viewport_size(); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize RenderWidgetCompositor::deviceViewportSize() const { 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->device_viewport_size(); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebFloatPoint RenderWidgetCompositor::adjustEventPointForPinchZoom( 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebFloatPoint& point) const { 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return point; 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setDeviceScaleFactor(float device_scale) { 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDeviceScaleFactor(device_scale); 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float RenderWidgetCompositor::deviceScaleFactor() const { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->device_scale_factor(); 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::setBackgroundColor(blink::WebColor color) { 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->set_background_color(color); 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setHasTransparentBackground(bool transparent) { 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->set_has_transparent_background(transparent); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 46158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void RenderWidgetCompositor::setOverhangBitmap(const SkBitmap& bitmap) { 46258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) layer_tree_host_->SetOverhangBitmap(bitmap); 46358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 46458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setVisible(bool visible) { 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetVisible(visible); 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setPageScaleFactorAndLimits( 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float page_scale_factor, float minimum, float maximum) { 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetPageScaleFactorAndLimits( 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor, minimum, maximum); 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::startPageScaleAnimation( 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebPoint& destination, 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_anchor, 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float new_page_scale, 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double duration_sec) { 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta duration = base::TimeDelta::FromMicroseconds( 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) duration_sec * base::Time::kMicrosecondsPerSecond); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->StartPageScaleAnimation( 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d(destination.x, destination.y), 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) use_anchor, 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_page_scale, 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) duration); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setNeedsAnimate() { 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetNeedsAnimate(); 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderWidgetCompositor::commitRequested() const { 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->CommitRequested(); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::didStopFlinging() { 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->DidStopFlinging(); 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::registerForAnimations(blink::WebLayer* layer) { 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::Layer* cc_layer = static_cast<webkit::WebLayerImpl*>(layer)->layer(); 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc_layer->layer_animation_controller()->SetAnimationRegistrar( 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->animation_registrar()); 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 507d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void RenderWidgetCompositor::registerViewportLayers( 508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* pageScaleLayer, 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* innerViewportScrollLayer, 510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* outerViewportScrollLayer) { 511d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layer_tree_host_->RegisterViewportLayers( 512d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) static_cast<const webkit::WebLayerImpl*>(pageScaleLayer)->layer(), 513d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) static_cast<const webkit::WebLayerImpl*>(innerViewportScrollLayer) 514d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ->layer(), 515d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // The outer viewport layer will only exist when using pinch virtual 516d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // viewports. 517d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) outerViewportScrollLayer ? static_cast<const webkit::WebLayerImpl*>( 518d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) outerViewportScrollLayer)->layer() 519d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) : NULL); 520d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 521d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 522d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void RenderWidgetCompositor::clearViewportLayers() { 523d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(), 524d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<cc::Layer>(), 525d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<cc::Layer>()); 526d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 527d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderWidgetCompositor::compositeAndReadback( 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *pixels, const WebRect& rect_in_device_viewport) { 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->CompositeAndReadback(pixels, 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rect_in_device_viewport); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::finishAllRendering() { 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->FinishAllRendering(); 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDeferCommits(defer_commits); 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowFPSCounter(bool show) { 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_fps_counter = show; 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowPaintRects(bool show) { 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_paint_rects = show; 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowDebugBorders(bool show) { 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_debug_borders = show; 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setContinuousPaintingEnabled(bool enabled) { 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.continuous_painting = enabled; 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid RenderWidgetCompositor::setShowScrollBottleneckRects(bool show) { 5677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 5687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_touch_event_handler_rects = show; 5697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_wheel_event_handler_rects = show; 5707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_non_fast_scrollable_rects = show; 5717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch layer_tree_host_->SetDebugState(debug_state); 5727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 5737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 574f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { 575f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->InstrumentWillBeginFrame(frame_id); 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->willBeginCompositorFrame(); 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void RenderWidgetCompositor::DidBeginMainFrame() { 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->InstrumentDidBeginFrame(); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::Animate(base::TimeTicks frame_begin_time) { 5845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) widget_->webwidget()->animate( 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (frame_begin_time - base::TimeTicks()).InSecondsF()); 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::Layout() { 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->webwidget()->layout(); 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::ApplyScrollAndScale( 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Vector2d& scroll_delta, 5945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float page_scale) { 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 598a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( 599a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool fallback) { 600a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return widget_->CreateOutputSurface(fallback); 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 603b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void RenderWidgetCompositor::DidInitializeOutputSurface(bool success) { 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!success) 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->webwidget()->didExitCompositingMode(); 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::WillCommit() { 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->InstrumentWillComposite(); 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCommit() { 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->DidCommitCompositorFrame(); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didBecomeReadyForAdditionalInput(); 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCommitAndDrawFrame() { 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didCommitAndDrawCompositorFrame(); 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCompleteSwapBuffers() { 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didCompleteSwapBuffers(); 623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!threaded_) 624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersComplete(); 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_refptr<cc::ContextProvider> 628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)RenderWidgetCompositor::OffscreenContextProvider() { 629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return RenderThreadImpl::current()->OffscreenCompositorContextProvider(); 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::ScheduleComposite() { 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!suppress_schedule_composite_) 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->scheduleComposite(); 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::ScheduleAnimation() { 638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->scheduleAnimation(); 639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::DidPostSwapBuffers() { 642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersPosted(); 643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::DidAbortSwapBuffers() { 646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersAborted(); 647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cc::ContextProvider* provider = 651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 6525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 656