render_widget_compositor.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/synchronization/lock.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/sys_info.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/values.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "cc/base/latency_info_swap_promise.h" 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "cc/base/latency_info_swap_promise_monitor.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/switches.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/layer_tree_debug_state.h" 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/debug/micro_benchmark.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/input/layer_selection_bound.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h" 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "cc/output/copy_output_request.h" 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "cc/output/copy_output_result.h" 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "cc/resources/single_release_callback.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/layer_tree_host.h" 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/child/child_shared_bitmap_manager.h" 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/common/content_switches_internal.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/gpu/client/context_provider_command_buffer.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/content_switches.h" 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/renderer/compositor_bindings/web_layer_impl.h" 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/input/input_handler_manager.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/render_thread_impl.h" 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "gpu/command_buffer/client/gles2_interface.h" 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h" 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/platform/WebSelectionBound.h" 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebSize.h" 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebWidget.h" 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/gfx/frame_time.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_switches.h" 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/native_theme/native_theme_switches.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_ANDROID) 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/renderer/android/synchronous_compositor_factory.h" 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/android/device_display_info.h" 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace base { 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Value; 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Layer; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFloatPoint; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing blink::WebSelectionBound; 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSize; 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRect; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GetSwitchValueAsInt( 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CommandLine& command_line, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& switch_string, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int min_value, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_value, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* result) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string string_value = command_line.GetSwitchValueASCII(switch_string); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int int_value; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToInt(string_value, &int_value) && 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int_value >= min_value && int_value <= max_value) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *result = int_value; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Failed to parse switch " << switch_string << ": " << 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string_value; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcc::LayerSelectionBound ConvertWebSelectionBound( 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const WebSelectionBound& bound) { 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(bound.layerId); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cc::LayerSelectionBound result; 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switch (bound.type) { 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case blink::WebSelectionBound::Caret: 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result.type = cc::SELECTION_BOUND_CENTER; 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case blink::WebSelectionBound::SelectionLeft: 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result.type = cc::SELECTION_BOUND_LEFT; 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case blink::WebSelectionBound::SelectionRight: 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result.type = cc::SELECTION_BOUND_RIGHT; 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch break; 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result.layer_id = bound.layerId; 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result.layer_rect = gfx::Rect(bound.edgeRectInLayer); 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return result; 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdochgfx::Size CalculateDefaultTileSize() { 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int default_tile_size = 256; 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_ANDROID) 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(epenner): unify this for all platforms if it 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // makes sense (http://crbug.com/159524) 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::DeviceDisplayInfo info; 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool real_size_supported = true; 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int display_width = info.GetPhysicalDisplayWidth(); 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int display_height = info.GetPhysicalDisplayHeight(); 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (display_width == 0 || display_height == 0) { 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch real_size_supported = false; 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch display_width = info.GetDisplayWidth(); 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch display_height = info.GetDisplayHeight(); 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int portrait_width = std::min(display_width, display_height); 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int landscape_width = std::max(display_width, display_height); 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (real_size_supported) { 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Maximum HD dimensions should be 768x1280 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Maximum FHD dimensions should be 1200x1920 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (portrait_width > 768 || landscape_width > 1280) 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_tile_size = 384; 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (portrait_width > 1200 || landscape_width > 1920) 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_tile_size = 512; 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Adjust for some resolutions that barely straddle an extra 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // tile when in portrait mode. This helps worst case scroll/raster 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // by not needing a full extra tile for each row. 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (default_tile_size == 256 && portrait_width == 768) 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_tile_size += 32; 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (default_tile_size == 384 && portrait_width == 1200) 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_tile_size += 32; 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else { 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // We don't know the exact resolution due to screen controls etc. 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // So this just estimates the values above using tile counts. 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int numTiles = (display_width * display_height) / (256 * 256); 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (numTiles > 16) 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_tile_size = 384; 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (numTiles >= 40) 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_tile_size = 512; 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return gfx::Size(default_tile_size, default_tile_size); 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( 156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderWidget* widget, 157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool threaded) { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<RenderWidgetCompositor> compositor( 159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch new RenderWidgetCompositor(widget, threaded)); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine* cmd = CommandLine::ForCurrentProcess(); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeSettings settings; 164b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 165b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // For web contents, layer transforms should scale up the contents of layers 166b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // to keep content always crisp when possible. 167b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) settings.layer_transforms_should_scale_layer_contents = true; 168b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) settings.throttle_frame_production = 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) !cmd->HasSwitch(switches::kDisableGpuVsync); 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.begin_frame_scheduling_enabled = 172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cmd->HasSwitch(switches::kEnableBeginFrameScheduling); 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.main_frame_before_activation_enabled = 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableMainFrameBeforeActivation) && 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeActivation); 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) settings.main_frame_before_draw_enabled = 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeDraw); 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.report_overscroll_only_for_scrollable_axes = true; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.accelerated_animation_enabled = 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !cmd->HasSwitch(cc::switches::kDisableThreadedAnimation); 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) settings.touch_hit_testing = 182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch !cmd->HasSwitch(cc::switches::kDisableCompositorTouchHitTesting); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.default_tile_size = CalculateDefaultTileSize(); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kDefaultTileWidth)) { 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int tile_width = 0; 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetSwitchValueAsInt(*cmd, 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kDefaultTileWidth, 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1, 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::numeric_limits<int>::max(), 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &tile_width); 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.default_tile_size.set_width(tile_width); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kDefaultTileHeight)) { 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int tile_height = 0; 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetSwitchValueAsInt(*cmd, 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kDefaultTileHeight, 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1, 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::numeric_limits<int>::max(), 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &tile_height); 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.default_tile_size.set_height(tile_height); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_untiled_layer_width = settings.max_untiled_layer_size.width(); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kMaxUntiledLayerWidth)) { 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerWidth, 1, 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &max_untiled_layer_width); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_untiled_layer_height = settings.max_untiled_layer_size.height(); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(switches::kMaxUntiledLayerHeight)) { 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerHeight, 1, 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::numeric_limits<int>::max(), 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &max_untiled_layer_height); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.max_untiled_layer_size = gfx::Size(max_untiled_layer_width, 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_untiled_layer_height); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RenderThreadImpl* render_thread = RenderThreadImpl::current(); 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // render_thread may be NULL in tests. 2225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (render_thread) { 2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.impl_side_painting = 2245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu render_thread->is_impl_side_painting_enabled(); 225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.gpu_rasterization_forced = 226010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) render_thread->is_gpu_rasterization_forced(); 227010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.gpu_rasterization_enabled = 228010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) render_thread->is_gpu_rasterization_enabled(); 2295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.create_low_res_tiling = render_thread->is_low_res_tiling_enabled(); 2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.can_use_lcd_text = render_thread->is_lcd_text_enabled(); 231010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.use_distance_field_text = 232010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) render_thread->is_distance_field_text_enabled(); 2335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.use_zero_copy = render_thread->is_zero_copy_enabled(); 2345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.use_one_copy = render_thread->is_one_copy_enabled(); 2355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (cmd->HasSwitch(switches::kEnableBleedingEdgeRenderingFastPaths)) { 238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.recording_mode = cc::LayerTreeSettings::RecordWithSkRecord; 239010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 240010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.calculate_top_controls_position = 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableTopControlsPositionCalculation); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsHeight)) { 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string controls_height_str = 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsHeight); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double controls_height; 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(controls_height_str, &controls_height) && 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controls_height > 0) 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_height = controls_height; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (settings.calculate_top_controls_position && 2535e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) settings.top_controls_height <= 0) { 2545e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) DCHECK(false) 2555e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) << "Top controls repositioning enabled without valid height set."; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.calculate_top_controls_position = false; 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsShowThreshold)) { 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string top_threshold_str = 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsShowThreshold); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double show_threshold; 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(top_threshold_str, &show_threshold) && 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_threshold >= 0.f && show_threshold <= 1.f) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_show_threshold = show_threshold; 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kTopControlsHideThreshold)) { 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string top_threshold_str = 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->GetSwitchValueASCII(cc::switches::kTopControlsHideThreshold); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double hide_threshold; 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::StringToDouble(top_threshold_str, &hide_threshold) && 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hide_threshold >= 0.f && hide_threshold <= 1.f) 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.top_controls_hide_threshold = hide_threshold; 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) settings.use_pinch_virtual_viewport = 27890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport); 279ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch settings.allow_antialiasing &= 280ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch !cmd->HasSwitch(cc::switches::kDisableCompositedAntialiasing); 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These flags should be mirrored by UI versions in ui/compositor/. 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_debug_borders = 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowCompositedLayerBorders); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_fps_counter = 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowFPSCounter); 287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) settings.initial_debug_state.show_layer_animation_bounds_rects = 288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) cmd->HasSwitch(cc::switches::kShowLayerAnimationBounds); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_paint_rects = 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(switches::kShowPaintRects); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_property_changed_rects = 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowPropertyChangedRects); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_surface_damage_rects = 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowSurfaceDamageRects); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_screen_space_rects = 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowScreenSpaceRects); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_replica_screen_space_rects = 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowReplicaScreenSpaceRects); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_occluding_rects = 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowOccludingRects); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.show_non_occluding_rects = 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmd->HasSwitch(cc::switches::kShowNonOccludingRects); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.initial_debug_state.SetRecordRenderingStats( 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmd->HasSwitch(cc::switches::kEnableGpuBenchmarking)); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kSlowDownRasterScaleFactor)) { 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kMinSlowDownScaleFactor = 0; 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kMaxSlowDownScaleFactor = INT_MAX; 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSwitchValueAsInt( 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *cmd, 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::switches::kSlowDownRasterScaleFactor, 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kMinSlowDownScaleFactor, 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kMaxSlowDownScaleFactor, 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &settings.initial_debug_state.slow_down_raster_scale_factor); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kMaxTilesForInterestArea)) { 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int max_tiles_for_interest_area; 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (GetSwitchValueAsInt(*cmd, 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc::switches::kMaxTilesForInterestArea, 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1, std::numeric_limits<int>::max(), 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &max_tiles_for_interest_area)) 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.max_tiles_for_interest_area = max_tiles_for_interest_area; 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cmd->HasSwitch(cc::switches::kMaxUnusedResourceMemoryUsagePercentage)) { 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int max_unused_resource_memory_percentage; 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (GetSwitchValueAsInt( 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *cmd, 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc::switches::kMaxUnusedResourceMemoryUsagePercentage, 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0, 100, 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &max_unused_resource_memory_percentage)) { 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.max_unused_resource_memory_percentage = 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) max_unused_resource_memory_percentage; 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.strict_layer_property_change_checking = 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cmd->HasSwitch(cc::switches::kStrictLayerPropertyChangeChecking); 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SynchronousCompositorFactory* synchronous_compositor_factory = 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SynchronousCompositorFactory::GetInstance(); 345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.using_synchronous_renderer_compositor = 347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch synchronous_compositor_factory; 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.record_full_layer = 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch synchronous_compositor_factory && 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch synchronous_compositor_factory->RecordFullLayer(); 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.report_overscroll_only_for_scrollable_axes = 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch !synchronous_compositor_factory; 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings.max_partial_texture_updates = 0; 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (synchronous_compositor_factory) { 355010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Android WebView uses system scrollbars, so make ours invisible. 356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::NoAnimator; 357010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.solid_color_scrollbar_color = SK_ColorTRANSPARENT; 358010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 359010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade; 360010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.scrollbar_fade_delay_ms = 300; 361010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.scrollbar_fade_duration_ms = 300; 362010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 363010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.highp_threshold_min = 2048; 365a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Android WebView handles root layer flings itself. 366a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) settings.ignore_root_layer_flings = 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch synchronous_compositor_factory; 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Memory policy on Android WebView does not depend on whether device is 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // low end, so always use default policy. 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_low_end_device = 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::SysInfo::IsLowEndDevice() && !synchronous_compositor_factory; 372d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // RGBA_4444 textures are only enabled for low end devices 373d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // and are disabled for Android WebView as it doesn't support the format. 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch settings.use_rgba_4444_textures = is_low_end_device; 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (is_low_end_device) { 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // On low-end we want to be very carefull about killing other 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // apps. So initially we use 50% more memory to avoid flickering 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // or raster-on-demand. 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.max_memory_for_prepaint_percentage = 67; 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // On other devices we have increased memory excessively to avoid 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // raster-on-demand already, so now we reserve 50% _only_ to avoid 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // raster-on-demand, and use 50% of the memory otherwise. 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.max_memory_for_prepaint_percentage = 50; 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Webview does not own the surface so should not clear it. 387effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch settings.should_clear_root_render_pass = 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch !synchronous_compositor_factory; 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 390c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#elif !defined(OS_MACOSX) 39123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (ui::IsOverlayScrollbarEnabled()) { 39258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::Thinning; 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport)) { 3955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // use_pinch_zoom_scrollbars is only true on desktop when non-overlay 3965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // scrollbars are in use. 3975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu settings.use_pinch_zoom_scrollbars = true; 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade; 399c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch settings.solid_color_scrollbar_color = SkColorSetARGB(128, 128, 128, 128); 400c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 401010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.scrollbar_fade_delay_ms = 500; 402010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) settings.scrollbar_fade_duration_ms = 300; 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) compositor->Initialize(settings); 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return compositor.Pass(); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 410ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochRenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 411ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool threaded) 412ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch : threaded_(threaded), 413ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch suppress_schedule_composite_(false), 414ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch widget_(widget) { 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderWidgetCompositor::~RenderWidgetCompositor() {} 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 41990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const base::WeakPtr<cc::InputHandler>& 42090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)RenderWidgetCompositor::GetInputHandler() { 42190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return layer_tree_host_->GetInputHandler(); 42290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 42390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (suppress_schedule_composite_ == suppress) 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (suppress) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_EVENT_ASYNC_BEGIN0("gpu", 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TRACE_EVENT_ASYNC_END0("gpu", 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) suppress_schedule_composite_ = suppress; 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool RenderWidgetCompositor::BeginMainFrameRequested() const { 4381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return layer_tree_host_->BeginMainFrameRequested(); 4391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 4401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) { 442b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) layer_tree_host_->UpdateClientAnimations(time); 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetNeedsDisplayOnAllLayers(); 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { 45090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); 45190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) current.rasterize_only_visible_content = true; 45290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_tree_host_->SetDebugState(current); 45390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 45490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 45590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderWidgetCompositor::UpdateTopControlsState( 45690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::TopControlsState constraints, 45790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cc::TopControlsState current, 45890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool animate) { 45990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layer_tree_host_->UpdateTopControlsState(constraints, 46090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) current, 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) animate); 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::SetOverdrawBottomHeight( 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float overdraw_bottom_height) { 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetOverdrawBottomHeight(overdraw_bottom_height); 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsRedrawRect(gfx::Rect damage_rect) { 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetNeedsRedrawRect(damage_rect); 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void RenderWidgetCompositor::SetNeedsForcedRedraw() { 4744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer_tree_host_->SetNextCommitForcesRedraw(); 475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) setNeedsAnimate(); 4764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 478a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)scoped_ptr<cc::SwapPromiseMonitor> 479a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor( 480a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::LatencyInfo* latency) { 481a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<cc::SwapPromiseMonitor>( 482a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) new cc::LatencyInfoSwapPromiseMonitor( 483a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) latency, layer_tree_host_.get(), NULL)); 484b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 485b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 486cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void RenderWidgetCompositor::QueueSwapPromise( 487cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<cc::SwapPromise> swap_promise) { 488cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layer_tree_host_->QueueSwapPromise(swap_promise.Pass()); 489cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 490cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 491a3f7b4e666c476898878fa745f637129375cd889Ben Murdochint RenderWidgetCompositor::GetLayerTreeId() const { 492a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return layer_tree_host_->id(); 493a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 494a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 495a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void RenderWidgetCompositor::NotifyInputThrottledUntilCommit() { 496a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) layer_tree_host_->NotifyInputThrottledUntilCommit(); 497a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 498a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 4993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const cc::Layer* RenderWidgetCompositor::GetRootLayer() const { 5003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return layer_tree_host_->root_layer(); 5013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 5023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)int RenderWidgetCompositor::ScheduleMicroBenchmark( 5044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& name, 5058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_ptr<base::Value> value, 5064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::Callback<void(scoped_ptr<base::Value>)>& callback) { 5078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return layer_tree_host_->ScheduleMicroBenchmark(name, value.Pass(), callback); 5084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 5094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool RenderWidgetCompositor::SendMessageToMicroBenchmark( 511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int id, 512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<base::Value> value) { 513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return layer_tree_host_->SendMessageToMicroBenchmark(id, value.Pass()); 514cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 515cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::Initialize(cc::LayerTreeSettings settings) { 5175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy; 5185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RenderThreadImpl* render_thread = RenderThreadImpl::current(); 5195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cc::SharedBitmapManager* shared_bitmap_manager = NULL; 5205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // render_thread may be NULL in tests. 5215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (render_thread) { 5225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu compositor_message_loop_proxy = 5235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu render_thread->compositor_message_loop_proxy(); 5245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu shared_bitmap_manager = render_thread->shared_bitmap_manager(); 5255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (compositor_message_loop_proxy.get()) { 527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( 5285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, shared_bitmap_manager, settings, compositor_message_loop_proxy); 529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( 5315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, this, shared_bitmap_manager, settings); 532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(layer_tree_host_); 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setSurfaceReady() { 537b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) layer_tree_host_->SetLayerTreeHostClientReady(); 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetRootLayer( 542f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static_cast<const WebLayerImpl*>(&layer)->layer()); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::clearRootLayer() { 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setViewportSize( 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebSize&, 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebSize& device_viewport_size) { 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_tree_host_->SetViewportSize(device_viewport_size); 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void RenderWidgetCompositor::setViewportSize( 556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const WebSize& device_viewport_size) { 557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layer_tree_host_->SetViewportSize(device_viewport_size); 558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize RenderWidgetCompositor::layoutViewportSize() const { 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return layer_tree_host_->device_viewport_size(); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebSize RenderWidgetCompositor::deviceViewportSize() const { 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->device_viewport_size(); 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebFloatPoint RenderWidgetCompositor::adjustEventPointForPinchZoom( 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebFloatPoint& point) const { 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return point; 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setDeviceScaleFactor(float device_scale) { 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDeviceScaleFactor(device_scale); 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float RenderWidgetCompositor::deviceScaleFactor() const { 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->device_scale_factor(); 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::setBackgroundColor(blink::WebColor color) { 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->set_background_color(color); 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setHasTransparentBackground(bool transparent) { 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->set_has_transparent_background(transparent); 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 58958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void RenderWidgetCompositor::setOverhangBitmap(const SkBitmap& bitmap) { 59058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) layer_tree_host_->SetOverhangBitmap(bitmap); 59158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 59258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setVisible(bool visible) { 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetVisible(visible); 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setPageScaleFactorAndLimits( 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float page_scale_factor, float minimum, float maximum) { 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetPageScaleFactorAndLimits( 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor, minimum, maximum); 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::startPageScaleAnimation( 604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebPoint& destination, 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_anchor, 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float new_page_scale, 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double duration_sec) { 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta duration = base::TimeDelta::FromMicroseconds( 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) duration_sec * base::Time::kMicrosecondsPerSecond); 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->StartPageScaleAnimation( 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d(destination.x, destination.y), 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) use_anchor, 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_page_scale, 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) duration); 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RenderWidgetCompositor::heuristicsForGpuRasterizationUpdated( 6185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool matches_heuristics) { 61946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) layer_tree_host_->SetHasGpuRasterizationTrigger(matches_heuristics); 6205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 6215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setNeedsAnimate() { 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetNeedsAnimate(); 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderWidgetCompositor::commitRequested() const { 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_tree_host_->CommitRequested(); 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::didStopFlinging() { 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->DidStopFlinging(); 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::registerForAnimations(blink::WebLayer* layer) { 635f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cc::Layer* cc_layer = static_cast<WebLayerImpl*>(layer)->layer(); 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc_layer->layer_animation_controller()->SetAnimationRegistrar( 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->animation_registrar()); 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 640d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void RenderWidgetCompositor::registerViewportLayers( 641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* pageScaleLayer, 642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* innerViewportScrollLayer, 643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebLayer* outerViewportScrollLayer) { 644d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layer_tree_host_->RegisterViewportLayers( 645f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static_cast<const WebLayerImpl*>(pageScaleLayer)->layer(), 646f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static_cast<const WebLayerImpl*>(innerViewportScrollLayer)->layer(), 647d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // The outer viewport layer will only exist when using pinch virtual 648d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // viewports. 649f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) outerViewportScrollLayer 650f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ? static_cast<const WebLayerImpl*>(outerViewportScrollLayer)->layer() 651f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : NULL); 652d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 653d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 654d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void RenderWidgetCompositor::clearViewportLayers() { 655d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(), 656d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<cc::Layer>(), 657d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<cc::Layer>()); 658d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 659d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 660116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid RenderWidgetCompositor::registerSelection( 661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebSelectionBound& start, 662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebSelectionBound& end) { 663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer_tree_host_->RegisterSelection(ConvertWebSelectionBound(start), 664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ConvertWebSelectionBound(end)); 665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid RenderWidgetCompositor::clearSelection() { 668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cc::LayerSelectionBound empty_selection; 669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer_tree_host_->RegisterSelection(empty_selection, empty_selection); 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 672010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void CompositeAndReadbackAsyncCallback( 673010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) blink::WebCompositeAndReadbackAsyncCallback* callback, 674010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<cc::CopyOutputResult> result) { 675010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (result->HasBitmap()) { 676010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<SkBitmap> result_bitmap = result->TakeBitmap(); 677010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) callback->didCompositeAndReadback(*result_bitmap); 678010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 679010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) callback->didCompositeAndReadback(SkBitmap()); 680010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 681010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 682010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 683010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void RenderWidgetCompositor::compositeAndReadbackAsync( 684010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) blink::WebCompositeAndReadbackAsyncCallback* callback) { 685010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DCHECK(layer_tree_host_->root_layer()); 686010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<cc::CopyOutputRequest> request = 687010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cc::CopyOutputRequest::CreateBitmapRequest( 688010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::Bind(&CompositeAndReadbackAsyncCallback, callback)); 689010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); 690010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!threaded_) { 691010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) widget_->webwidget()->animate(0.0); 692010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) widget_->webwidget()->layout(); 693010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layer_tree_host_->Composite(gfx::FrameTime::Now()); 694010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 695010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 696010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::finishAllRendering() { 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->FinishAllRendering(); 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDeferCommits(defer_commits); 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowFPSCounter(bool show) { 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_fps_counter = show; 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowPaintRects(bool show) { 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_paint_rects = show; 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setShowDebugBorders(bool show) { 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.show_debug_borders = show; 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::setContinuousPaintingEnabled(bool enabled) { 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) debug_state.continuous_painting = enabled; 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_tree_host_->SetDebugState(debug_state); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid RenderWidgetCompositor::setShowScrollBottleneckRects(bool show) { 7307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cc::LayerTreeDebugState debug_state = layer_tree_host_->debug_state(); 7317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_touch_event_handler_rects = show; 7327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_wheel_event_handler_rects = show; 7337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch debug_state.show_non_fast_scrollable_rects = show; 7347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch layer_tree_host_->SetDebugState(debug_state); 7357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 7367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { 738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->InstrumentWillBeginFrame(frame_id); 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->willBeginCompositorFrame(); 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void RenderWidgetCompositor::DidBeginMainFrame() { 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->InstrumentDidBeginFrame(); 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::Animate(base::TimeTicks frame_begin_time) { 7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) widget_->webwidget()->animate( 7485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (frame_begin_time - base::TimeTicks()).InSecondsF()); 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::Layout() { 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->webwidget()->layout(); 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderWidgetCompositor::ApplyScrollAndScale( 7565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Vector2d& scroll_delta, 7575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float page_scale) { 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 761a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( 762a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool fallback) { 763a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return widget_->CreateOutputSurface(fallback); 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RenderWidgetCompositor::DidInitializeOutputSurface() { 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::WillCommit() { 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->InstrumentWillComposite(); 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCommit() { 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->DidCommitCompositorFrame(); 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didBecomeReadyForAdditionalInput(); 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCommitAndDrawFrame() { 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didCommitAndDrawCompositorFrame(); 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::DidCompleteSwapBuffers() { 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->didCompleteSwapBuffers(); 784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!threaded_) 785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersComplete(); 786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderWidgetCompositor::ScheduleComposite() { 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!suppress_schedule_composite_) 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->scheduleComposite(); 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::ScheduleAnimation() { 794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->scheduleAnimation(); 795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::DidPostSwapBuffers() { 798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersPosted(); 799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::DidAbortSwapBuffers() { 802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget_->OnSwapBuffersAborted(); 803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cc::ContextProvider* provider = 807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 8085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 812