Chromium Code Reviews| 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 |