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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
166 cc::LayerTreeSettings settings; | 167 cc::LayerTreeSettings settings; |
167 | 168 |
168 // For web contents, layer transforms should scale up the contents of layers | 169 // For web contents, layer transforms should scale up the contents of layers |
169 // to keep content always crisp when possible. | 170 // to keep content always crisp when possible. |
170 settings.layer_transforms_should_scale_layer_contents = true; | 171 settings.layer_transforms_should_scale_layer_contents = true; |
171 | 172 |
172 settings.throttle_frame_production = | 173 settings.throttle_frame_production = |
173 !cmd->HasSwitch(switches::kDisableGpuVsync); | 174 !cmd->HasSwitch(switches::kDisableGpuVsync); |
174 settings.begin_frame_scheduling_enabled = | 175 settings.begin_frame_scheduling_enabled = |
175 cmd->HasSwitch(switches::kEnableBeginFrameScheduling); | 176 cmd->HasSwitch(switches::kEnableBeginFrameScheduling); |
177 settings.send_v8_idle_notification_after_commit = | |
jamesr
2014/08/18 23:23:49
you're setting this here in content/renderer/...
| |
178 cmd->HasSwitch(cc::switches::kSendV8IdleNotificationAfterCommit); | |
176 settings.main_frame_before_activation_enabled = | 179 settings.main_frame_before_activation_enabled = |
177 cmd->HasSwitch(cc::switches::kEnableMainFrameBeforeActivation) && | 180 cmd->HasSwitch(cc::switches::kEnableMainFrameBeforeActivation) && |
178 !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeActivation); | 181 !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeActivation); |
179 settings.main_frame_before_draw_enabled = | 182 settings.main_frame_before_draw_enabled = |
180 !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeDraw); | 183 !cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeDraw); |
181 settings.report_overscroll_only_for_scrollable_axes = true; | 184 settings.report_overscroll_only_for_scrollable_axes = true; |
182 settings.accelerated_animation_enabled = | 185 settings.accelerated_animation_enabled = |
183 !cmd->HasSwitch(cc::switches::kDisableThreadedAnimation); | 186 !cmd->HasSwitch(cc::switches::kDisableThreadedAnimation); |
184 | 187 |
185 settings.default_tile_size = CalculateDefaultTileSize(); | 188 settings.default_tile_size = CalculateDefaultTileSize(); |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
750 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { | 753 void RenderWidgetCompositor::WillBeginMainFrame(int frame_id) { |
751 widget_->InstrumentWillBeginFrame(frame_id); | 754 widget_->InstrumentWillBeginFrame(frame_id); |
752 widget_->willBeginCompositorFrame(); | 755 widget_->willBeginCompositorFrame(); |
753 } | 756 } |
754 | 757 |
755 void RenderWidgetCompositor::DidBeginMainFrame() { | 758 void RenderWidgetCompositor::DidBeginMainFrame() { |
756 widget_->InstrumentDidBeginFrame(); | 759 widget_->InstrumentDidBeginFrame(); |
757 } | 760 } |
758 | 761 |
759 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { | 762 void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) { |
763 begin_main_frame_args_ = args; | |
760 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF(); | 764 double frame_time = (args.frame_time - base::TimeTicks()).InSecondsF(); |
761 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time); | 765 WebBeginFrameArgs web_begin_frame_args = WebBeginFrameArgs(frame_time); |
762 widget_->webwidget()->beginFrame(web_begin_frame_args); | 766 widget_->webwidget()->beginFrame(web_begin_frame_args); |
763 } | 767 } |
764 | 768 |
765 void RenderWidgetCompositor::Layout() { | 769 void RenderWidgetCompositor::Layout() { |
766 widget_->webwidget()->layout(); | 770 widget_->webwidget()->layout(); |
767 } | 771 } |
768 | 772 |
769 void RenderWidgetCompositor::ApplyScrollAndScale( | 773 void RenderWidgetCompositor::ApplyScrollAndScale( |
770 const gfx::Vector2d& scroll_delta, | 774 const gfx::Vector2d& scroll_delta, |
771 float page_scale) { | 775 float page_scale) { |
772 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); | 776 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale); |
773 } | 777 } |
774 | 778 |
775 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( | 779 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::CreateOutputSurface( |
776 bool fallback) { | 780 bool fallback) { |
777 return widget_->CreateOutputSurface(fallback); | 781 return widget_->CreateOutputSurface(fallback); |
778 } | 782 } |
779 | 783 |
780 void RenderWidgetCompositor::DidInitializeOutputSurface() { | 784 void RenderWidgetCompositor::DidInitializeOutputSurface() { |
781 } | 785 } |
782 | 786 |
783 void RenderWidgetCompositor::WillCommit() { | 787 void RenderWidgetCompositor::WillCommit() { |
784 widget_->InstrumentWillComposite(); | 788 widget_->InstrumentWillComposite(); |
785 } | 789 } |
786 | 790 |
787 void RenderWidgetCompositor::DidCommit() { | 791 void RenderWidgetCompositor::DidCommit() { |
792 int idle_time_for_gc = | |
793 std::max(0L, (begin_main_frame_args_.frame_time + | |
794 begin_main_frame_args_.interval - | |
795 base::TimeTicks::HighResNow()).InMilliseconds()); | |
796 if (layer_tree_host_->settings().send_v8_idle_notification_after_commit && | |
jamesr
2014/08/18 23:23:49
... and then querying it again here, in the same o
ernstm
2014/08/18 23:46:34
Done.
| |
797 idle_time_for_gc) | |
798 blink::mainThreadIsolate()->IdleNotification(idle_time_for_gc); | |
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 |