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

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

Issue 801973002: Introduce CompositorDependencies for RenderWidgetCompositor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: compdep: . Created 6 years 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 <limits> 7 #include <limits>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/synchronization/lock.h" 13 #include "base/synchronization/lock.h"
14 #include "base/sys_info.h" 14 #include "base/sys_info.h"
15 #include "base/time/time.h" 15 #include "base/time/time.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "cc/base/latency_info_swap_promise.h" 17 #include "cc/base/latency_info_swap_promise.h"
18 #include "cc/base/latency_info_swap_promise_monitor.h" 18 #include "cc/base/latency_info_swap_promise_monitor.h"
19 #include "cc/base/swap_promise.h" 19 #include "cc/base/swap_promise.h"
20 #include "cc/base/switches.h" 20 #include "cc/base/switches.h"
21 #include "cc/blink/web_layer_impl.h" 21 #include "cc/blink/web_layer_impl.h"
22 #include "cc/debug/layer_tree_debug_state.h" 22 #include "cc/debug/layer_tree_debug_state.h"
23 #include "cc/debug/micro_benchmark.h" 23 #include "cc/debug/micro_benchmark.h"
24 #include "cc/input/layer_selection_bound.h" 24 #include "cc/input/layer_selection_bound.h"
25 #include "cc/layers/layer.h" 25 #include "cc/layers/layer.h"
26 #include "cc/output/begin_frame_args.h" 26 #include "cc/output/begin_frame_args.h"
27 #include "cc/output/copy_output_request.h" 27 #include "cc/output/copy_output_request.h"
28 #include "cc/output/copy_output_result.h" 28 #include "cc/output/copy_output_result.h"
29 #include "cc/resources/single_release_callback.h" 29 #include "cc/resources/single_release_callback.h"
30 #include "cc/scheduler/begin_frame_source.h"
30 #include "cc/trees/layer_tree_host.h" 31 #include "cc/trees/layer_tree_host.h"
31 #include "content/child/child_gpu_memory_buffer_manager.h"
32 #include "content/child/child_shared_bitmap_manager.h"
33 #include "content/common/content_switches_internal.h" 32 #include "content/common/content_switches_internal.h"
34 #include "content/common/gpu/client/context_provider_command_buffer.h" 33 #include "content/common/gpu/client/context_provider_command_buffer.h"
35 #include "content/public/common/content_switches.h" 34 #include "content/public/common/content_switches.h"
36 #include "content/renderer/gpu/compositor_external_begin_frame_source.h"
37 #include "content/renderer/input/input_handler_manager.h" 35 #include "content/renderer/input/input_handler_manager.h"
38 #include "content/renderer/render_thread_impl.h"
39 #include "content/renderer/scheduler/renderer_scheduler.h" 36 #include "content/renderer/scheduler/renderer_scheduler.h"
40 #include "gpu/command_buffer/client/gles2_interface.h" 37 #include "gpu/command_buffer/client/gles2_interface.h"
41 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h" 38 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h"
42 #include "third_party/WebKit/public/platform/WebSelectionBound.h" 39 #include "third_party/WebKit/public/platform/WebSelectionBound.h"
43 #include "third_party/WebKit/public/platform/WebSize.h" 40 #include "third_party/WebKit/public/platform/WebSize.h"
44 #include "third_party/WebKit/public/web/WebKit.h" 41 #include "third_party/WebKit/public/web/WebKit.h"
45 #include "third_party/WebKit/public/web/WebWidget.h" 42 #include "third_party/WebKit/public/web/WebWidget.h"
46 #include "ui/gfx/frame_time.h" 43 #include "ui/gfx/frame_time.h"
47 #include "ui/gl/gl_switches.h" 44 #include "ui/gl/gl_switches.h"
48 #include "ui/native_theme/native_theme_switches.h" 45 #include "ui/native_theme/native_theme_switches.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 } 152 }
156 #endif 153 #endif
157 return gfx::Size(default_tile_size, default_tile_size); 154 return gfx::Size(default_tile_size, default_tile_size);
158 } 155 }
159 156
160 } // namespace 157 } // namespace
161 158
162 // static 159 // static
163 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( 160 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
164 RenderWidget* widget, 161 RenderWidget* widget,
165 bool threaded) { 162 CompositorDependencies* compositor_deps) {
166 scoped_ptr<RenderWidgetCompositor> compositor( 163 scoped_ptr<RenderWidgetCompositor> compositor(
167 new RenderWidgetCompositor(widget, threaded)); 164 new RenderWidgetCompositor(widget, compositor_deps));
165 compositor->Initialize();
166 return compositor;
167 }
168 168
169 RenderWidgetCompositor::RenderWidgetCompositor(
170 RenderWidget* widget,
171 CompositorDependencies* compositor_deps)
172 : num_failed_recreate_attempts_(0),
173 widget_(widget),
174 compositor_deps_(compositor_deps),
175 send_v8_idle_notification_after_commit_(true),
176 weak_factory_(this) {
177 CommandLine* cmd = CommandLine::ForCurrentProcess();
178
179 if (cmd->HasSwitch(switches::kEnableV8IdleNotificationAfterCommit))
180 send_v8_idle_notification_after_commit_ = true;
181 if (cmd->HasSwitch(switches::kDisableV8IdleNotificationAfterCommit))
182 send_v8_idle_notification_after_commit_ = false;
183 }
184
185 void RenderWidgetCompositor::Initialize() {
169 CommandLine* cmd = CommandLine::ForCurrentProcess(); 186 CommandLine* cmd = CommandLine::ForCurrentProcess();
170 187
171 cc::LayerTreeSettings settings; 188 cc::LayerTreeSettings settings;
172 189
173 // For web contents, layer transforms should scale up the contents of layers 190 // For web contents, layer transforms should scale up the contents of layers
174 // to keep content always crisp when possible. 191 // to keep content always crisp when possible.
175 settings.layer_transforms_should_scale_layer_contents = true; 192 settings.layer_transforms_should_scale_layer_contents = true;
176 193
177 settings.throttle_frame_production = 194 settings.throttle_frame_production =
178 !cmd->HasSwitch(switches::kDisableGpuVsync); 195 !cmd->HasSwitch(switches::kDisableGpuVsync);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 int max_untiled_layer_height = settings.max_untiled_layer_size.height(); 232 int max_untiled_layer_height = settings.max_untiled_layer_size.height();
216 if (cmd->HasSwitch(switches::kMaxUntiledLayerHeight)) { 233 if (cmd->HasSwitch(switches::kMaxUntiledLayerHeight)) {
217 GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerHeight, 1, 234 GetSwitchValueAsInt(*cmd, switches::kMaxUntiledLayerHeight, 1,
218 std::numeric_limits<int>::max(), 235 std::numeric_limits<int>::max(),
219 &max_untiled_layer_height); 236 &max_untiled_layer_height);
220 } 237 }
221 238
222 settings.max_untiled_layer_size = gfx::Size(max_untiled_layer_width, 239 settings.max_untiled_layer_size = gfx::Size(max_untiled_layer_width,
223 max_untiled_layer_height); 240 max_untiled_layer_height);
224 241
225 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 242 settings.impl_side_painting = compositor_deps_->IsImplSidePaintingEnabled();
226 // render_thread may be NULL in tests. 243 settings.gpu_rasterization_forced =
227 if (render_thread) { 244 compositor_deps_->IsGpuRasterizationForced();
228 settings.impl_side_painting = 245 settings.gpu_rasterization_enabled =
229 render_thread->is_impl_side_painting_enabled(); 246 compositor_deps_->IsGpuRasterizationEnabled();
230 settings.gpu_rasterization_forced = 247 settings.can_use_lcd_text = compositor_deps_->IsLcdTextEnabled();
231 render_thread->is_gpu_rasterization_forced(); 248 settings.use_distance_field_text =
232 settings.gpu_rasterization_enabled = 249 compositor_deps_->IsDistanceFieldTextEnabled();
233 render_thread->is_gpu_rasterization_enabled(); 250 settings.use_zero_copy = compositor_deps_->IsZeroCopyEnabled();
234 settings.can_use_lcd_text = render_thread->is_lcd_text_enabled(); 251 settings.use_one_copy = compositor_deps_->IsOneCopyEnabled();
235 settings.use_distance_field_text = 252 settings.use_image_texture_target = compositor_deps_->GetImageTextureTarget();
236 render_thread->is_distance_field_text_enabled();
237 settings.use_zero_copy = render_thread->is_zero_copy_enabled();
238 settings.use_one_copy = render_thread->is_one_copy_enabled();
239 settings.use_image_texture_target =
240 render_thread->use_image_texture_target();
241 }
242 253
243 settings.calculate_top_controls_position = 254 settings.calculate_top_controls_position =
244 cmd->HasSwitch(cc::switches::kEnableTopControlsPositionCalculation); 255 cmd->HasSwitch(cc::switches::kEnableTopControlsPositionCalculation);
245 if (cmd->HasSwitch(cc::switches::kTopControlsShowThreshold)) { 256 if (cmd->HasSwitch(cc::switches::kTopControlsShowThreshold)) {
246 std::string top_threshold_str = 257 std::string top_threshold_str =
247 cmd->GetSwitchValueASCII(cc::switches::kTopControlsShowThreshold); 258 cmd->GetSwitchValueASCII(cc::switches::kTopControlsShowThreshold);
248 double show_threshold; 259 double show_threshold;
249 if (base::StringToDouble(top_threshold_str, &show_threshold) && 260 if (base::StringToDouble(top_threshold_str, &show_threshold) &&
250 show_threshold >= 0.f && show_threshold <= 1.f) 261 show_threshold >= 0.f && show_threshold <= 1.f)
251 settings.top_controls_show_threshold = show_threshold; 262 settings.top_controls_show_threshold = show_threshold;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 #if defined(OS_ANDROID) 341 #if defined(OS_ANDROID)
331 SynchronousCompositorFactory* synchronous_compositor_factory = 342 SynchronousCompositorFactory* synchronous_compositor_factory =
332 SynchronousCompositorFactory::GetInstance(); 343 SynchronousCompositorFactory::GetInstance();
333 344
334 // We can't use GPU rasterization on low-end devices, because the Ganesh 345 // We can't use GPU rasterization on low-end devices, because the Ganesh
335 // cache would consume too much memory. 346 // cache would consume too much memory.
336 if (base::SysInfo::IsLowEndDevice()) 347 if (base::SysInfo::IsLowEndDevice())
337 settings.gpu_rasterization_enabled = false; 348 settings.gpu_rasterization_enabled = false;
338 settings.using_synchronous_renderer_compositor = 349 settings.using_synchronous_renderer_compositor =
339 synchronous_compositor_factory; 350 synchronous_compositor_factory;
340 settings.record_full_layer = widget->DoesRecordFullLayer(); 351 settings.record_full_layer = widget_->DoesRecordFullLayer();
341 settings.report_overscroll_only_for_scrollable_axes = 352 settings.report_overscroll_only_for_scrollable_axes =
342 !synchronous_compositor_factory; 353 !synchronous_compositor_factory;
343 settings.max_partial_texture_updates = 0; 354 settings.max_partial_texture_updates = 0;
344 if (synchronous_compositor_factory) { 355 if (synchronous_compositor_factory) {
345 // Android WebView uses system scrollbars, so make ours invisible. 356 // Android WebView uses system scrollbars, so make ours invisible.
346 settings.scrollbar_animator = cc::LayerTreeSettings::NoAnimator; 357 settings.scrollbar_animator = cc::LayerTreeSettings::NoAnimator;
347 settings.solid_color_scrollbar_color = SK_ColorTRANSPARENT; 358 settings.solid_color_scrollbar_color = SK_ColorTRANSPARENT;
348 } else { 359 } else {
349 settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade; 360 settings.scrollbar_animator = cc::LayerTreeSettings::LinearFade;
350 settings.scrollbar_fade_delay_ms = 300; 361 settings.scrollbar_fade_delay_ms = 300;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 settings.scrollbar_fade_delay_ms = 500; 406 settings.scrollbar_fade_delay_ms = 500;
396 settings.scrollbar_fade_resize_delay_ms = 500; 407 settings.scrollbar_fade_resize_delay_ms = 500;
397 settings.scrollbar_fade_duration_ms = 300; 408 settings.scrollbar_fade_duration_ms = 300;
398 #endif 409 #endif
399 410
400 if (cmd->HasSwitch(switches::kEnableLowResTiling)) 411 if (cmd->HasSwitch(switches::kEnableLowResTiling))
401 settings.create_low_res_tiling = true; 412 settings.create_low_res_tiling = true;
402 if (cmd->HasSwitch(switches::kDisableLowResTiling)) 413 if (cmd->HasSwitch(switches::kDisableLowResTiling))
403 settings.create_low_res_tiling = false; 414 settings.create_low_res_tiling = false;
404 415
405 compositor->Initialize(settings); 416 scoped_refptr<base::SingleThreadTaskRunner> compositor_thread_task_runner =
417 compositor_deps_->GetCompositorImplThreadTaskRunner();
418 scoped_refptr<base::SingleThreadTaskRunner>
419 main_thread_compositor_task_runner =
420 compositor_deps_->GetCompositorMainThreadTaskRunner();
421 cc::SharedBitmapManager* shared_bitmap_manager =
422 compositor_deps_->GetSharedBitmapManager();
423 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager =
424 compositor_deps_->GetGpuMemoryBufferManager();
406 425
407 return compositor.Pass(); 426 scoped_ptr<cc::BeginFrameSource> external_begin_frame_source;
408 } 427 if (settings.use_external_begin_frame_source) {
428 external_begin_frame_source =
429 compositor_deps_->CreateExternalBeginFrameSource(widget_->routing_id());
430 }
409 431
410 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 432 if (compositor_thread_task_runner.get()) {
411 bool threaded) 433 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded(
412 : num_failed_recreate_attempts_(0), 434 this, shared_bitmap_manager, gpu_memory_buffer_manager, settings,
413 threaded_(threaded), 435 main_thread_compositor_task_runner, compositor_thread_task_runner,
414 widget_(widget), 436 external_begin_frame_source.Pass());
415 send_v8_idle_notification_after_commit_(true), 437 } else {
416 weak_factory_(this) { 438 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
417 CommandLine* cmd = CommandLine::ForCurrentProcess(); 439 this, this, shared_bitmap_manager, gpu_memory_buffer_manager, settings,
418 440 main_thread_compositor_task_runner, external_begin_frame_source.Pass());
419 if (cmd->HasSwitch(switches::kEnableV8IdleNotificationAfterCommit)) 441 }
420 send_v8_idle_notification_after_commit_ = true; 442 DCHECK(layer_tree_host_);
421 if (cmd->HasSwitch(switches::kDisableV8IdleNotificationAfterCommit))
422 send_v8_idle_notification_after_commit_ = false;
423 } 443 }
424 444
425 RenderWidgetCompositor::~RenderWidgetCompositor() {} 445 RenderWidgetCompositor::~RenderWidgetCompositor() {}
426 446
427 const base::WeakPtr<cc::InputHandler>& 447 const base::WeakPtr<cc::InputHandler>&
428 RenderWidgetCompositor::GetInputHandler() { 448 RenderWidgetCompositor::GetInputHandler() {
429 return layer_tree_host_->GetInputHandler(); 449 return layer_tree_host_->GetInputHandler();
430 } 450 }
431 451
432 bool RenderWidgetCompositor::BeginMainFrameRequested() const { 452 bool RenderWidgetCompositor::BeginMainFrameRequested() const {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 const base::Callback<void(scoped_ptr<base::Value>)>& callback) { 528 const base::Callback<void(scoped_ptr<base::Value>)>& callback) {
509 return layer_tree_host_->ScheduleMicroBenchmark(name, value.Pass(), callback); 529 return layer_tree_host_->ScheduleMicroBenchmark(name, value.Pass(), callback);
510 } 530 }
511 531
512 bool RenderWidgetCompositor::SendMessageToMicroBenchmark( 532 bool RenderWidgetCompositor::SendMessageToMicroBenchmark(
513 int id, 533 int id,
514 scoped_ptr<base::Value> value) { 534 scoped_ptr<base::Value> value) {
515 return layer_tree_host_->SendMessageToMicroBenchmark(id, value.Pass()); 535 return layer_tree_host_->SendMessageToMicroBenchmark(id, value.Pass());
516 } 536 }
517 537
518 void RenderWidgetCompositor::Initialize(const cc::LayerTreeSettings& settings) {
519 scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy;
520 scoped_refptr<base::SingleThreadTaskRunner>
521 main_thread_compositor_task_runner(base::MessageLoopProxy::current());
522 RenderThreadImpl* render_thread = RenderThreadImpl::current();
523 cc::SharedBitmapManager* shared_bitmap_manager = NULL;
524 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = NULL;
525 // render_thread may be NULL in tests.
526 if (render_thread) {
527 compositor_message_loop_proxy =
528 render_thread->compositor_message_loop_proxy();
529 shared_bitmap_manager = render_thread->shared_bitmap_manager();
530 gpu_memory_buffer_manager = render_thread->gpu_memory_buffer_manager();
531 main_thread_compositor_task_runner =
532 render_thread->main_thread_compositor_task_runner();
533 }
534 scoped_ptr<cc::BeginFrameSource> external_begin_frame_source;
535 #if defined(OS_ANDROID)
536 if (SynchronousCompositorFactory* factory =
537 SynchronousCompositorFactory::GetInstance()) {
538 DCHECK(settings.use_external_begin_frame_source);
539 external_begin_frame_source =
540 factory->CreateExternalBeginFrameSource(widget_->routing_id());
541 }
542 #endif
543 if (render_thread &&
544 !external_begin_frame_source.get() &&
545 settings.use_external_begin_frame_source) {
546 external_begin_frame_source.reset(new CompositorExternalBeginFrameSource(
547 widget_->routing_id()));
548 }
549 if (compositor_message_loop_proxy.get()) {
550 layer_tree_host_ =
551 cc::LayerTreeHost::CreateThreaded(this,
552 shared_bitmap_manager,
553 gpu_memory_buffer_manager,
554 settings,
555 main_thread_compositor_task_runner,
556 compositor_message_loop_proxy,
557 external_begin_frame_source.Pass());
558 } else {
559 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
560 this,
561 this,
562 shared_bitmap_manager,
563 gpu_memory_buffer_manager,
564 settings,
565 main_thread_compositor_task_runner,
566 external_begin_frame_source.Pass());
567 }
568 DCHECK(layer_tree_host_);
569 }
570
571 void RenderWidgetCompositor::setSurfaceReady() { 538 void RenderWidgetCompositor::setSurfaceReady() {
572 // In tests without a RenderThreadImpl, don't set ready as this kicks 539 layer_tree_host_->SetLayerTreeHostClientReady();
573 // off creating output surfaces that the test can't create.
574 if (RenderThreadImpl::current())
575 layer_tree_host_->SetLayerTreeHostClientReady();
576 } 540 }
577 541
578 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { 542 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) {
579 layer_tree_host_->SetRootLayer( 543 layer_tree_host_->SetRootLayer(
580 static_cast<const cc_blink::WebLayerImpl*>(&layer)->layer()); 544 static_cast<const cc_blink::WebLayerImpl*>(&layer)->layer());
581 } 545 }
582 546
583 void RenderWidgetCompositor::clearRootLayer() { 547 void RenderWidgetCompositor::clearRootLayer() {
584 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); 548 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>());
585 } 549 }
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 693
730 void RenderWidgetCompositor::compositeAndReadbackAsync( 694 void RenderWidgetCompositor::compositeAndReadbackAsync(
731 blink::WebCompositeAndReadbackAsyncCallback* callback) { 695 blink::WebCompositeAndReadbackAsyncCallback* callback) {
732 DCHECK(!temporary_copy_output_request_); 696 DCHECK(!temporary_copy_output_request_);
733 temporary_copy_output_request_ = 697 temporary_copy_output_request_ =
734 cc::CopyOutputRequest::CreateBitmapRequest( 698 cc::CopyOutputRequest::CreateBitmapRequest(
735 base::Bind(&CompositeAndReadbackAsyncCallback, callback)); 699 base::Bind(&CompositeAndReadbackAsyncCallback, callback));
736 // Force a commit to happen. The temporary copy output request will 700 // Force a commit to happen. The temporary copy output request will
737 // be installed after layout which will happen as a part of the commit, when 701 // be installed after layout which will happen as a part of the commit, when
738 // there is guaranteed to be a root layer. 702 // there is guaranteed to be a root layer.
739 if (!threaded_ && 703 bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get();
704 if (!threaded &&
740 !layer_tree_host_->settings().single_thread_proxy_scheduler) { 705 !layer_tree_host_->settings().single_thread_proxy_scheduler) {
741 layer_tree_host_->Composite(gfx::FrameTime::Now()); 706 layer_tree_host_->Composite(gfx::FrameTime::Now());
742 } else { 707 } else {
743 layer_tree_host_->SetNeedsCommit(); 708 layer_tree_host_->SetNeedsCommit();
744 } 709 }
745 } 710 }
746 711
747 void RenderWidgetCompositor::finishAllRendering() { 712 void RenderWidgetCompositor::finishAllRendering() {
748 layer_tree_host_->FinishAllRendering(); 713 layer_tree_host_->FinishAllRendering();
749 } 714 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 } 763 }
799 764
800 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { 765 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
801 begin_main_frame_time_ = args.frame_time; 766 begin_main_frame_time_ = args.frame_time;
802 begin_main_frame_interval_ = args.interval; 767 begin_main_frame_interval_ = args.interval;
803 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF(); 768 double frame_time_sec = (args.frame_time - base::TimeTicks()).InSecondsF();
804 double deadline_sec = (args.deadline - base::TimeTicks()).InSecondsF(); 769 double deadline_sec = (args.deadline - base::TimeTicks()).InSecondsF();
805 double interval_sec = args.interval.InSecondsF(); 770 double interval_sec = args.interval.InSecondsF();
806 WebBeginFrameArgs web_begin_frame_args = 771 WebBeginFrameArgs web_begin_frame_args =
807 WebBeginFrameArgs(frame_time_sec, deadline_sec, interval_sec); 772 WebBeginFrameArgs(frame_time_sec, deadline_sec, interval_sec);
808 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 773 compositor_deps_->GetRendererScheduler()->WillBeginFrame(args);
809 if (render_thread) // Can be null in tests.
810 render_thread->renderer_scheduler()->WillBeginFrame(args);
811 widget_->webwidget()->beginFrame(web_begin_frame_args); 774 widget_->webwidget()->beginFrame(web_begin_frame_args);
812 } 775 }
813 776
814 void RenderWidgetCompositor::Layout() { 777 void RenderWidgetCompositor::Layout() {
815 widget_->webwidget()->layout(); 778 widget_->webwidget()->layout();
816 779
817 if (temporary_copy_output_request_) { 780 if (temporary_copy_output_request_) {
818 DCHECK(layer_tree_host_->root_layer()); 781 DCHECK(layer_tree_host_->root_layer());
819 layer_tree_host_->root_layer()->RequestCopyOfOutput( 782 layer_tree_host_->root_layer()->RequestCopyOfOutput(
820 temporary_copy_output_request_.Pass()); 783 temporary_copy_output_request_.Pass());
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 // Convert to 32-bit microseconds first to avoid costly 64-bit division. 857 // Convert to 32-bit microseconds first to avoid costly 64-bit division.
895 int32 idle_time_in_us = idle_time.InMicroseconds(); 858 int32 idle_time_in_us = idle_time.InMicroseconds();
896 int32 idle_time_in_ms = idle_time_in_us / 1000; 859 int32 idle_time_in_ms = idle_time_in_us / 1000;
897 if (idle_time_in_ms) 860 if (idle_time_in_ms)
898 blink::mainThreadIsolate()->IdleNotification(idle_time_in_ms); 861 blink::mainThreadIsolate()->IdleNotification(idle_time_in_ms);
899 } 862 }
900 } 863 }
901 864
902 widget_->DidCommitCompositorFrame(); 865 widget_->DidCommitCompositorFrame();
903 widget_->didBecomeReadyForAdditionalInput(); 866 widget_->didBecomeReadyForAdditionalInput();
904 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 867 compositor_deps_->GetRendererScheduler()->DidCommitFrameToCompositor();
905 if (render_thread) // Can be null in tests.
906 render_thread->renderer_scheduler()->DidCommitFrameToCompositor();
907 } 868 }
908 869
909 void RenderWidgetCompositor::DidCommitAndDrawFrame() { 870 void RenderWidgetCompositor::DidCommitAndDrawFrame() {
910 widget_->didCommitAndDrawCompositorFrame(); 871 widget_->didCommitAndDrawCompositorFrame();
911 } 872 }
912 873
913 void RenderWidgetCompositor::DidCompleteSwapBuffers() { 874 void RenderWidgetCompositor::DidCompleteSwapBuffers() {
914 widget_->didCompleteSwapBuffers(); 875 widget_->didCompleteSwapBuffers();
915 if (!threaded_) 876 bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get();
877 if (!threaded)
916 widget_->OnSwapBuffersComplete(); 878 widget_->OnSwapBuffersComplete();
917 } 879 }
918 880
919 void RenderWidgetCompositor::ScheduleAnimation() { 881 void RenderWidgetCompositor::ScheduleAnimation() {
920 widget_->scheduleAnimation(); 882 widget_->scheduleAnimation();
921 } 883 }
922 884
923 void RenderWidgetCompositor::DidPostSwapBuffers() { 885 void RenderWidgetCompositor::DidPostSwapBuffers() {
924 widget_->OnSwapBuffersPosted(); 886 widget_->OnSwapBuffersPosted();
925 } 887 }
926 888
927 void RenderWidgetCompositor::DidAbortSwapBuffers() { 889 void RenderWidgetCompositor::DidAbortSwapBuffers() {
928 widget_->OnSwapBuffersAborted(); 890 widget_->OnSwapBuffersAborted();
929 } 891 }
930 892
931 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 893 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() {
932 cc::ContextProvider* provider = 894 cc::ContextProvider* provider =
933 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 895 compositor_deps_->GetSharedMainThreadContextProvider();
934 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 896 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM();
935 } 897 }
936 898
937 } // namespace content 899 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.h ('k') | content/renderer/gpu/render_widget_compositor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698