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

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

Issue 429393003: Send idle notifications to V8 after commit (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean-ups. Created 6 years, 4 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 <limits> 7 #include <limits>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 20 matching lines...) Expand all
31 #include "content/child/child_shared_bitmap_manager.h" 31 #include "content/child/child_shared_bitmap_manager.h"
32 #include "content/common/content_switches_internal.h" 32 #include "content/common/content_switches_internal.h"
33 #include "content/common/gpu/client/context_provider_command_buffer.h" 33 #include "content/common/gpu/client/context_provider_command_buffer.h"
34 #include "content/public/common/content_switches.h" 34 #include "content/public/common/content_switches.h"
35 #include "content/renderer/input/input_handler_manager.h" 35 #include "content/renderer/input/input_handler_manager.h"
36 #include "content/renderer/render_thread_impl.h" 36 #include "content/renderer/render_thread_impl.h"
37 #include "gpu/command_buffer/client/gles2_interface.h" 37 #include "gpu/command_buffer/client/gles2_interface.h"
38 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h" 38 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac k.h"
39 #include "third_party/WebKit/public/platform/WebSelectionBound.h" 39 #include "third_party/WebKit/public/platform/WebSelectionBound.h"
40 #include "third_party/WebKit/public/platform/WebSize.h" 40 #include "third_party/WebKit/public/platform/WebSize.h"
41 #include "third_party/WebKit/public/web/WebKit.h"
41 #include "third_party/WebKit/public/web/WebWidget.h" 42 #include "third_party/WebKit/public/web/WebWidget.h"
42 #include "ui/gfx/frame_time.h" 43 #include "ui/gfx/frame_time.h"
43 #include "ui/gl/gl_switches.h" 44 #include "ui/gl/gl_switches.h"
44 #include "ui/native_theme/native_theme_switches.h" 45 #include "ui/native_theme/native_theme_switches.h"
45 46
46 #if defined(OS_ANDROID) 47 #if defined(OS_ANDROID)
47 #include "content/renderer/android/synchronous_compositor_factory.h" 48 #include "content/renderer/android/synchronous_compositor_factory.h"
48 #include "ui/gfx/android/device_display_info.h" 49 #include "ui/gfx/android/device_display_info.h"
49 #endif 50 #endif
50 51
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 157
157 // static 158 // static
158 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( 159 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
159 RenderWidget* widget, 160 RenderWidget* widget,
160 bool threaded) { 161 bool threaded) {
161 scoped_ptr<RenderWidgetCompositor> compositor( 162 scoped_ptr<RenderWidgetCompositor> compositor(
162 new RenderWidgetCompositor(widget, threaded)); 163 new RenderWidgetCompositor(widget, threaded));
163 164
164 CommandLine* cmd = CommandLine::ForCurrentProcess(); 165 CommandLine* cmd = CommandLine::ForCurrentProcess();
165 166
167 if (cmd->HasSwitch(switches::kSendV8IdleNotificationAfterCommit))
168 compositor->send_v8_idle_notification_after_commit_ = true;
jamesr 2014/08/25 18:06:26 touching a private var directly is dodgy. make thi
ernstm 2014/08/25 18:25:11 I moved the check for the command line flag into t
169
166 cc::LayerTreeSettings settings; 170 cc::LayerTreeSettings settings;
167 171
168 // For web contents, layer transforms should scale up the contents of layers 172 // For web contents, layer transforms should scale up the contents of layers
169 // to keep content always crisp when possible. 173 // to keep content always crisp when possible.
170 settings.layer_transforms_should_scale_layer_contents = true; 174 settings.layer_transforms_should_scale_layer_contents = true;
171 175
172 settings.throttle_frame_production = 176 settings.throttle_frame_production =
173 !cmd->HasSwitch(switches::kDisableGpuVsync); 177 !cmd->HasSwitch(switches::kDisableGpuVsync);
174 settings.begin_frame_scheduling_enabled = 178 settings.begin_frame_scheduling_enabled =
175 cmd->HasSwitch(switches::kEnableBeginFrameScheduling); 179 cmd->HasSwitch(switches::kEnableBeginFrameScheduling);
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 409
406 compositor->Initialize(settings); 410 compositor->Initialize(settings);
407 411
408 return compositor.Pass(); 412 return compositor.Pass();
409 } 413 }
410 414
411 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 415 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget,
412 bool threaded) 416 bool threaded)
413 : threaded_(threaded), 417 : threaded_(threaded),
414 suppress_schedule_composite_(false), 418 suppress_schedule_composite_(false),
415 widget_(widget) { 419 widget_(widget),
420 send_v8_idle_notification_after_commit_(false) {
416 } 421 }
417 422
418 RenderWidgetCompositor::~RenderWidgetCompositor() {} 423 RenderWidgetCompositor::~RenderWidgetCompositor() {}
419 424
420 const base::WeakPtr<cc::InputHandler>& 425 const base::WeakPtr<cc::InputHandler>&
421 RenderWidgetCompositor::GetInputHandler() { 426 RenderWidgetCompositor::GetInputHandler() {
422 return layer_tree_host_->GetInputHandler(); 427 return layer_tree_host_->GetInputHandler();
423 } 428 }
424 429
425 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 430 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) {
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { 756 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) {
752 widget_->InstrumentWillBeginFrame(frame_id); 757 widget_->InstrumentWillBeginFrame(frame_id);
753 widget_->willBeginCompositorFrame(); 758 widget_->willBeginCompositorFrame();
754 } 759 }
755 760
756 void RenderWidgetCompositor::DidBeginMainFrame() { 761 void RenderWidgetCompositor::DidBeginMainFrame() {
757 widget_->InstrumentDidBeginFrame(); 762 widget_->InstrumentDidBeginFrame();
758 } 763 }
759 764
760 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { 765 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
766 begin_main_frame_time_ = args.frame_time;
767 begin_main_frame_interval_ = args.interval;
761 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF(); 768 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF();
762 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time); 769 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time);
763 widget_->webwidget()->beginFrame(web_begin_frame_args); 770 widget_->webwidget()->beginFrame(web_begin_frame_args);
764 } 771 }
765 772
766 void RenderWidgetCompositor::Layout() { 773 void RenderWidgetCompositor::Layout() {
767 widget_->webwidget()->layout(); 774 widget_->webwidget()->layout();
768 } 775 }
769 776
770 void RenderWidgetCompositor::ApplyScrollAndScale( 777 void RenderWidgetCompositor::ApplyScrollAndScale(
771 const gfx::Vector2d& scroll_delta, 778 const gfx::Vector2d& scroll_delta,
772 float page_scale) { 779 float page_scale) {
773 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); 780 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale);
774 } 781 }
775 782
776 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( 783 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface(
777 bool fallback) { 784 bool fallback) {
778 return widget_->CreateOutputSurface(fallback); 785 return widget_->CreateOutputSurface(fallback);
779 } 786 }
780 787
781 void RenderWidgetCompositor::DidInitializeOutputSurface() { 788 void RenderWidgetCompositor::DidInitializeOutputSurface() {
782 } 789 }
783 790
784 void RenderWidgetCompositor::WillCommit() { 791 void RenderWidgetCompositor::WillCommit() {
785 widget_->InstrumentWillComposite(); 792 widget_->InstrumentWillComposite();
786 } 793 }
787 794
788 void RenderWidgetCompositor::DidCommit() { 795 void RenderWidgetCompositor::DidCommit() {
796 if (send_v8_idle_notification_after_commit_) {
797 int idle_time_in_ms =
798 std::max(0L, (begin_main_frame_time_ +
799 begin_main_frame_interval_ -
800 gfx::FrameTime::Now()).InMilliseconds());
801 if (idle_time_in_ms)
802 blink::mainThreadIsolate()->IdleNotification(idle_time_in_ms);
803 }
804
789 widget_->DidCommitCompositorFrame(); 805 widget_->DidCommitCompositorFrame();
790 widget_->didBecomeReadyForAdditionalInput(); 806 widget_->didBecomeReadyForAdditionalInput();
791 } 807 }
792 808
793 void RenderWidgetCompositor::DidCommitAndDrawFrame() { 809 void RenderWidgetCompositor::DidCommitAndDrawFrame() {
794 widget_->didCommitAndDrawCompositorFrame(); 810 widget_->didCommitAndDrawCompositorFrame();
795 } 811 }
796 812
797 void RenderWidgetCompositor::DidCompleteSwapBuffers() { 813 void RenderWidgetCompositor::DidCompleteSwapBuffers() {
798 widget_->didCompleteSwapBuffers(); 814 widget_->didCompleteSwapBuffers();
(...skipping 18 matching lines...) Expand all
817 widget_->OnSwapBuffersAborted(); 833 widget_->OnSwapBuffersAborted();
818 } 834 }
819 835
820 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 836 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() {
821 cc::ContextProvider* provider = 837 cc::ContextProvider* provider =
822 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 838 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
823 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 839 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM();
824 } 840 }
825 841
826 } // namespace content 842 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698