Commit 9969398c authored by Greg Kraynov's avatar Greg Kraynov Committed by Commit Bot

Update ThreadControllerWithMessagePumpImpl constructor.

Now it registers thread as a sequence and accepts MessagePump
as a constructor argument.

Bug: 828835
Change-Id: Ibbfd674a5c7f739e30baaa8a026e30827d521a87
Reviewed-on: https://chromium-review.googlesource.com/1167482Reviewed-by: default avatarAlex Clarke <alexclarke@chromium.org>
Commit-Queue: Greg Kraynov <kraynov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#581835}
parent f10ef154
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/memory/ref_counted_memory.h" #include "base/memory/ref_counted_memory.h"
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/message_loop/message_loop_current.h" #include "base/message_loop/message_loop_current.h"
#include "base/message_loop/message_pump_default.h"
#include "base/optional.h" #include "base/optional.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"
...@@ -177,7 +178,8 @@ class SequenceManagerTestWithMessageLoop : public SequenceManagerTestBase { ...@@ -177,7 +178,8 @@ class SequenceManagerTestWithMessageLoop : public SequenceManagerTestBase {
mock_clock_.Advance(TimeDelta::FromMilliseconds(1)); mock_clock_.Advance(TimeDelta::FromMilliseconds(1));
start_time_ = mock_clock_.NowTicks(); start_time_ = mock_clock_.NowTicks();
manager_ = SequenceManagerForTest::Create( manager_ = SequenceManagerForTest::Create(
std::make_unique<ThreadControllerWithMessagePumpImpl>(&mock_clock_)); std::make_unique<ThreadControllerWithMessagePumpImpl>(
std::make_unique<MessagePumpDefault>(), &mock_clock_));
// ThreadControllerWithMessagePumpImpl doesn't provide a default tas runner. // ThreadControllerWithMessagePumpImpl doesn't provide a default tas runner.
scoped_refptr<TaskQueue> default_task_queue = scoped_refptr<TaskQueue> default_task_queue =
manager_->CreateTaskQueue<TestTaskQueue>(TaskQueue::Spec("default")); manager_->CreateTaskQueue<TestTaskQueue>(TaskQueue::Spec("default"));
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/message_loop/message_pump_default.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/stringprintf.h" #include "base/strings/stringprintf.h"
...@@ -101,6 +102,7 @@ class SequenceManagerPerfTest : public testing::TestWithParam<PerfTestType> { ...@@ -101,6 +102,7 @@ class SequenceManagerPerfTest : public testing::TestWithParam<PerfTestType> {
void CreateSequenceManagerWithMessagePump() { void CreateSequenceManagerWithMessagePump() {
manager_ = SequenceManagerForTest::Create( manager_ = SequenceManagerForTest::Create(
std::make_unique<internal::ThreadControllerWithMessagePumpImpl>( std::make_unique<internal::ThreadControllerWithMessagePumpImpl>(
std::make_unique<MessagePumpDefault>(),
DefaultTickClock::GetInstance())); DefaultTickClock::GetInstance()));
// ThreadControllerWithMessagePumpImpl doesn't provide a default tas runner. // ThreadControllerWithMessagePumpImpl doesn't provide a default tas runner.
scoped_refptr<TaskQueue> default_task_queue = scoped_refptr<TaskQueue> default_task_queue =
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include "base/task/sequence_manager/thread_controller_with_message_pump_impl.h" #include "base/task/sequence_manager/thread_controller_with_message_pump_impl.h"
#include "base/auto_reset.h" #include "base/auto_reset.h"
#include "base/message_loop/message_pump_default.h"
#include "base/time/tick_clock.h" #include "base/time/tick_clock.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
...@@ -14,16 +13,22 @@ namespace sequence_manager { ...@@ -14,16 +13,22 @@ namespace sequence_manager {
namespace internal { namespace internal {
ThreadControllerWithMessagePumpImpl::ThreadControllerWithMessagePumpImpl( ThreadControllerWithMessagePumpImpl::ThreadControllerWithMessagePumpImpl(
std::unique_ptr<MessagePump> message_pump,
const TickClock* time_source) const TickClock* time_source)
: associated_thread_(AssociatedThreadId::CreateUnbound()), : associated_thread_(AssociatedThreadId::CreateUnbound()),
pump_(new MessagePumpDefault()), pump_(std::move(message_pump)),
time_source_(time_source) { time_source_(time_source) {
scoped_set_sequence_local_storage_map_for_current_thread_ = std::make_unique<
base::internal::ScopedSetSequenceLocalStorageMapForCurrentThread>(
&sequence_local_storage_map_);
RunLoop::RegisterDelegateForCurrentThread(this); RunLoop::RegisterDelegateForCurrentThread(this);
} }
ThreadControllerWithMessagePumpImpl::~ThreadControllerWithMessagePumpImpl() { ThreadControllerWithMessagePumpImpl::~ThreadControllerWithMessagePumpImpl() {
// Destructors of RunLoop::Delegate and ThreadTaskRunnerHandle // Destructors of RunLoop::Delegate and ThreadTaskRunnerHandle
// will do all the clean-up. // will do all the clean-up.
// ScopedSetSequenceLocalStorageMapForCurrentThread destructor will
// de-register the current thread as a sequence.
} }
ThreadControllerWithMessagePumpImpl::MainThreadOnly::MainThreadOnly() = default; ThreadControllerWithMessagePumpImpl::MainThreadOnly::MainThreadOnly() = default;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/task/sequence_manager/sequenced_task_source.h" #include "base/task/sequence_manager/sequenced_task_source.h"
#include "base/task/sequence_manager/thread_controller.h" #include "base/task/sequence_manager/thread_controller.h"
#include "base/threading/platform_thread.h" #include "base/threading/platform_thread.h"
#include "base/threading/sequence_local_storage_map.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
namespace base { namespace base {
...@@ -27,7 +28,8 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl ...@@ -27,7 +28,8 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl
public MessagePump::Delegate, public MessagePump::Delegate,
public RunLoop::Delegate { public RunLoop::Delegate {
public: public:
explicit ThreadControllerWithMessagePumpImpl(const TickClock* time_source); ThreadControllerWithMessagePumpImpl(std::unique_ptr<MessagePump> message_pump,
const TickClock* time_source);
~ThreadControllerWithMessagePumpImpl() override; ~ThreadControllerWithMessagePumpImpl() override;
// ThreadController implementation: // ThreadController implementation:
...@@ -102,6 +104,12 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl ...@@ -102,6 +104,12 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl
debug::TaskAnnotator task_annotator_; debug::TaskAnnotator task_annotator_;
const TickClock* time_source_; // Not owned. const TickClock* time_source_; // Not owned.
// Required to register the current thread as a sequence.
base::internal::SequenceLocalStorageMap sequence_local_storage_map_;
std::unique_ptr<
base::internal::ScopedSetSequenceLocalStorageMapForCurrentThread>
scoped_set_sequence_local_storage_map_for_current_thread_;
DISALLOW_COPY_AND_ASSIGN(ThreadControllerWithMessagePumpImpl); DISALLOW_COPY_AND_ASSIGN(ThreadControllerWithMessagePumpImpl);
}; };
......
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