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

Side by Side Diff: content/renderer/gpu/render_widget_compositor.cc

Issue 1587743002: RenderWidgetCompositor should be decoupled from RenderWidget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/gpu/render_widget_compositor.h" 5 #include "content/renderer/gpu/render_widget_compositor.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 27 matching lines...) Expand all
38 #include "cc/proto/compositor_message.pb.h" 38 #include "cc/proto/compositor_message.pb.h"
39 #include "cc/resources/single_release_callback.h" 39 #include "cc/resources/single_release_callback.h"
40 #include "cc/scheduler/begin_frame_source.h" 40 #include "cc/scheduler/begin_frame_source.h"
41 #include "cc/trees/latency_info_swap_promise_monitor.h" 41 #include "cc/trees/latency_info_swap_promise_monitor.h"
42 #include "cc/trees/layer_tree_host.h" 42 #include "cc/trees/layer_tree_host.h"
43 #include "cc/trees/remote_proto_channel.h" 43 #include "cc/trees/remote_proto_channel.h"
44 #include "components/scheduler/renderer/renderer_scheduler.h" 44 #include "components/scheduler/renderer/renderer_scheduler.h"
45 #include "content/common/content_switches_internal.h" 45 #include "content/common/content_switches_internal.h"
46 #include "content/common/gpu/client/context_provider_command_buffer.h" 46 #include "content/common/gpu/client/context_provider_command_buffer.h"
47 #include "content/public/common/content_switches.h" 47 #include "content/public/common/content_switches.h"
48 #include "content/renderer/gpu/render_widget_compositor_delegate.h"
48 #include "content/renderer/input/input_handler_manager.h" 49 #include "content/renderer/input/input_handler_manager.h"
49 #include "gpu/command_buffer/client/gles2_interface.h" 50 #include "gpu/command_buffer/client/gles2_interface.h"
50 #include "gpu/command_buffer/service/gpu_switches.h" 51 #include "gpu/command_buffer/service/gpu_switches.h"
51 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h" 52 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h"
52 #include "third_party/WebKit/public/platform/WebLayoutAndPaintAsyncCallback.h" 53 #include "third_party/WebKit/public/platform/WebLayoutAndPaintAsyncCallback.h"
53 #include "third_party/WebKit/public/platform/WebSize.h" 54 #include "third_party/WebKit/public/platform/WebSize.h"
54 #include "third_party/WebKit/public/web/WebKit.h" 55 #include "third_party/WebKit/public/web/WebKit.h"
55 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 56 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
56 #include "third_party/WebKit/public/web/WebSelection.h" 57 #include "third_party/WebKit/public/web/WebSelection.h"
57 #include "third_party/WebKit/public/web/WebWidget.h"
58 #include "ui/gl/gl_switches.h" 58 #include "ui/gl/gl_switches.h"
59 #include "ui/native_theme/native_theme_switches.h" 59 #include "ui/native_theme/native_theme_switches.h"
60 60
61 #if defined(OS_ANDROID) 61 #if defined(OS_ANDROID)
62 #include "base/android/build_info.h" 62 #include "base/android/build_info.h"
63 #include "content/renderer/android/synchronous_compositor_factory.h" 63 #include "content/renderer/android/synchronous_compositor_factory.h"
64 #include "ui/gfx/android/device_display_info.h" 64 #include "ui/gfx/android/device_display_info.h"
65 #endif 65 #endif
66 66
67 namespace base { 67 namespace base {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 cc::LayerSelection ConvertWebSelection(const WebSelection& web_selection) { 128 cc::LayerSelection ConvertWebSelection(const WebSelection& web_selection) {
129 cc::LayerSelection cc_selection; 129 cc::LayerSelection cc_selection;
130 cc_selection.start = ConvertWebSelectionBound(web_selection, true); 130 cc_selection.start = ConvertWebSelectionBound(web_selection, true);
131 cc_selection.end = ConvertWebSelectionBound(web_selection, false); 131 cc_selection.end = ConvertWebSelectionBound(web_selection, false);
132 cc_selection.is_editable = web_selection.isEditable(); 132 cc_selection.is_editable = web_selection.isEditable();
133 cc_selection.is_empty_text_form_control = 133 cc_selection.is_empty_text_form_control =
134 web_selection.isEmptyTextFormControl(); 134 web_selection.isEmptyTextFormControl();
135 return cc_selection; 135 return cc_selection;
136 } 136 }
137 137
138 gfx::Size CalculateDefaultTileSize(RenderWidget* widget) { 138 gfx::Size CalculateDefaultTileSize(float device_scale_factor) {
139 int default_tile_size = 256; 139 int default_tile_size = 256;
140 #if defined(OS_ANDROID) 140 #if defined(OS_ANDROID)
141 // TODO(epenner): unify this for all platforms if it 141 // TODO(epenner): unify this for all platforms if it
142 // makes sense (http://crbug.com/159524) 142 // makes sense (http://crbug.com/159524)
143 143
144 gfx::DeviceDisplayInfo info; 144 gfx::DeviceDisplayInfo info;
145 bool real_size_supported = true; 145 bool real_size_supported = true;
146 int display_width = info.GetPhysicalDisplayWidth(); 146 int display_width = info.GetPhysicalDisplayWidth();
147 int display_height = info.GetPhysicalDisplayHeight(); 147 int display_height = info.GetPhysicalDisplayHeight();
148 if (display_width == 0 || display_height == 0) { 148 if (display_width == 0 || display_height == 0) {
(...skipping 24 matching lines...) Expand all
173 // We don't know the exact resolution due to screen controls etc. 173 // We don't know the exact resolution due to screen controls etc.
174 // So this just estimates the values above using tile counts. 174 // So this just estimates the values above using tile counts.
175 int numTiles = (display_width * display_height) / (256 * 256); 175 int numTiles = (display_width * display_height) / (256 * 256);
176 if (numTiles > 16) 176 if (numTiles > 16)
177 default_tile_size = 384; 177 default_tile_size = 384;
178 if (numTiles >= 40) 178 if (numTiles >= 40)
179 default_tile_size = 512; 179 default_tile_size = 512;
180 } 180 }
181 #elif defined(OS_CHROMEOS) 181 #elif defined(OS_CHROMEOS)
182 // Use 512 for high DPI (dsf=2.0f) devices. 182 // Use 512 for high DPI (dsf=2.0f) devices.
183 if (widget->screen_info().deviceScaleFactor >= 2.0f) 183 if (device_scale_factor >= 2.0f)
184 default_tile_size = 512; 184 default_tile_size = 512;
185 #endif 185 #endif
186 186
187 return gfx::Size(default_tile_size, default_tile_size); 187 return gfx::Size(default_tile_size, default_tile_size);
188 } 188 }
189 189
190 // Check cc::TopControlsState, and blink::WebTopControlsState 190 // Check cc::TopControlsState, and blink::WebTopControlsState
191 // are kept in sync. 191 // are kept in sync.
192 static_assert(int(blink::WebTopControlsBoth) == int(cc::BOTH), 192 static_assert(int(blink::WebTopControlsBoth) == int(cc::BOTH),
193 "mismatching enums: BOTH"); 193 "mismatching enums: BOTH");
194 static_assert(int(blink::WebTopControlsHidden) == int(cc::HIDDEN), 194 static_assert(int(blink::WebTopControlsHidden) == int(cc::HIDDEN),
195 "mismatching enums: HIDDEN"); 195 "mismatching enums: HIDDEN");
196 static_assert(int(blink::WebTopControlsShown) == int(cc::SHOWN), 196 static_assert(int(blink::WebTopControlsShown) == int(cc::SHOWN),
197 "mismatching enums: SHOWN"); 197 "mismatching enums: SHOWN");
198 198
199 static cc::TopControlsState ConvertTopControlsState( 199 static cc::TopControlsState ConvertTopControlsState(
200 WebTopControlsState state) { 200 WebTopControlsState state) {
201 return static_cast<cc::TopControlsState>(state); 201 return static_cast<cc::TopControlsState>(state);
202 } 202 }
203 203
204 } // namespace 204 } // namespace
205 205
206 // static 206 // static
207 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( 207 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
208 RenderWidget* widget, 208 RenderWidgetCompositorDelegate* delegate,
209 float device_scale_factor,
piman 2016/01/13 22:09:30 Minor nit, this makes it sound like the device_sca
Fady Samuel 2016/01/13 23:48:13 Hmm, tile size seems like a compositor detail. I'd
piman 2016/01/14 00:13:23 There's already RWC::setDeviceScaleFactor, I would
209 CompositorDependencies* compositor_deps) { 210 CompositorDependencies* compositor_deps) {
210 scoped_ptr<RenderWidgetCompositor> compositor( 211 scoped_ptr<RenderWidgetCompositor> compositor(
211 new RenderWidgetCompositor(widget, compositor_deps)); 212 new RenderWidgetCompositor(delegate, compositor_deps));
212 compositor->Initialize(); 213 compositor->Initialize(device_scale_factor);
213 return compositor; 214 return compositor;
214 } 215 }
215 216
216 RenderWidgetCompositor::RenderWidgetCompositor( 217 RenderWidgetCompositor::RenderWidgetCompositor(
217 RenderWidget* widget, 218 RenderWidgetCompositorDelegate* delegate,
218 CompositorDependencies* compositor_deps) 219 CompositorDependencies* compositor_deps)
219 : num_failed_recreate_attempts_(0), 220 : num_failed_recreate_attempts_(0),
220 widget_(widget), 221 delegate_(delegate),
221 compositor_deps_(compositor_deps), 222 compositor_deps_(compositor_deps),
222 never_visible_(false), 223 never_visible_(false),
223 layout_and_paint_async_callback_(nullptr), 224 layout_and_paint_async_callback_(nullptr),
224 remote_proto_channel_receiver_(nullptr), 225 remote_proto_channel_receiver_(nullptr),
225 weak_factory_(this) { 226 weak_factory_(this) {}
226 }
227 227
228 void RenderWidgetCompositor::Initialize() { 228 void RenderWidgetCompositor::Initialize(float device_scale_factor) {
229 base::CommandLine* cmd = base::CommandLine::ForCurrentProcess(); 229 base::CommandLine* cmd = base::CommandLine::ForCurrentProcess();
230 230
231 cc::LayerTreeSettings settings; 231 cc::LayerTreeSettings settings;
232 232
233 // For web contents, layer transforms should scale up the contents of layers 233 // For web contents, layer transforms should scale up the contents of layers
234 // to keep content always crisp when possible. 234 // to keep content always crisp when possible.
235 settings.layer_transforms_should_scale_layer_contents = true; 235 settings.layer_transforms_should_scale_layer_contents = true;
236 236
237 if (cmd->HasSwitch(switches::kDisableGpuVsync)) { 237 if (cmd->HasSwitch(switches::kDisableGpuVsync)) {
238 std::string display_vsync_string = 238 std::string display_vsync_string =
(...skipping 11 matching lines...) Expand all
250 cmd->HasSwitch(cc::switches::kEnableMainFrameBeforeActivation) && 250 cmd->HasSwitch(cc::switches::kEnableMainFrameBeforeActivation) &&
251 !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeActivation); 251 !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeActivation);
252 settings.accelerated_animation_enabled = 252 settings.accelerated_animation_enabled =
253 compositor_deps_->IsThreadedAnimationEnabled(); 253 compositor_deps_->IsThreadedAnimationEnabled();
254 254
255 settings.use_compositor_animation_timelines = 255 settings.use_compositor_animation_timelines =
256 !cmd->HasSwitch(switches::kDisableCompositorAnimationTimelines); 256 !cmd->HasSwitch(switches::kDisableCompositorAnimationTimelines);
257 blink::WebRuntimeFeatures::enableCompositorAnimationTimelines( 257 blink::WebRuntimeFeatures::enableCompositorAnimationTimelines(
258 settings.use_compositor_animation_timelines); 258 settings.use_compositor_animation_timelines);
259 259
260 settings.default_tile_size = CalculateDefaultTileSize(widget_); 260 settings.default_tile_size = CalculateDefaultTileSize(device_scale_factor);
261 if (cmd->HasSwitch(switches::kDefaultTileWidth)) { 261 if (cmd->HasSwitch(switches::kDefaultTileWidth)) {
262 int tile_width = 0; 262 int tile_width = 0;
263 GetSwitchValueAsInt(*cmd, 263 GetSwitchValueAsInt(*cmd,
264 switches::kDefaultTileWidth, 264 switches::kDefaultTileWidth,
265 1, 265 1,
266 std::numeric_limits<int>::max(), 266 std::numeric_limits<int>::max(),
267 &tile_width); 267 &tile_width);
268 settings.default_tile_size.set_width(tile_width); 268 settings.default_tile_size.set_width(tile_width);
269 } 269 }
270 if (cmd->HasSwitch(switches::kDefaultTileHeight)) { 270 if (cmd->HasSwitch(switches::kDefaultTileHeight)) {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 if (cmd->HasSwitch(switches::kDisableLowResTiling)) 449 if (cmd->HasSwitch(switches::kDisableLowResTiling))
450 settings.create_low_res_tiling = false; 450 settings.create_low_res_tiling = false;
451 if (cmd->HasSwitch(cc::switches::kEnableBeginFrameScheduling)) 451 if (cmd->HasSwitch(cc::switches::kEnableBeginFrameScheduling))
452 settings.use_external_begin_frame_source = true; 452 settings.use_external_begin_frame_source = true;
453 453
454 settings.renderer_settings.use_rgba_4444_textures |= 454 settings.renderer_settings.use_rgba_4444_textures |=
455 cmd->HasSwitch(switches::kEnableRGBA4444Textures); 455 cmd->HasSwitch(switches::kEnableRGBA4444Textures);
456 settings.renderer_settings.use_rgba_4444_textures &= 456 settings.renderer_settings.use_rgba_4444_textures &=
457 !cmd->HasSwitch(switches::kDisableRGBA4444Textures); 457 !cmd->HasSwitch(switches::kDisableRGBA4444Textures);
458 458
459 if (widget_->for_oopif()) { 459 if (delegate_->ForOOPIF()) {
460 // TODO(simonhong): Apply BeginFrame scheduling for OOPIF. 460 // TODO(simonhong): Apply BeginFrame scheduling for OOPIF.
461 // See crbug.com/471411. 461 // See crbug.com/471411.
462 settings.use_external_begin_frame_source = false; 462 settings.use_external_begin_frame_source = false;
463 } 463 }
464 464
465 settings.max_staging_buffer_usage_in_bytes = 32 * 1024 * 1024; // 32MB 465 settings.max_staging_buffer_usage_in_bytes = 32 * 1024 * 1024; // 32MB
466 // Use 1/4th of staging buffers on low-end devices. 466 // Use 1/4th of staging buffers on low-end devices.
467 if (base::SysInfo::IsLowEndDevice()) 467 if (base::SysInfo::IsLowEndDevice())
468 settings.max_staging_buffer_usage_in_bytes /= 4; 468 settings.max_staging_buffer_usage_in_bytes /= 4;
469 469
(...skipping 12 matching lines...) Expand all
482 cc::TaskGraphRunner* task_graph_runner = 482 cc::TaskGraphRunner* task_graph_runner =
483 compositor_deps_->GetTaskGraphRunner(); 483 compositor_deps_->GetTaskGraphRunner();
484 484
485 bool use_remote_compositing = cmd->HasSwitch(switches::kUseRemoteCompositing); 485 bool use_remote_compositing = cmd->HasSwitch(switches::kUseRemoteCompositing);
486 486
487 if (use_remote_compositing) 487 if (use_remote_compositing)
488 settings.use_external_begin_frame_source = false; 488 settings.use_external_begin_frame_source = false;
489 489
490 scoped_ptr<cc::BeginFrameSource> external_begin_frame_source; 490 scoped_ptr<cc::BeginFrameSource> external_begin_frame_source;
491 if (settings.use_external_begin_frame_source) { 491 if (settings.use_external_begin_frame_source) {
492 external_begin_frame_source = 492 external_begin_frame_source = delegate_->CreateExternalBeginFrameSource();
493 compositor_deps_->CreateExternalBeginFrameSource(widget_->routing_id());
494 } 493 }
495 494
496 cc::LayerTreeHost::InitParams params; 495 cc::LayerTreeHost::InitParams params;
497 params.client = this; 496 params.client = this;
498 params.shared_bitmap_manager = shared_bitmap_manager; 497 params.shared_bitmap_manager = shared_bitmap_manager;
499 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; 498 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
500 params.settings = &settings; 499 params.settings = &settings;
501 params.task_graph_runner = task_graph_runner; 500 params.task_graph_runner = task_graph_runner;
502 params.main_task_runner = main_thread_compositor_task_runner; 501 params.main_task_runner = main_thread_compositor_task_runner;
503 params.external_begin_frame_source = std::move(external_begin_frame_source); 502 params.external_begin_frame_source = std::move(external_begin_frame_source);
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 857
859 void RenderWidgetCompositor::setTopControlsHeight(float height, bool shrink) { 858 void RenderWidgetCompositor::setTopControlsHeight(float height, bool shrink) {
860 layer_tree_host_->SetTopControlsHeight(height, shrink); 859 layer_tree_host_->SetTopControlsHeight(height, shrink);
861 } 860 }
862 861
863 void RenderWidgetCompositor::setTopControlsShownRatio(float ratio) { 862 void RenderWidgetCompositor::setTopControlsShownRatio(float ratio) {
864 layer_tree_host_->SetTopControlsShownRatio(ratio); 863 layer_tree_host_->SetTopControlsShownRatio(ratio);
865 } 864 }
866 865
867 void RenderWidgetCompositor::WillBeginMainFrame() { 866 void RenderWidgetCompositor::WillBeginMainFrame() {
868 widget_->WillBeginCompositorFrame(); 867 delegate_->WillBeginCompositorFrame();
869 } 868 }
870 869
871 void RenderWidgetCompositor::DidBeginMainFrame() { 870 void RenderWidgetCompositor::DidBeginMainFrame() {
872 } 871 }
873 872
874 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { 873 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
875 compositor_deps_->GetRendererScheduler()->WillBeginFrame(args); 874 compositor_deps_->GetRendererScheduler()->WillBeginFrame(args);
876 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF(); 875 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF();
877 widget_->webwidget()->beginFrame(frame_time_sec); 876 delegate_->BeginMainFrame(frame_time_sec);
878 } 877 }
879 878
880 void RenderWidgetCompositor::BeginMainFrameNotExpectedSoon() { 879 void RenderWidgetCompositor::BeginMainFrameNotExpectedSoon() {
881 compositor_deps_->GetRendererScheduler()->BeginFrameNotExpectedSoon(); 880 compositor_deps_->GetRendererScheduler()->BeginFrameNotExpectedSoon();
882 } 881 }
883 882
884 void RenderWidgetCompositor::UpdateLayerTreeHost() { 883 void RenderWidgetCompositor::UpdateLayerTreeHost() {
885 widget_->webwidget()->updateAllLifecyclePhases();
piman 2016/01/13 22:09:30 So if I understand correctly, this moved from here
danakj 2016/01/13 22:24:33 Take a look here, the time when things run matters
Fady Samuel 2016/01/13 23:48:13 I don't want to change semantics in this CL so I'v
886
887 if (temporary_copy_output_request_) { 884 if (temporary_copy_output_request_) {
888 // For WebViewImpl, this will always have a root layer. For other widgets, 885 // For WebViewImpl, this will always have a root layer. For other widgets,
889 // the widget may be closed before servicing this request, so ignore it. 886 // the widget may be closed before servicing this request, so ignore it.
890 if (cc::Layer* root_layer = layer_tree_host_->root_layer()) { 887 if (cc::Layer* root_layer = layer_tree_host_->root_layer()) {
891 root_layer->RequestCopyOfOutput( 888 root_layer->RequestCopyOfOutput(
892 std::move(temporary_copy_output_request_)); 889 std::move(temporary_copy_output_request_));
893 } else { 890 } else {
894 temporary_copy_output_request_->SendEmptyResult(); 891 temporary_copy_output_request_->SendEmptyResult();
895 temporary_copy_output_request_ = nullptr; 892 temporary_copy_output_request_ = nullptr;
896 } 893 }
897 } 894 }
898 } 895 }
899 896
900 void RenderWidgetCompositor::ApplyViewportDeltas( 897 void RenderWidgetCompositor::ApplyViewportDeltas(
901 const gfx::Vector2dF& inner_delta, 898 const gfx::Vector2dF& inner_delta,
902 const gfx::Vector2dF& outer_delta, 899 const gfx::Vector2dF& outer_delta,
903 const gfx::Vector2dF& elastic_overscroll_delta, 900 const gfx::Vector2dF& elastic_overscroll_delta,
904 float page_scale, 901 float page_scale,
905 float top_controls_delta) { 902 float top_controls_delta) {
906 widget_->webwidget()->applyViewportDeltas( 903 delegate_->ApplyViewportDeltas(inner_delta, outer_delta,
907 inner_delta, 904 elastic_overscroll_delta, page_scale,
908 outer_delta, 905 top_controls_delta);
909 elastic_overscroll_delta,
910 page_scale,
911 top_controls_delta);
912 } 906 }
913 907
914 void RenderWidgetCompositor::RequestNewOutputSurface() { 908 void RenderWidgetCompositor::RequestNewOutputSurface() {
915 // If the host is closing, then no more compositing is possible. This
916 // prevents shutdown races between handling the close message and
917 // the CreateOutputSurface task.
918 if (widget_->host_closing())
919 return;
920
921 bool fallback = 909 bool fallback =
922 num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK; 910 num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK;
923 scoped_ptr<cc::OutputSurface> surface(widget_->CreateOutputSurface(fallback)); 911 scoped_ptr<cc::OutputSurface> surface(
912 delegate_->CreateOutputSurface(fallback));
924 913
925 if (!surface) { 914 if (!surface) {
926 DidFailToInitializeOutputSurface(); 915 DidFailToInitializeOutputSurface();
927 return; 916 return;
928 } 917 }
929 918
930 DCHECK_EQ(surface->capabilities().max_frames_pending, 1); 919 DCHECK_EQ(surface->capabilities().max_frames_pending, 1);
931 920
932 layer_tree_host_->SetOutputSurface(std::move(surface)); 921 layer_tree_host_->SetOutputSurface(std::move(surface));
933 } 922 }
(...skipping 13 matching lines...) Expand all
947 FROM_HERE, base::Bind(&RenderWidgetCompositor::RequestNewOutputSurface, 936 FROM_HERE, base::Bind(&RenderWidgetCompositor::RequestNewOutputSurface,
948 weak_factory_.GetWeakPtr())); 937 weak_factory_.GetWeakPtr()));
949 } 938 }
950 939
951 void RenderWidgetCompositor::WillCommit() { 940 void RenderWidgetCompositor::WillCommit() {
952 InvokeLayoutAndPaintCallback(); 941 InvokeLayoutAndPaintCallback();
953 } 942 }
954 943
955 void RenderWidgetCompositor::DidCommit() { 944 void RenderWidgetCompositor::DidCommit() {
956 DCHECK(!temporary_copy_output_request_); 945 DCHECK(!temporary_copy_output_request_);
957 widget_->DidCommitCompositorFrame(); 946 delegate_->DidCommitCompositorFrame();
958 compositor_deps_->GetRendererScheduler()->DidCommitFrameToCompositor(); 947 compositor_deps_->GetRendererScheduler()->DidCommitFrameToCompositor();
959 } 948 }
960 949
961 void RenderWidgetCompositor::DidCommitAndDrawFrame() { 950 void RenderWidgetCompositor::DidCommitAndDrawFrame() {
962 widget_->DidCommitAndDrawCompositorFrame(); 951 delegate_->DidCommitAndDrawCompositorFrame();
963 } 952 }
964 953
965 void RenderWidgetCompositor::DidCompleteSwapBuffers() { 954 void RenderWidgetCompositor::DidCompleteSwapBuffers() {
966 widget_->DidCompleteSwapBuffers(); 955 delegate_->DidCompleteSwapBuffers();
967 bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get(); 956 bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get();
968 if (!threaded) 957 if (!threaded)
969 widget_->OnSwapBuffersComplete(); 958 delegate_->OnSwapBuffersComplete();
970 } 959 }
971 960
972 void RenderWidgetCompositor::DidCompletePageScaleAnimation() { 961 void RenderWidgetCompositor::DidCompletePageScaleAnimation() {
973 widget_->DidCompletePageScaleAnimation(); 962 delegate_->DidCompletePageScaleAnimation();
974 } 963 }
975 964
976 void RenderWidgetCompositor::ScheduleAnimation() { 965 void RenderWidgetCompositor::ScheduleAnimation() {
977 widget_->scheduleAnimation(); 966 delegate_->ScheduleAnimation();
978 } 967 }
979 968
980 void RenderWidgetCompositor::DidPostSwapBuffers() { 969 void RenderWidgetCompositor::DidPostSwapBuffers() {
981 widget_->OnSwapBuffersPosted(); 970 delegate_->OnSwapBuffersPosted();
982 } 971 }
983 972
984 void RenderWidgetCompositor::DidAbortSwapBuffers() { 973 void RenderWidgetCompositor::DidAbortSwapBuffers() {
985 widget_->OnSwapBuffersAborted(); 974 delegate_->OnSwapBuffersAborted();
986 } 975 }
987 976
988 void RenderWidgetCompositor::SetProtoReceiver(ProtoReceiver* receiver) { 977 void RenderWidgetCompositor::SetProtoReceiver(ProtoReceiver* receiver) {
989 remote_proto_channel_receiver_ = receiver; 978 remote_proto_channel_receiver_ = receiver;
990 } 979 }
991 980
992 void RenderWidgetCompositor::SendCompositorProto( 981 void RenderWidgetCompositor::SendCompositorProto(
993 const cc::proto::CompositorMessage& proto) { 982 const cc::proto::CompositorMessage& proto) {
994 int signed_size = proto.ByteSize(); 983 int signed_size = proto.ByteSize();
995 size_t unsigned_size = base::checked_cast<size_t>(signed_size); 984 size_t unsigned_size = base::checked_cast<size_t>(signed_size);
996 std::vector<uint8_t> serialized(unsigned_size); 985 std::vector<uint8_t> serialized(unsigned_size);
997 proto.SerializeToArray(serialized.data(), signed_size); 986 proto.SerializeToArray(serialized.data(), signed_size);
998 widget_->ForwardCompositorProto(serialized); 987 delegate_->ForwardCompositorProto(serialized);
999 } 988 }
1000 989
1001 void RenderWidgetCompositor::RecordFrameTimingEvents( 990 void RenderWidgetCompositor::RecordFrameTimingEvents(
1002 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, 991 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events,
1003 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) { 992 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
1004 for (const auto& composite_event : *composite_events ) { 993 delegate_->RecordFrameTimingEvents(std::move(composite_events),
1005 int64_t frameId = composite_event.first; 994 std::move(main_frame_events));
1006 const std::vector<cc::FrameTimingTracker::CompositeTimingEvent>& events =
1007 composite_event.second;
1008 std::vector<blink::WebFrameTimingEvent> webEvents;
1009 for (size_t i = 0; i < events.size(); ++i) {
1010 webEvents.push_back(blink::WebFrameTimingEvent(
1011 events[i].frame_id,
1012 (events[i].timestamp - base::TimeTicks()).InSecondsF()));
1013 }
1014 widget_->webwidget()->recordFrameTimingEvent(
1015 blink::WebWidget::CompositeEvent, frameId, webEvents);
1016 }
1017 for (const auto& main_frame_event : *main_frame_events ) {
1018 int64_t frameId = main_frame_event.first;
1019 const std::vector<cc::FrameTimingTracker::MainFrameTimingEvent>& events =
1020 main_frame_event.second;
1021 std::vector<blink::WebFrameTimingEvent> webEvents;
1022 for (size_t i = 0; i < events.size(); ++i) {
1023 webEvents.push_back(blink::WebFrameTimingEvent(
1024 events[i].frame_id,
1025 (events[i].timestamp - base::TimeTicks()).InSecondsF(),
1026 (events[i].end_time - base::TimeTicks()).InSecondsF()));
1027 }
1028 widget_->webwidget()->recordFrameTimingEvent(
1029 blink::WebWidget::RenderEvent, frameId, webEvents);
1030 }
1031 } 995 }
1032 996
1033 void RenderWidgetCompositor::SetSurfaceIdNamespace( 997 void RenderWidgetCompositor::SetSurfaceIdNamespace(
1034 uint32_t surface_id_namespace) { 998 uint32_t surface_id_namespace) {
1035 layer_tree_host_->set_surface_id_namespace(surface_id_namespace); 999 layer_tree_host_->set_surface_id_namespace(surface_id_namespace);
1036 } 1000 }
1037 1001
1038 void RenderWidgetCompositor::OnHandleCompositorProto( 1002 void RenderWidgetCompositor::OnHandleCompositorProto(
1039 const std::vector<uint8_t>& proto) { 1003 const std::vector<uint8_t>& proto) {
1040 DCHECK(remote_proto_channel_receiver_); 1004 DCHECK(remote_proto_channel_receiver_);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 #endif 1093 #endif
1130 return actual; 1094 return actual;
1131 } 1095 }
1132 1096
1133 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor( 1097 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor(
1134 float device_scale) { 1098 float device_scale) {
1135 layer_tree_host_->SetPaintedDeviceScaleFactor(device_scale); 1099 layer_tree_host_->SetPaintedDeviceScaleFactor(device_scale);
1136 } 1100 }
1137 1101
1138 } // namespace content 1102 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698