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

Unified Diff: content/renderer/gpu/render_widget_compositor.cc

Issue 801973002: Introduce CompositorDependencies for RenderWidgetCompositor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: compdep: . Created 6 years 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/gpu/render_widget_compositor.cc
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index 4ffa32b5036361345d22c2458877cd1b410c6cc0..e46c83e64ea34a27154cdd374f8bf570d69e6f8b 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -27,15 +27,12 @@
#include "cc/output/copy_output_request.h"
#include "cc/output/copy_output_result.h"
#include "cc/resources/single_release_callback.h"
+#include "cc/scheduler/begin_frame_source.h"
#include "cc/trees/layer_tree_host.h"
-#include "content/child/child_gpu_memory_buffer_manager.h"
-#include "content/child/child_shared_bitmap_manager.h"
#include "content/common/content_switches_internal.h"
#include "content/common/gpu/client/context_provider_command_buffer.h"
#include "content/public/common/content_switches.h"
-#include "content/renderer/gpu/compositor_external_begin_frame_source.h"
#include "content/renderer/input/input_handler_manager.h"
-#include "content/renderer/render_thread_impl.h"
#include "content/renderer/scheduler/renderer_scheduler.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h"
@@ -162,10 +159,30 @@ gfx::Size CalculateDefaultTileSize() {
// static
scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
RenderWidget* widget,
- bool threaded) {
+ CompositorDependencies* compositor_deps) {
scoped_ptr<RenderWidgetCompositor> compositor(
- new RenderWidgetCompositor(widget, threaded));
+ new RenderWidgetCompositor(widget, compositor_deps));
+ compositor->Initialize();
+ return compositor;
+}
+
+RenderWidgetCompositor::RenderWidgetCompositor(
+ RenderWidget* widget,
+ CompositorDependencies* compositor_deps)
+ : num_failed_recreate_attempts_(0),
+ widget_(widget),
+ compositor_deps_(compositor_deps),
+ send_v8_idle_notification_after_commit_(true),
+ weak_factory_(this) {
+ CommandLine* cmd = CommandLine::ForCurrentProcess();
+
+ if (cmd->HasSwitch(switches::kEnableV8IdleNotificationAfterCommit))
+ send_v8_idle_notification_after_commit_ = true;
+ if (cmd->HasSwitch(switches::kDisableV8IdleNotificationAfterCommit))
+ send_v8_idle_notification_after_commit_ = false;
+}
+void RenderWidgetCompositor::Initialize() {
CommandLine* cmd = CommandLine::ForCurrentProcess();
cc::LayerTreeSettings settings;
@@ -222,23 +239,17 @@ scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
settings.max_untiled_layer_size = gfx::Size(max_untiled_layer_width,
max_untiled_layer_height);
- RenderThreadImpl* render_thread = RenderThreadImpl::current();
- // render_thread may be NULL in tests.
- if (render_thread) {
- settings.impl_side_painting =
- render_thread->is_impl_side_painting_enabled();
- settings.gpu_rasterization_forced =
- render_thread->is_gpu_rasterization_forced();
- settings.gpu_rasterization_enabled =
- render_thread->is_gpu_rasterization_enabled();
- settings.can_use_lcd_text = render_thread->is_lcd_text_enabled();
- settings.use_distance_field_text =
- render_thread->is_distance_field_text_enabled();
- settings.use_zero_copy = render_thread->is_zero_copy_enabled();
- settings.use_one_copy = render_thread->is_one_copy_enabled();
- settings.use_image_texture_target =
- render_thread->use_image_texture_target();
- }
+ settings.impl_side_painting = compositor_deps_->IsImplSidePaintingEnabled();
+ settings.gpu_rasterization_forced =
+ compositor_deps_->IsGpuRasterizationForced();
+ settings.gpu_rasterization_enabled =
+ compositor_deps_->IsGpuRasterizationEnabled();
+ settings.can_use_lcd_text = compositor_deps_->IsLcdTextEnabled();
+ settings.use_distance_field_text =
+ compositor_deps_->IsDistanceFieldTextEnabled();
+ settings.use_zero_copy = compositor_deps_->IsZeroCopyEnabled();
+ settings.use_one_copy = compositor_deps_->IsOneCopyEnabled();
+ settings.use_image_texture_target = compositor_deps_->GetImageTextureTarget();
settings.calculate_top_controls_position =
cmd->HasSwitch(cc::switches::kEnableTopControlsPositionCalculation);
@@ -337,7 +348,7 @@ scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
settings.gpu_rasterization_enabled = false;
settings.using_synchronous_renderer_compositor =
synchronous_compositor_factory;
- settings.record_full_layer = widget->DoesRecordFullLayer();
+ settings.record_full_layer = widget_->DoesRecordFullLayer();
settings.report_overscroll_only_for_scrollable_axes =
!synchronous_compositor_factory;
settings.max_partial_texture_updates = 0;
@@ -402,24 +413,33 @@ scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
if (cmd->HasSwitch(switches::kDisableLowResTiling))
settings.create_low_res_tiling = false;
- compositor->Initialize(settings);
-
- return compositor.Pass();
-}
+ scoped_refptr<base::SingleThreadTaskRunner> compositor_thread_task_runner =
+ compositor_deps_->GetCompositorImplThreadTaskRunner();
+ scoped_refptr<base::SingleThreadTaskRunner>
+ main_thread_compositor_task_runner =
+ compositor_deps_->GetCompositorMainThreadTaskRunner();
+ cc::SharedBitmapManager* shared_bitmap_manager =
+ compositor_deps_->GetSharedBitmapManager();
+ gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager =
+ compositor_deps_->GetGpuMemoryBufferManager();
-RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget,
- bool threaded)
- : num_failed_recreate_attempts_(0),
- threaded_(threaded),
- widget_(widget),
- send_v8_idle_notification_after_commit_(true),
- weak_factory_(this) {
- CommandLine* cmd = CommandLine::ForCurrentProcess();
+ scoped_ptr<cc::BeginFrameSource> external_begin_frame_source;
+ if (settings.use_external_begin_frame_source) {
+ external_begin_frame_source =
+ compositor_deps_->CreateExternalBeginFrameSource(widget_->routing_id());
+ }
- if (cmd->HasSwitch(switches::kEnableV8IdleNotificationAfterCommit))
- send_v8_idle_notification_after_commit_ = true;
- if (cmd->HasSwitch(switches::kDisableV8IdleNotificationAfterCommit))
- send_v8_idle_notification_after_commit_ = false;
+ if (compositor_thread_task_runner.get()) {
+ layer_tree_host_ = cc::LayerTreeHost::CreateThreaded(
+ this, shared_bitmap_manager, gpu_memory_buffer_manager, settings,
+ main_thread_compositor_task_runner, compositor_thread_task_runner,
+ external_begin_frame_source.Pass());
+ } else {
+ layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
+ this, this, shared_bitmap_manager, gpu_memory_buffer_manager, settings,
+ main_thread_compositor_task_runner, external_begin_frame_source.Pass());
+ }
+ DCHECK(layer_tree_host_);
}
RenderWidgetCompositor::~RenderWidgetCompositor() {}
@@ -515,64 +535,8 @@ bool RenderWidgetCompositor::SendMessageToMicroBenchmark(
return layer_tree_host_->SendMessageToMicroBenchmark(id, value.Pass());
}
-void RenderWidgetCompositor::Initialize(const cc::LayerTreeSettings& settings) {
- scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy;
- scoped_refptr<base::SingleThreadTaskRunner>
- main_thread_compositor_task_runner(base::MessageLoopProxy::current());
- RenderThreadImpl* render_thread = RenderThreadImpl::current();
- cc::SharedBitmapManager* shared_bitmap_manager = NULL;
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = NULL;
- // render_thread may be NULL in tests.
- if (render_thread) {
- compositor_message_loop_proxy =
- render_thread->compositor_message_loop_proxy();
- shared_bitmap_manager = render_thread->shared_bitmap_manager();
- gpu_memory_buffer_manager = render_thread->gpu_memory_buffer_manager();
- main_thread_compositor_task_runner =
- render_thread->main_thread_compositor_task_runner();
- }
- scoped_ptr<cc::BeginFrameSource> external_begin_frame_source;
-#if defined(OS_ANDROID)
- if (SynchronousCompositorFactory* factory =
- SynchronousCompositorFactory::GetInstance()) {
- DCHECK(settings.use_external_begin_frame_source);
- external_begin_frame_source =
- factory->CreateExternalBeginFrameSource(widget_->routing_id());
- }
-#endif
- if (render_thread &&
- !external_begin_frame_source.get() &&
- settings.use_external_begin_frame_source) {
- external_begin_frame_source.reset(new CompositorExternalBeginFrameSource(
- widget_->routing_id()));
- }
- if (compositor_message_loop_proxy.get()) {
- layer_tree_host_ =
- cc::LayerTreeHost::CreateThreaded(this,
- shared_bitmap_manager,
- gpu_memory_buffer_manager,
- settings,
- main_thread_compositor_task_runner,
- compositor_message_loop_proxy,
- external_begin_frame_source.Pass());
- } else {
- layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
- this,
- this,
- shared_bitmap_manager,
- gpu_memory_buffer_manager,
- settings,
- main_thread_compositor_task_runner,
- external_begin_frame_source.Pass());
- }
- DCHECK(layer_tree_host_);
-}
-
void RenderWidgetCompositor::setSurfaceReady() {
- // In tests without a RenderThreadImpl, don't set ready as this kicks
- // off creating output surfaces that the test can't create.
- if (RenderThreadImpl::current())
- layer_tree_host_->SetLayerTreeHostClientReady();
+ layer_tree_host_->SetLayerTreeHostClientReady();
}
void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) {
@@ -736,7 +700,8 @@ void RenderWidgetCompositor::compositeAndReadbackAsync(
// Force a commit to happen. The temporary copy output request will
// be installed after layout which will happen as a part of the commit, when
// there is guaranteed to be a root layer.
- if (!threaded_ &&
+ bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get();
+ if (!threaded &&
!layer_tree_host_->settings().single_thread_proxy_scheduler) {
layer_tree_host_->Composite(gfx::FrameTime::Now());
} else {
@@ -805,9 +770,7 @@ void RenderWidgetCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
double interval_sec = args.interval.InSecondsF();
WebBeginFrameArgs web_begin_frame_args =
WebBeginFrameArgs(frame_time_sec, deadline_sec, interval_sec);
- RenderThreadImpl* render_thread = RenderThreadImpl::current();
- if (render_thread) // Can be null in tests.
- render_thread->renderer_scheduler()->WillBeginFrame(args);
+ compositor_deps_->GetRendererScheduler()->WillBeginFrame(args);
widget_->webwidget()->beginFrame(web_begin_frame_args);
}
@@ -901,9 +864,7 @@ void RenderWidgetCompositor::DidCommit() {
widget_->DidCommitCompositorFrame();
widget_->didBecomeReadyForAdditionalInput();
- RenderThreadImpl* render_thread = RenderThreadImpl::current();
- if (render_thread) // Can be null in tests.
- render_thread->renderer_scheduler()->DidCommitFrameToCompositor();
+ compositor_deps_->GetRendererScheduler()->DidCommitFrameToCompositor();
}
void RenderWidgetCompositor::DidCommitAndDrawFrame() {
@@ -912,7 +873,8 @@ void RenderWidgetCompositor::DidCommitAndDrawFrame() {
void RenderWidgetCompositor::DidCompleteSwapBuffers() {
widget_->didCompleteSwapBuffers();
- if (!threaded_)
+ bool threaded = !!compositor_deps_->GetCompositorImplThreadTaskRunner().get();
+ if (!threaded)
widget_->OnSwapBuffersComplete();
}
@@ -930,7 +892,7 @@ void RenderWidgetCompositor::DidAbortSwapBuffers() {
void RenderWidgetCompositor::RateLimitSharedMainThreadContext() {
cc::ContextProvider* provider =
- RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
+ compositor_deps_->GetSharedMainThreadContextProvider();
provider->ContextGL()->RateLimitOffscreenContextCHROMIUM();
}
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.h ('k') | content/renderer/gpu/render_widget_compositor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698