OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |