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