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

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

Issue 429393003: Send idle notifications to V8 after commit (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 3 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 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 #endif 408 #endif
408 409
409 compositor->Initialize(settings); 410 compositor->Initialize(settings);
410 411
411 return compositor.Pass(); 412 return compositor.Pass();
412 } 413 }
413 414
414 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 415 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget,
415 bool threaded) 416 bool threaded)
416 : threaded_(threaded), 417 : threaded_(threaded),
417 widget_(widget) { 418 widget_(widget),
419 send_v8_idle_notification_after_commit_(false) {
420 CommandLine* cmd = CommandLine::ForCurrentProcess();
421
422 if (cmd->HasSwitch(switches::kSendV8IdleNotificationAfterCommit))
423 send_v8_idle_notification_after_commit_ = true;
418 } 424 }
419 425
420 RenderWidgetCompositor::~RenderWidgetCompositor() {} 426 RenderWidgetCompositor::~RenderWidgetCompositor() {}
421 427
422 const base::WeakPtr<cc::InputHandler>& 428 const base::WeakPtr<cc::InputHandler>&
423 RenderWidgetCompositor::GetInputHandler() { 429 RenderWidgetCompositor::GetInputHandler() {
424 return layer_tree_host_->GetInputHandler(); 430 return layer_tree_host_->GetInputHandler();
425 } 431 }
426 432
427 bool RenderWidgetCompositor::BeginMainFrameRequested() const { 433 bool RenderWidgetCompositor::BeginMainFrameRequested() const {
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { 749 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) {
744 widget_->InstrumentWillBeginFrame(frame_id); 750 widget_->InstrumentWillBeginFrame(frame_id);
745 widget_->willBeginCompositorFrame(); 751 widget_->willBeginCompositorFrame();
746 } 752 }
747 753
748 void RenderWidgetCompositor::DidBeginMainFrame() { 754 void RenderWidgetCompositor::DidBeginMainFrame() {
749 widget_->InstrumentDidBeginFrame(); 755 widget_->InstrumentDidBeginFrame();
750 } 756 }
751 757
752 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { 758 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
759 begin_main_frame_time_ = args.frame_time;
760 begin_main_frame_interval_ = args.interval;
753 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF(); 761 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF();
754 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time); 762 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time);
755 widget_->webwidget()->beginFrame(web_begin_frame_args); 763 widget_->webwidget()->beginFrame(web_begin_frame_args);
756 } 764 }
757 765
758 void RenderWidgetCompositor::Layout() { 766 void RenderWidgetCompositor::Layout() {
759 widget_->webwidget()->layout(); 767 widget_->webwidget()->layout();
760 } 768 }
761 769
762 void RenderWidgetCompositor::ApplyScrollAndScale( 770 void RenderWidgetCompositor::ApplyScrollAndScale(
763 const gfx::Vector2d& scroll_delta, 771 const gfx::Vector2d& scroll_delta,
764 float page_scale) { 772 float page_scale) {
765 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); 773 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale);
766 } 774 }
767 775
768 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( 776 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface(
769 bool fallback) { 777 bool fallback) {
770 return widget_->CreateOutputSurface(fallback); 778 return widget_->CreateOutputSurface(fallback);
771 } 779 }
772 780
773 void RenderWidgetCompositor::DidInitializeOutputSurface() { 781 void RenderWidgetCompositor::DidInitializeOutputSurface() {
774 } 782 }
775 783
776 void RenderWidgetCompositor::WillCommit() { 784 void RenderWidgetCompositor::WillCommit() {
777 widget_->InstrumentWillComposite(); 785 widget_->InstrumentWillComposite();
778 } 786 }
779 787
780 void RenderWidgetCompositor::DidCommit() { 788 void RenderWidgetCompositor::DidCommit() {
789 if (send_v8_idle_notification_after_commit_) {
790 int idle_time_in_ms =
791 std::max(0L, (begin_main_frame_time_ +
792 begin_main_frame_interval_ -
793 gfx::FrameTime::Now()).InMilliseconds());
794 if (idle_time_in_ms)
795 blink::mainThreadIsolate()->IdleNotification(idle_time_in_ms);
796 }
797
781 widget_->DidCommitCompositorFrame(); 798 widget_->DidCommitCompositorFrame();
782 widget_->didBecomeReadyForAdditionalInput(); 799 widget_->didBecomeReadyForAdditionalInput();
783 } 800 }
784 801
785 void RenderWidgetCompositor::DidCommitAndDrawFrame() { 802 void RenderWidgetCompositor::DidCommitAndDrawFrame() {
786 widget_->didCommitAndDrawCompositorFrame(); 803 widget_->didCommitAndDrawCompositorFrame();
787 } 804 }
788 805
789 void RenderWidgetCompositor::DidCompleteSwapBuffers() { 806 void RenderWidgetCompositor::DidCompleteSwapBuffers() {
790 widget_->didCompleteSwapBuffers(); 807 widget_->didCompleteSwapBuffers();
(...skipping 13 matching lines...) Expand all
804 widget_->OnSwapBuffersAborted(); 821 widget_->OnSwapBuffersAborted();
805 } 822 }
806 823
807 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 824 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() {
808 cc::ContextProvider* provider = 825 cc::ContextProvider* provider =
809 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 826 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
810 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 827 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM();
811 } 828 }
812 829
813 } // namespace content 830 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698