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

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

Issue 1586523004: Revert of RenderWidgetCompositor should be decoupled from RenderWidget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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"
49 #include "content/renderer/input/input_handler_manager.h" 48 #include "content/renderer/input/input_handler_manager.h"
50 #include "gpu/command_buffer/client/gles2_interface.h" 49 #include "gpu/command_buffer/client/gles2_interface.h"
51 #include "gpu/command_buffer/service/gpu_switches.h" 50 #include "gpu/command_buffer/service/gpu_switches.h"
52 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h" 51 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h"
53 #include "third_party/WebKit/public/platform/WebLayoutAndPaintAsyncCallback.h" 52 #include "third_party/WebKit/public/platform/WebLayoutAndPaintAsyncCallback.h"
54 #include "third_party/WebKit/public/platform/WebSize.h" 53 #include "third_party/WebKit/public/platform/WebSize.h"
55 #include "third_party/WebKit/public/web/WebKit.h" 54 #include "third_party/WebKit/public/web/WebKit.h"
56 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 55 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
57 #include "third_party/WebKit/public/web/WebSelection.h" 56 #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(float initial_device_scale_factor) { 138 gfx::Size CalculateDefaultTileSize(RenderWidget* widget) {
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 (initial_device_scale_factor >= 2.0f) 183 if (widget->screen_info().deviceScaleFactor >= 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 RenderWidgetCompositorDelegate* delegate, 208 RenderWidget* widget,
209 float device_scale_factor,
210 CompositorDependencies* compositor_deps) { 209 CompositorDependencies* compositor_deps) {
211 scoped_ptr<RenderWidgetCompositor> compositor( 210 scoped_ptr<RenderWidgetCompositor> compositor(
212 new RenderWidgetCompositor(delegate, compositor_deps)); 211 new RenderWidgetCompositor(widget, compositor_deps));
213 compositor->Initialize(device_scale_factor); 212 compositor->Initialize();
214 return compositor; 213 return compositor;
215 } 214 }
216 215
217 RenderWidgetCompositor::RenderWidgetCompositor( 216 RenderWidgetCompositor::RenderWidgetCompositor(
218 RenderWidgetCompositorDelegate* delegate, 217 RenderWidget* widget,
219 CompositorDependencies* compositor_deps) 218 CompositorDependencies* compositor_deps)
220 : num_failed_recreate_attempts_(0), 219 : num_failed_recreate_attempts_(0),
221 delegate_(delegate), 220 widget_(widget),
222 compositor_deps_(compositor_deps), 221 compositor_deps_(compositor_deps),
223 never_visible_(false), 222 never_visible_(false),
224 layout_and_paint_async_callback_(nullptr), 223 layout_and_paint_async_callback_(nullptr),
225 remote_proto_channel_receiver_(nullptr), 224 remote_proto_channel_receiver_(nullptr),
226 weak_factory_(this) {} 225 weak_factory_(this) {
226 }
227 227
228 void RenderWidgetCompositor::Initialize(float device_scale_factor) { 228 void RenderWidgetCompositor::Initialize() {
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(device_scale_factor); 260 settings.default_tile_size = CalculateDefaultTileSize(widget_);
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 (delegate_->ForOOPIF()) { 459 if (widget_->for_oopif()) {
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 = delegate_->CreateExternalBeginFrameSource(); 492 external_begin_frame_source =
493 compositor_deps_->CreateExternalBeginFrameSource(widget_->routing_id());
493 } 494 }
494 495
495 cc::LayerTreeHost::InitParams params; 496 cc::LayerTreeHost::InitParams params;
496 params.client = this; 497 params.client = this;
497 params.shared_bitmap_manager = shared_bitmap_manager; 498 params.shared_bitmap_manager = shared_bitmap_manager;
498 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; 499 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
499 params.settings = &settings; 500 params.settings = &settings;
500 params.task_graph_runner = task_graph_runner; 501 params.task_graph_runner = task_graph_runner;
501 params.main_task_runner = main_thread_compositor_task_runner; 502 params.main_task_runner = main_thread_compositor_task_runner;
502 params.external_begin_frame_source = std::move(external_begin_frame_source); 503 params.external_begin_frame_source = std::move(external_begin_frame_source);
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 858
858 void RenderWidgetCompositor::setTopControlsHeight(float height, bool shrink) { 859 void RenderWidgetCompositor::setTopControlsHeight(float height, bool shrink) {
859 layer_tree_host_->SetTopControlsHeight(height, shrink); 860 layer_tree_host_->SetTopControlsHeight(height, shrink);
860 } 861 }
861 862
862 void RenderWidgetCompositor::setTopControlsShownRatio(float ratio) { 863 void RenderWidgetCompositor::setTopControlsShownRatio(float ratio) {
863 layer_tree_host_->SetTopControlsShownRatio(ratio); 864 layer_tree_host_->SetTopControlsShownRatio(ratio);
864 } 865 }
865 866
866 void RenderWidgetCompositor::WillBeginMainFrame() { 867 void RenderWidgetCompositor::WillBeginMainFrame() {
867 delegate_->WillBeginCompositorFrame(); 868 widget_->WillBeginCompositorFrame();
868 } 869 }
869 870
870 void RenderWidgetCompositor::DidBeginMainFrame() { 871 void RenderWidgetCompositor::DidBeginMainFrame() {
871 } 872 }
872 873
873 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { 874 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
874 compositor_deps_->GetRendererScheduler()->WillBeginFrame(args); 875 compositor_deps_->GetRendererScheduler()->WillBeginFrame(args);
875 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF(); 876 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF();
876 delegate_->BeginMainFrame(frame_time_sec); 877 widget_->webwidget()->beginFrame(frame_time_sec);
877 } 878 }
878 879
879 void RenderWidgetCompositor::BeginMainFrameNotExpectedSoon() { 880 void RenderWidgetCompositor::BeginMainFrameNotExpectedSoon() {
880 compositor_deps_->GetRendererScheduler()->BeginFrameNotExpectedSoon(); 881 compositor_deps_->GetRendererScheduler()->BeginFrameNotExpectedSoon();
881 } 882 }
882 883
883 void RenderWidgetCompositor::UpdateLayerTreeHost() { 884 void RenderWidgetCompositor::UpdateLayerTreeHost() {
884 delegate_->UpdateVisualState(); 885 widget_->webwidget()->updateAllLifecyclePhases();
886
885 if (temporary_copy_output_request_) { 887 if (temporary_copy_output_request_) {
886 // For WebViewImpl, this will always have a root layer. For other widgets, 888 // For WebViewImpl, this will always have a root layer. For other widgets,
887 // the widget may be closed before servicing this request, so ignore it. 889 // the widget may be closed before servicing this request, so ignore it.
888 if (cc::Layer* root_layer = layer_tree_host_->root_layer()) { 890 if (cc::Layer* root_layer = layer_tree_host_->root_layer()) {
889 root_layer->RequestCopyOfOutput( 891 root_layer->RequestCopyOfOutput(
890 std::move(temporary_copy_output_request_)); 892 std::move(temporary_copy_output_request_));
891 } else { 893 } else {
892 temporary_copy_output_request_->SendEmptyResult(); 894 temporary_copy_output_request_->SendEmptyResult();
893 temporary_copy_output_request_ = nullptr; 895 temporary_copy_output_request_ = nullptr;
894 } 896 }
895 } 897 }
896 } 898 }
897 899
898 void RenderWidgetCompositor::ApplyViewportDeltas( 900 void RenderWidgetCompositor::ApplyViewportDeltas(
899 const gfx::Vector2dF& inner_delta, 901 const gfx::Vector2dF& inner_delta,
900 const gfx::Vector2dF& outer_delta, 902 const gfx::Vector2dF& outer_delta,
901 const gfx::Vector2dF& elastic_overscroll_delta, 903 const gfx::Vector2dF& elastic_overscroll_delta,
902 float page_scale, 904 float page_scale,
903 float top_controls_delta) { 905 float top_controls_delta) {
904 delegate_->ApplyViewportDeltas(inner_delta, outer_delta, 906 widget_->webwidget()->applyViewportDeltas(
905 elastic_overscroll_delta, page_scale, 907 inner_delta,
906 top_controls_delta); 908 outer_delta,
909 elastic_overscroll_delta,
910 page_scale,
911 top_controls_delta);
907 } 912 }
908 913
909 void RenderWidgetCompositor::RequestNewOutputSurface() { 914 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
910 bool fallback = 921 bool fallback =
911 num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK; 922 num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK;
912 scoped_ptr<cc::OutputSurface> surface( 923 scoped_ptr<cc::OutputSurface> surface(widget_->CreateOutputSurface(fallback));
913 delegate_->CreateOutputSurface(fallback));
914 924
915 if (!surface) { 925 if (!surface) {
916 DidFailToInitializeOutputSurface(); 926 DidFailToInitializeOutputSurface();
917 return; 927 return;
918 } 928 }
919 929
920 DCHECK_EQ(surface->capabilities().max_frames_pending, 1); 930 DCHECK_EQ(surface->capabilities().max_frames_pending, 1);
921 931
922 layer_tree_host_->SetOutputSurface(std::move(surface)); 932 layer_tree_host_->SetOutputSurface(std::move(surface));
923 } 933 }
(...skipping 13 matching lines...) Expand all
937 FROM_HERE, base::Bind(&RenderWidgetCompositor::RequestNewOutputSurface, 947 FROM_HERE, base::Bind(&RenderWidgetCompositor::RequestNewOutputSurface,
938 weak_factory_.GetWeakPtr())); 948 weak_factory_.GetWeakPtr()));
939 } 949 }
940 950
941 void RenderWidgetCompositor::WillCommit() { 951 void RenderWidgetCompositor::WillCommit() {
942 InvokeLayoutAndPaintCallback(); 952 InvokeLayoutAndPaintCallback();
943 } 953 }
944 954
945 void RenderWidgetCompositor::DidCommit() { 955 void RenderWidgetCompositor::DidCommit() {
946 DCHECK(!temporary_copy_output_request_); 956 DCHECK(!temporary_copy_output_request_);
947 delegate_->DidCommitCompositorFrame(); 957 widget_->DidCommitCompositorFrame();
948 compositor_deps_->GetRendererScheduler()->DidCommitFrameToCompositor(); 958 compositor_deps_->GetRendererScheduler()->DidCommitFrameToCompositor();
949 } 959 }
950 960
951 void RenderWidgetCompositor::DidCommitAndDrawFrame() { 961 void RenderWidgetCompositor::DidCommitAndDrawFrame() {
952 delegate_->DidCommitAndDrawCompositorFrame(); 962 widget_->DidCommitAndDrawCompositorFrame();
953 } 963 }
954 964
955 void RenderWidgetCompositor::DidCompleteSwapBuffers() { 965 void RenderWidgetCompositor::DidCompleteSwapBuffers() {
956 delegate_->DidCompleteSwapBuffers(); 966 widget_->DidCompleteSwapBuffers();
957 bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get(); 967 bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get();
958 if (!threaded) 968 if (!threaded)
959 delegate_->OnSwapBuffersComplete(); 969 widget_->OnSwapBuffersComplete();
960 } 970 }
961 971
962 void RenderWidgetCompositor::DidCompletePageScaleAnimation() { 972 void RenderWidgetCompositor::DidCompletePageScaleAnimation() {
963 delegate_->DidCompletePageScaleAnimation(); 973 widget_->DidCompletePageScaleAnimation();
964 } 974 }
965 975
966 void RenderWidgetCompositor::ScheduleAnimation() { 976 void RenderWidgetCompositor::ScheduleAnimation() {
967 delegate_->ScheduleAnimation(); 977 widget_->scheduleAnimation();
968 } 978 }
969 979
970 void RenderWidgetCompositor::DidPostSwapBuffers() { 980 void RenderWidgetCompositor::DidPostSwapBuffers() {
971 delegate_->OnSwapBuffersPosted(); 981 widget_->OnSwapBuffersPosted();
972 } 982 }
973 983
974 void RenderWidgetCompositor::DidAbortSwapBuffers() { 984 void RenderWidgetCompositor::DidAbortSwapBuffers() {
975 delegate_->OnSwapBuffersAborted(); 985 widget_->OnSwapBuffersAborted();
976 } 986 }
977 987
978 void RenderWidgetCompositor::SetProtoReceiver(ProtoReceiver* receiver) { 988 void RenderWidgetCompositor::SetProtoReceiver(ProtoReceiver* receiver) {
979 remote_proto_channel_receiver_ = receiver; 989 remote_proto_channel_receiver_ = receiver;
980 } 990 }
981 991
982 void RenderWidgetCompositor::SendCompositorProto( 992 void RenderWidgetCompositor::SendCompositorProto(
983 const cc::proto::CompositorMessage& proto) { 993 const cc::proto::CompositorMessage& proto) {
984 int signed_size = proto.ByteSize(); 994 int signed_size = proto.ByteSize();
985 size_t unsigned_size = base::checked_cast<size_t>(signed_size); 995 size_t unsigned_size = base::checked_cast<size_t>(signed_size);
986 std::vector<uint8_t> serialized(unsigned_size); 996 std::vector<uint8_t> serialized(unsigned_size);
987 proto.SerializeToArray(serialized.data(), signed_size); 997 proto.SerializeToArray(serialized.data(), signed_size);
988 delegate_->ForwardCompositorProto(serialized); 998 widget_->ForwardCompositorProto(serialized);
989 } 999 }
990 1000
991 void RenderWidgetCompositor::RecordFrameTimingEvents( 1001 void RenderWidgetCompositor::RecordFrameTimingEvents(
992 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, 1002 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events,
993 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) { 1003 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
994 delegate_->RecordFrameTimingEvents(std::move(composite_events), 1004 for (const auto& composite_event : *composite_events ) {
995 std::move(main_frame_events)); 1005 int64_t frameId = composite_event.first;
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 }
996 } 1031 }
997 1032
998 void RenderWidgetCompositor::SetSurfaceIdNamespace( 1033 void RenderWidgetCompositor::SetSurfaceIdNamespace(
999 uint32_t surface_id_namespace) { 1034 uint32_t surface_id_namespace) {
1000 layer_tree_host_->set_surface_id_namespace(surface_id_namespace); 1035 layer_tree_host_->set_surface_id_namespace(surface_id_namespace);
1001 } 1036 }
1002 1037
1003 void RenderWidgetCompositor::OnHandleCompositorProto( 1038 void RenderWidgetCompositor::OnHandleCompositorProto(
1004 const std::vector<uint8_t>& proto) { 1039 const std::vector<uint8_t>& proto) {
1005 DCHECK(remote_proto_channel_receiver_); 1040 DCHECK(remote_proto_channel_receiver_);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1094 #endif 1129 #endif
1095 return actual; 1130 return actual;
1096 } 1131 }
1097 1132
1098 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor( 1133 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor(
1099 float device_scale) { 1134 float device_scale) {
1100 layer_tree_host_->SetPaintedDeviceScaleFactor(device_scale); 1135 layer_tree_host_->SetPaintedDeviceScaleFactor(device_scale);
1101 } 1136 }
1102 1137
1103 } // namespace content 1138 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.h ('k') | content/renderer/gpu/render_widget_compositor_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698