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/common/content_switches_internal.h" | 31 #include "content/common/content_switches_internal.h" |
32 #include "content/common/gpu/client/context_provider_command_buffer.h" | 32 #include "content/common/gpu/client/context_provider_command_buffer.h" |
33 #include "content/public/common/content_switches.h" | 33 #include "content/public/common/content_switches.h" |
34 #include "content/renderer/compositor_bindings/web_layer_impl.h" | 34 #include "content/renderer/compositor_bindings/web_layer_impl.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 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
750 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { | 751 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { |
751 widget_->InstrumentWillBeginFrame(frame_id); | 752 widget_->InstrumentWillBeginFrame(frame_id); |
752 widget_->willBeginCompositorFrame(); | 753 widget_->willBeginCompositorFrame(); |
753 } | 754 } |
754 | 755 |
755 void RenderWidgetCompositor::DidBeginMainFrame() { | 756 void RenderWidgetCompositor::DidBeginMainFrame() { |
756 widget_->InstrumentDidBeginFrame(); | 757 widget_->InstrumentDidBeginFrame(); |
757 } | 758 } |
758 | 759 |
759 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { | 760 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { |
761 begin_main_frame_args_ = args; | |
760 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF(); | 762 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF(); |
761 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time); | 763 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time); |
762 widget_->webwidget()->beginFrame(web_begin_frame_args); | 764 widget_->webwidget()->beginFrame(web_begin_frame_args); |
763 } | 765 } |
764 | 766 |
765 void RenderWidgetCompositor::Layout() { | 767 void RenderWidgetCompositor::Layout() { |
766 widget_->webwidget()->layout(); | 768 widget_->webwidget()->layout(); |
767 } | 769 } |
768 | 770 |
769 void RenderWidgetCompositor::ApplyScrollAndScale( | 771 void RenderWidgetCompositor::ApplyScrollAndScale( |
770 const gfx::Vector2d& scroll_delta, | 772 const gfx::Vector2d& scroll_delta, |
771 float page_scale) { | 773 float page_scale) { |
772 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); | 774 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); |
773 } | 775 } |
774 | 776 |
775 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( | 777 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( |
776 bool fallback) { | 778 bool fallback) { |
777 return widget_->CreateOutputSurface(fallback); | 779 return widget_->CreateOutputSurface(fallback); |
778 } | 780 } |
779 | 781 |
780 void RenderWidgetCompositor::DidInitializeOutputSurface() { | 782 void RenderWidgetCompositor::DidInitializeOutputSurface() { |
781 } | 783 } |
782 | 784 |
783 void RenderWidgetCompositor::WillCommit() { | 785 void RenderWidgetCompositor::WillCommit() { |
784 widget_->InstrumentWillComposite(); | 786 widget_->InstrumentWillComposite(); |
785 } | 787 } |
786 | 788 |
787 void RenderWidgetCompositor::DidCommit() { | 789 void RenderWidgetCompositor::DidCommit() { |
790 CommandLine* cmd = CommandLine::ForCurrentProcess(); | |
791 if (cmd->HasSwitch(switches::kSendV8IdleNotificationAfterCommit)) { | |
jamesr
2014/08/20 19:38:41
grab this value once and stash it in a bool, it ca
ernstm
2014/08/21 18:22:00
Done.
| |
792 int idle_time_in_ms = | |
793 std::max(0L, (begin_main_frame_args_.frame_time + | |
794 begin_main_frame_args_.interval - | |
795 base::TimeTicks::HighResNow()).InMilliseconds()); | |
jamesr
2014/08/20 19:38:41
i was under the impression BeginFrameArgs was buil
brianderson
2014/08/20 20:07:47
James is correct. Using HighResNow() here directly
ernstm
2014/08/21 18:22:00
Done.
| |
796 if (idle_time_in_ms) | |
797 blink::mainThreadIsolate()->IdleNotification(idle_time_in_ms); | |
jamesr
2014/08/20 19:38:41
why the main thread isolate in particular? what ab
ernstm
2014/08/21 18:22:00
The goal is to reduce jank caused by GC on the mai
| |
798 } | |
799 | |
788 widget_->DidCommitCompositorFrame(); | 800 widget_->DidCommitCompositorFrame(); |
789 widget_->didBecomeReadyForAdditionalInput(); | 801 widget_->didBecomeReadyForAdditionalInput(); |
790 } | 802 } |
791 | 803 |
792 void RenderWidgetCompositor::DidCommitAndDrawFrame() { | 804 void RenderWidgetCompositor::DidCommitAndDrawFrame() { |
793 widget_->didCommitAndDrawCompositorFrame(); | 805 widget_->didCommitAndDrawCompositorFrame(); |
794 } | 806 } |
795 | 807 |
796 void RenderWidgetCompositor::DidCompleteSwapBuffers() { | 808 void RenderWidgetCompositor::DidCompleteSwapBuffers() { |
797 widget_->didCompleteSwapBuffers(); | 809 widget_->didCompleteSwapBuffers(); |
(...skipping 18 matching lines...) Expand all Loading... | |
816 widget_->OnSwapBuffersAborted(); | 828 widget_->OnSwapBuffersAborted(); |
817 } | 829 } |
818 | 830 |
819 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { | 831 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { |
820 cc::ContextProvider* provider = | 832 cc::ContextProvider* provider = |
821 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); | 833 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); |
822 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); | 834 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); |
823 } | 835 } |
824 | 836 |
825 } // namespace content | 837 } // namespace content |
OLD | NEW |