Commit 97a8683a authored by rockot's avatar rockot Committed by Commit bot

Fix data race in RenderThreadImplBrowserTest

Use ThreadTaskRunnerHandle instead of BrowserThread::GetTaskRunnerForThread.
This avoids a data race in shutdown due to the fact that RendererScheduler
(used on a BrowserThread in this test) tramples the MessageLoop's TaskRunner
in a manner BrowserThreadImpl's TaskRunner facade does not anticipate.

Also opportunistically corrects some non-const ref arguments in
RenderThreadImpl.

BUG=672812

Review-Url: https://codereview.chromium.org/2568543002
Cr-Commit-Position: refs/heads/master@{#437755}
parent 5e14f367
......@@ -600,7 +600,7 @@ void RenderThreadImpl::SetRenderMessageFilterForTesting(
RenderThreadImpl::RenderThreadImpl(
const InProcessChildThreadParams& params,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue)
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue)
: ChildThreadImpl(Options::Builder()
.InBrowserProcess(params)
.AutoStartServiceManagerConnection(false)
......@@ -636,7 +636,7 @@ RenderThreadImpl::RenderThreadImpl(
}
void RenderThreadImpl::Init(
scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
TRACE_EVENT0("startup", "RenderThreadImpl::Init");
base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex(
......@@ -1231,7 +1231,7 @@ void RenderThreadImpl::InitializeCompositorThread() {
}
void RenderThreadImpl::InitializeWebKit(
scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
DCHECK(!blink_platform_impl_);
const base::CommandLine& command_line =
......
......@@ -486,7 +486,7 @@ class CONTENT_EXPORT RenderThreadImpl
RenderThreadImpl(
const InProcessChildThreadParams& params,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue);
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue);
RenderThreadImpl(
std::unique_ptr<base::MessageLoop> main_message_loop,
std::unique_ptr<blink::scheduler::RendererScheduler> scheduler);
......@@ -517,12 +517,13 @@ class CONTENT_EXPORT RenderThreadImpl
void ClearMemory();
void Init(scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue);
void Init(
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue);
void InitializeCompositorThread();
void InitializeWebKit(
scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue);
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue);
void OnTransferBitmap(const SkBitmap& bitmap, int resource_id);
void OnGetAccessibilityTree();
......
......@@ -127,13 +127,6 @@ class RenderThreadImplForTest : public RenderThreadImpl {
~RenderThreadImplForTest() override {}
};
class DummyListener : public IPC::Listener {
public:
~DummyListener() override {}
bool OnMessageReceived(const IPC::Message& message) override { return true; }
};
#if defined(COMPILER_MSVC)
#pragma warning(pop)
#endif
......@@ -181,7 +174,7 @@ class RenderThreadImplBrowserTest : public testing::Test {
browser_threads_.reset(
new TestBrowserThreadBundle(TestBrowserThreadBundle::IO_MAINLOOP));
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner =
BrowserThread::GetTaskRunnerForThread(BrowserThread::IO);
base::ThreadTaskRunnerHandle::Get();
InitializeMojo();
ipc_support_.reset(new mojo::edk::test::ScopedIPCSupport(io_task_runner));
......@@ -195,11 +188,10 @@ class RenderThreadImplBrowserTest : public testing::Test {
IPC::mojom::ChannelBootstrapPtr channel_bootstrap;
child_connection_->GetRemoteInterfaces()->GetInterface(&channel_bootstrap);
dummy_listener_.reset(new DummyListener);
channel_ = IPC::ChannelProxy::Create(
IPC::ChannelMojo::CreateServerFactory(
channel_bootstrap.PassInterface().PassHandle(), io_task_runner),
dummy_listener_.get(), io_task_runner);
nullptr, io_task_runner);
mock_process_.reset(new MockRenderProcess);
test_task_counter_ = make_scoped_refptr(new TestTaskCounter());
......@@ -239,7 +231,6 @@ class RenderThreadImplBrowserTest : public testing::Test {
std::unique_ptr<mojo::edk::test::ScopedIPCSupport> ipc_support_;
std::unique_ptr<TestServiceManagerContext> shell_context_;
std::unique_ptr<ChildConnection> child_connection_;
std::unique_ptr<DummyListener> dummy_listener_;
std::unique_ptr<IPC::ChannelProxy> channel_;
std::unique_ptr<MockRenderProcess> mock_process_;
......
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