Commit 08fd6530 authored by Gabriel Charette's avatar Gabriel Charette Committed by Commit Bot

Remove RenderThreadImpl dependency on MessageLoop::current().

Instead it now always has a MessageLoop* and is allowed to use APIs
which will soon no longer be exposed on MessageLoop::current().

This is a precusor cleanup extracted from
https://chromium-review.googlesource.com/c/chromium/src/+/957760/7
in the broader effort to restrict usage of MessageLoop::current().

R=haraken@chromium.org

Bug: 825327
Change-Id: I580fe360ff9630a5ffb40b89921c6889d449e67a
Reviewed-on: https://chromium-review.googlesource.com/986813
Commit-Queue: Gabriel Charette <gab@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548163}
parent 284db8b8
...@@ -47,7 +47,7 @@ void InProcessRendererThread::Init() { ...@@ -47,7 +47,7 @@ void InProcessRendererThread::Init() {
CHECK(!render_process_); CHECK(!render_process_);
#endif #endif
render_process_ = RenderProcessImpl::Create(); render_process_ = RenderProcessImpl::Create();
RenderThreadImpl::Create(params_); RenderThreadImpl::Create(params_, message_loop());
} }
void InProcessRendererThread::CleanUp() { void InProcessRendererThread::CleanUp() {
......
...@@ -670,13 +670,14 @@ bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite( ...@@ -670,13 +670,14 @@ bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite(
// static // static
RenderThreadImpl* RenderThreadImpl::Create( RenderThreadImpl* RenderThreadImpl::Create(
const InProcessChildThreadParams& params) { const InProcessChildThreadParams& params,
base::MessageLoop* unowned_message_loop) {
TRACE_EVENT0("startup", "RenderThreadImpl::Create"); TRACE_EVENT0("startup", "RenderThreadImpl::Create");
std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler = std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler =
blink::scheduler::RendererScheduler::Create(); blink::scheduler::RendererScheduler::Create();
scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; scoped_refptr<base::SingleThreadTaskRunner> test_task_counter;
return new RenderThreadImpl( return new RenderThreadImpl(params, std::move(renderer_scheduler),
params, std::move(renderer_scheduler), test_task_counter); test_task_counter, unowned_message_loop);
} }
// static // static
...@@ -733,7 +734,8 @@ RenderThreadImpl::DeprecatedGetMainTaskRunner() { ...@@ -733,7 +734,8 @@ RenderThreadImpl::DeprecatedGetMainTaskRunner() {
RenderThreadImpl::RenderThreadImpl( RenderThreadImpl::RenderThreadImpl(
const InProcessChildThreadParams& params, const InProcessChildThreadParams& params,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue,
base::MessageLoop* unowned_message_loop)
: ChildThreadImpl( : ChildThreadImpl(
Options::Builder() Options::Builder()
.InBrowserProcess(params) .InBrowserProcess(params)
...@@ -742,6 +744,7 @@ RenderThreadImpl::RenderThreadImpl( ...@@ -742,6 +744,7 @@ RenderThreadImpl::RenderThreadImpl(
.IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr) .IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr)
.Build()), .Build()),
renderer_scheduler_(std::move(scheduler)), renderer_scheduler_(std::move(scheduler)),
main_message_loop_(unowned_message_loop),
categorized_worker_pool_(new CategorizedWorkerPool()), categorized_worker_pool_(new CategorizedWorkerPool()),
renderer_binding_(this), renderer_binding_(this),
client_id_(1), client_id_(1),
...@@ -753,7 +756,7 @@ RenderThreadImpl::RenderThreadImpl( ...@@ -753,7 +756,7 @@ RenderThreadImpl::RenderThreadImpl(
// When we run plugins in process, we actually run them on the render thread, // When we run plugins in process, we actually run them on the render thread,
// which means that we need to make the render thread pump UI events. // which means that we need to make the render thread pump UI events.
RenderThreadImpl::RenderThreadImpl( RenderThreadImpl::RenderThreadImpl(
std::unique_ptr<base::MessageLoop> main_message_loop, std::unique_ptr<base::MessageLoop> owned_message_loop,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler) std::unique_ptr<blink::scheduler::RendererScheduler> scheduler)
: ChildThreadImpl( : ChildThreadImpl(
Options::Builder() Options::Builder()
...@@ -762,7 +765,8 @@ RenderThreadImpl::RenderThreadImpl( ...@@ -762,7 +765,8 @@ RenderThreadImpl::RenderThreadImpl(
.IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr) .IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr)
.Build()), .Build()),
renderer_scheduler_(std::move(scheduler)), renderer_scheduler_(std::move(scheduler)),
main_message_loop_(std::move(main_message_loop)), owned_message_loop_(std::move(owned_message_loop)),
main_message_loop_(owned_message_loop_.get()),
categorized_worker_pool_(new CategorizedWorkerPool()), categorized_worker_pool_(new CategorizedWorkerPool()),
is_scroll_animator_enabled_(false), is_scroll_animator_enabled_(false),
renderer_binding_(this), renderer_binding_(this),
...@@ -781,6 +785,10 @@ void RenderThreadImpl::Init( ...@@ -781,6 +785,10 @@ void RenderThreadImpl::Init(
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
TRACE_EVENT0("startup", "RenderThreadImpl::Init"); TRACE_EVENT0("startup", "RenderThreadImpl::Init");
// Whether owned or unowned, |main_message_loop_| needs to be initialized in
// all constructors.
DCHECK(main_message_loop_);
GetContentClient()->renderer()->PostIOThreadCreated(GetIOTaskRunner().get()); GetContentClient()->renderer()->PostIOThreadCreated(GetIOTaskRunner().get());
base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex(
...@@ -793,7 +801,7 @@ void RenderThreadImpl::Init( ...@@ -793,7 +801,7 @@ void RenderThreadImpl::Init(
#endif #endif
lazy_tls.Pointer()->Set(this); lazy_tls.Pointer()->Set(this);
g_main_task_runner.Get() = base::MessageLoop::current()->task_runner(); g_main_task_runner.Get() = main_message_loop_->task_runner();
// Register this object as the main thread. // Register this object as the main thread.
ChildProcess::current()->set_main_thread(this); ChildProcess::current()->set_main_thread(this);
...@@ -1828,7 +1836,7 @@ void RenderThreadImpl::SetProcessBackgrounded(bool backgrounded) { ...@@ -1828,7 +1836,7 @@ void RenderThreadImpl::SetProcessBackgrounded(bool backgrounded) {
base::TimerSlack timer_slack = base::TIMER_SLACK_NONE; base::TimerSlack timer_slack = base::TIMER_SLACK_NONE;
if (backgrounded) if (backgrounded)
timer_slack = base::TIMER_SLACK_MAXIMUM; timer_slack = base::TIMER_SLACK_MAXIMUM;
base::MessageLoop::current()->SetTimerSlack(timer_slack); main_message_loop_->SetTimerSlack(timer_slack);
renderer_scheduler_->SetRendererBackgrounded(backgrounded); renderer_scheduler_->SetRendererBackgrounded(backgrounded);
if (backgrounded) { if (backgrounded) {
......
...@@ -181,7 +181,8 @@ class CONTENT_EXPORT RenderThreadImpl ...@@ -181,7 +181,8 @@ class CONTENT_EXPORT RenderThreadImpl
public viz::mojom::CompositingModeWatcher, public viz::mojom::CompositingModeWatcher,
public CompositorDependencies { public CompositorDependencies {
public: public:
static RenderThreadImpl* Create(const InProcessChildThreadParams& params); static RenderThreadImpl* Create(const InProcessChildThreadParams& params,
base::MessageLoop* unowned_message_loop);
static RenderThreadImpl* Create( static RenderThreadImpl* Create(
std::unique_ptr<base::MessageLoop> main_message_loop, std::unique_ptr<base::MessageLoop> main_message_loop,
std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler); std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler);
...@@ -534,7 +535,8 @@ class CONTENT_EXPORT RenderThreadImpl ...@@ -534,7 +535,8 @@ class CONTENT_EXPORT RenderThreadImpl
RenderThreadImpl( RenderThreadImpl(
const InProcessChildThreadParams& params, const InProcessChildThreadParams& params,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue); const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue,
base::MessageLoop* unowned_message_loop);
RenderThreadImpl( RenderThreadImpl(
std::unique_ptr<base::MessageLoop> main_message_loop, std::unique_ptr<base::MessageLoop> main_message_loop,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler); std::unique_ptr<blink::scheduler::RendererScheduler> scheduler);
...@@ -707,7 +709,11 @@ class CONTENT_EXPORT RenderThreadImpl ...@@ -707,7 +709,11 @@ class CONTENT_EXPORT RenderThreadImpl
// The message loop of the renderer main thread. // The message loop of the renderer main thread.
// This message loop should be destructed before the RenderThreadImpl // This message loop should be destructed before the RenderThreadImpl
// shuts down Blink. // shuts down Blink.
std::unique_ptr<base::MessageLoop> main_message_loop_; // Some test users (e.g. InProcessRenderThread) own the MessageLoop used by
// their RenderThreadImpls. |main_message_loop_| is always non-nulll,
// |owned_message_loop_| is non-null if handed in at creation.
const std::unique_ptr<base::MessageLoop> owned_message_loop_;
base::MessageLoop* const main_message_loop_;
// May be null if overridden by ContentRendererClient. // May be null if overridden by ContentRendererClient.
std::unique_ptr<blink::scheduler::WebThreadBase> compositor_thread_; std::unique_ptr<blink::scheduler::WebThreadBase> compositor_thread_;
......
...@@ -6,17 +6,22 @@ ...@@ -6,17 +6,22 @@
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
#include <memory>
#include <utility> #include <utility>
#include "base/callback.h" #include "base/callback.h"
#include "base/command_line.h" #include "base/command_line.h"
#include "base/debug/leak_annotations.h" #include "base/debug/leak_annotations.h"
#include "base/location.h" #include "base/location.h"
#include "base/macros.h"
#include "base/memory/discardable_memory.h" #include "base/memory/discardable_memory.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/field_trial.h" #include "base/metrics/field_trial.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/task_scheduler/task_scheduler.h"
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/sequenced_task_runner_handle.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
...@@ -128,8 +133,12 @@ class RenderThreadImplForTest : public RenderThreadImpl { ...@@ -128,8 +133,12 @@ class RenderThreadImplForTest : public RenderThreadImpl {
RenderThreadImplForTest( RenderThreadImplForTest(
const InProcessChildThreadParams& params, const InProcessChildThreadParams& params,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
scoped_refptr<base::SingleThreadTaskRunner>& test_task_counter) scoped_refptr<base::SingleThreadTaskRunner>& test_task_counter,
: RenderThreadImpl(params, std::move(scheduler), test_task_counter) {} base::MessageLoop* unowned_message_loop)
: RenderThreadImpl(params,
std::move(scheduler),
test_task_counter,
unowned_message_loop) {}
~RenderThreadImplForTest() override {} ~RenderThreadImplForTest() override {}
}; };
...@@ -166,12 +175,34 @@ class QuitOnTestMsgFilter : public IPC::MessageFilter { ...@@ -166,12 +175,34 @@ class QuitOnTestMsgFilter : public IPC::MessageFilter {
class RenderThreadImplBrowserTest : public testing::Test { class RenderThreadImplBrowserTest : public testing::Test {
public: public:
// Managing our own main MessageLoop also forces us to manage our own
// TaskScheduler. This ensures a basic TaskScheduler is in scope during this
// test.
class TestTaskScheduler {
public:
TestTaskScheduler() {
base::TaskScheduler::CreateAndStartWithDefaultParams(
"RenderThreadImplBrowserTest");
}
~TestTaskScheduler() {
base::TaskScheduler::GetInstance()->Shutdown();
base::TaskScheduler::GetInstance()->JoinForTesting();
base::TaskScheduler::SetInstance(nullptr);
}
private:
DISALLOW_COPY_AND_ASSIGN(TestTaskScheduler);
};
RenderThreadImplBrowserTest() : field_trial_list_(nullptr) {} RenderThreadImplBrowserTest() : field_trial_list_(nullptr) {}
void SetUp() override { void SetUp() override {
content_renderer_client_.reset(new ContentRendererClient()); content_renderer_client_.reset(new ContentRendererClient());
SetRendererClientForTesting(content_renderer_client_.get()); SetRendererClientForTesting(content_renderer_client_.get());
main_message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_IO));
test_task_scheduler_.reset(new TestTaskScheduler);
browser_threads_.reset( browser_threads_.reset(
new TestBrowserThreadBundle(TestBrowserThreadBundle::IO_MAINLOOP)); new TestBrowserThreadBundle(TestBrowserThreadBundle::IO_MAINLOOP));
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner = scoped_refptr<base::SingleThreadTaskRunner> io_task_runner =
...@@ -227,7 +258,8 @@ class RenderThreadImplBrowserTest : public testing::Test { ...@@ -227,7 +258,8 @@ class RenderThreadImplBrowserTest : public testing::Test {
thread_ = new RenderThreadImplForTest( thread_ = new RenderThreadImplForTest(
InProcessChildThreadParams(io_task_runner, &invitation, InProcessChildThreadParams(io_task_runner, &invitation,
child_connection_->service_token()), child_connection_->service_token()),
std::move(renderer_scheduler), test_task_counter); std::move(renderer_scheduler), test_task_counter,
main_message_loop_.get());
cmd->InitFromArgv(old_argv); cmd->InitFromArgv(old_argv);
run_loop_ = std::make_unique<base::RunLoop>(); run_loop_ = std::make_unique<base::RunLoop>();
...@@ -247,12 +279,15 @@ class RenderThreadImplBrowserTest : public testing::Test { ...@@ -247,12 +279,15 @@ class RenderThreadImplBrowserTest : public testing::Test {
} }
} }
protected:
IPC::Sender* sender() { return channel_.get(); } IPC::Sender* sender() { return channel_.get(); }
scoped_refptr<TestTaskCounter> test_task_counter_; scoped_refptr<TestTaskCounter> test_task_counter_;
TestContentClientInitializer content_client_initializer_; TestContentClientInitializer content_client_initializer_;
std::unique_ptr<ContentRendererClient> content_renderer_client_; std::unique_ptr<ContentRendererClient> content_renderer_client_;
std::unique_ptr<base::MessageLoop> main_message_loop_;
std::unique_ptr<TestTaskScheduler> test_task_scheduler_;
std::unique_ptr<TestBrowserThreadBundle> browser_threads_; std::unique_ptr<TestBrowserThreadBundle> browser_threads_;
std::unique_ptr<TestServiceManagerContext> shell_context_; std::unique_ptr<TestServiceManagerContext> shell_context_;
std::unique_ptr<ChildConnection> child_connection_; std::unique_ptr<ChildConnection> child_connection_;
...@@ -266,6 +301,9 @@ class RenderThreadImplBrowserTest : public testing::Test { ...@@ -266,6 +301,9 @@ class RenderThreadImplBrowserTest : public testing::Test {
base::FieldTrialList field_trial_list_; base::FieldTrialList field_trial_list_;
std::unique_ptr<base::RunLoop> run_loop_; std::unique_ptr<base::RunLoop> run_loop_;
private:
DISALLOW_COPY_AND_ASSIGN(RenderThreadImplBrowserTest);
}; };
class RenderThreadImplMojoInputMessagesDisabledBrowserTest class RenderThreadImplMojoInputMessagesDisabledBrowserTest
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment