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

Side by Side Diff: base/test/scoped_task_scheduler.cc

Issue 2823103003: Introduce TaskRunner::RunsTasksInCurrentSequence() (Closed)
Patch Set: rebase & remove inline keyword Created 3 years, 7 months 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 unified diff | Download patch
« no previous file with comments | « base/test/null_task_runner.cc ('k') | base/test/test_mock_time_task_runner.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/test/scoped_task_scheduler.h" 5 #include "base/test/scoped_task_scheduler.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 // Posts |task| to this TaskScheduler with |sequence_token|. Returns true on 75 // Posts |task| to this TaskScheduler with |sequence_token|. Returns true on
76 // success. 76 // success.
77 bool PostTask(std::unique_ptr<internal::Task> task, 77 bool PostTask(std::unique_ptr<internal::Task> task,
78 const SequenceToken& sequence_token); 78 const SequenceToken& sequence_token);
79 79
80 // Runs |task| with |sequence_token| using this TaskScheduler's TaskTracker. 80 // Runs |task| with |sequence_token| using this TaskScheduler's TaskTracker.
81 void RunTask(std::unique_ptr<internal::Task> task, 81 void RunTask(std::unique_ptr<internal::Task> task,
82 const SequenceToken& sequence_token); 82 const SequenceToken& sequence_token);
83 83
84 // Returns true if this TaskScheduler runs its tasks on the current thread. 84 // Returns true if this TaskScheduler runs its tasks on the current thread.
85 bool RunsTasksOnCurrentThread() const; 85 bool RunsTasksInCurrentSequence() const;
86 86
87 private: 87 private:
88 // Returns the TaskRunner to which this TaskScheduler forwards tasks. It may 88 // Returns the TaskRunner to which this TaskScheduler forwards tasks. It may
89 // be |message_loop_->task_runner()| or a reference to it saved on entry to 89 // be |message_loop_->task_runner()| or a reference to it saved on entry to
90 // RunTask(). 90 // RunTask().
91 scoped_refptr<SingleThreadTaskRunner> MessageLoopTaskRunner() const { 91 scoped_refptr<SingleThreadTaskRunner> MessageLoopTaskRunner() const {
92 if (saved_task_runner_) 92 if (saved_task_runner_)
93 return saved_task_runner_; 93 return saved_task_runner_;
94 DCHECK(message_loop_->task_runner()); 94 DCHECK(message_loop_->task_runner());
95 return message_loop_->task_runner(); 95 return message_loop_->task_runner();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 ExecutionMode execution_mode, 136 ExecutionMode execution_mode,
137 TaskTraits traits); 137 TaskTraits traits);
138 138
139 // SingleThreadTaskRunner: 139 // SingleThreadTaskRunner:
140 bool PostDelayedTask(const tracked_objects::Location& from_here, 140 bool PostDelayedTask(const tracked_objects::Location& from_here,
141 OnceClosure closure, 141 OnceClosure closure,
142 TimeDelta delay) override; 142 TimeDelta delay) override;
143 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, 143 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
144 OnceClosure closure, 144 OnceClosure closure,
145 TimeDelta delay) override; 145 TimeDelta delay) override;
146 bool RunsTasksOnCurrentThread() const override; 146 bool RunsTasksInCurrentSequence() const override;
147 147
148 private: 148 private:
149 ~TestTaskSchedulerTaskRunner() override; 149 ~TestTaskSchedulerTaskRunner() override;
150 150
151 TestTaskScheduler* const task_scheduler_; 151 TestTaskScheduler* const task_scheduler_;
152 const ExecutionMode execution_mode_; 152 const ExecutionMode execution_mode_;
153 const SequenceToken sequence_token_; 153 const SequenceToken sequence_token_;
154 const TaskTraits traits_; 154 const TaskTraits traits_;
155 155
156 DISALLOW_COPY_AND_ASSIGN(TestTaskSchedulerTaskRunner); 156 DISALLOW_COPY_AND_ASSIGN(TestTaskSchedulerTaskRunner);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 : SequenceToken::Create()); 265 : SequenceToken::Create());
266 266
267 // Make sure that any task runner that was registered was also cleaned up. 267 // Make sure that any task runner that was registered was also cleaned up.
268 DCHECK(!MessageLoop::current()->task_runner()); 268 DCHECK(!MessageLoop::current()->task_runner());
269 269
270 // Restore the MessageLoop TaskRunner. 270 // Restore the MessageLoop TaskRunner.
271 MessageLoop::current()->SetTaskRunner(saved_task_runner_); 271 MessageLoop::current()->SetTaskRunner(saved_task_runner_);
272 saved_task_runner_ = nullptr; 272 saved_task_runner_ = nullptr;
273 } 273 }
274 274
275 bool TestTaskScheduler::RunsTasksOnCurrentThread() const { 275 bool TestTaskScheduler::RunsTasksInCurrentSequence() const {
276 return MessageLoopTaskRunner()->RunsTasksOnCurrentThread(); 276 return MessageLoopTaskRunner()->RunsTasksInCurrentSequence();
277 } 277 }
278 278
279 TestTaskSchedulerTaskRunner::TestTaskSchedulerTaskRunner( 279 TestTaskSchedulerTaskRunner::TestTaskSchedulerTaskRunner(
280 TestTaskScheduler* task_scheduler, 280 TestTaskScheduler* task_scheduler,
281 ExecutionMode execution_mode, 281 ExecutionMode execution_mode,
282 TaskTraits traits) 282 TaskTraits traits)
283 : task_scheduler_(task_scheduler), 283 : task_scheduler_(task_scheduler),
284 execution_mode_(execution_mode), 284 execution_mode_(execution_mode),
285 sequence_token_(execution_mode == ExecutionMode::PARALLEL 285 sequence_token_(execution_mode == ExecutionMode::PARALLEL
286 ? SequenceToken() 286 ? SequenceToken()
(...skipping 14 matching lines...) Expand all
301 } 301 }
302 302
303 bool TestTaskSchedulerTaskRunner::PostNonNestableDelayedTask( 303 bool TestTaskSchedulerTaskRunner::PostNonNestableDelayedTask(
304 const tracked_objects::Location& from_here, 304 const tracked_objects::Location& from_here,
305 OnceClosure closure, 305 OnceClosure closure,
306 TimeDelta delay) { 306 TimeDelta delay) {
307 // Tasks are never nested within the task scheduler. 307 // Tasks are never nested within the task scheduler.
308 return PostDelayedTask(from_here, std::move(closure), delay); 308 return PostDelayedTask(from_here, std::move(closure), delay);
309 } 309 }
310 310
311 bool TestTaskSchedulerTaskRunner::RunsTasksOnCurrentThread() const { 311 bool TestTaskSchedulerTaskRunner::RunsTasksInCurrentSequence() const {
312 if (execution_mode_ == ExecutionMode::PARALLEL) 312 if (execution_mode_ == ExecutionMode::PARALLEL)
313 return task_scheduler_->RunsTasksOnCurrentThread(); 313 return task_scheduler_->RunsTasksInCurrentSequence();
314 return sequence_token_ == SequenceToken::GetForCurrentThread(); 314 return sequence_token_ == SequenceToken::GetForCurrentThread();
315 } 315 }
316 316
317 TestTaskSchedulerTaskRunner::~TestTaskSchedulerTaskRunner() = default; 317 TestTaskSchedulerTaskRunner::~TestTaskSchedulerTaskRunner() = default;
318 318
319 } // namespace 319 } // namespace
320 320
321 ScopedTaskScheduler::ScopedTaskScheduler() : ScopedTaskScheduler(nullptr) {} 321 ScopedTaskScheduler::ScopedTaskScheduler() : ScopedTaskScheduler(nullptr) {}
322 322
323 ScopedTaskScheduler::ScopedTaskScheduler(MessageLoop* message_loop) { 323 ScopedTaskScheduler::ScopedTaskScheduler(MessageLoop* message_loop) {
324 DCHECK(!TaskScheduler::GetInstance()); 324 DCHECK(!TaskScheduler::GetInstance());
325 TaskScheduler::SetInstance(MakeUnique<TestTaskScheduler>(message_loop)); 325 TaskScheduler::SetInstance(MakeUnique<TestTaskScheduler>(message_loop));
326 task_scheduler_ = TaskScheduler::GetInstance(); 326 task_scheduler_ = TaskScheduler::GetInstance();
327 } 327 }
328 328
329 ScopedTaskScheduler::~ScopedTaskScheduler() { 329 ScopedTaskScheduler::~ScopedTaskScheduler() {
330 DCHECK(thread_checker_.CalledOnValidThread()); 330 DCHECK(thread_checker_.CalledOnValidThread());
331 DCHECK_EQ(task_scheduler_, TaskScheduler::GetInstance()); 331 DCHECK_EQ(task_scheduler_, TaskScheduler::GetInstance());
332 332
333 // Per contract, call JoinForTesting() before deleting the TaskScheduler. 333 // Per contract, call JoinForTesting() before deleting the TaskScheduler.
334 TaskScheduler::GetInstance()->JoinForTesting(); 334 TaskScheduler::GetInstance()->JoinForTesting();
335 335
336 TaskScheduler::SetInstance(nullptr); 336 TaskScheduler::SetInstance(nullptr);
337 } 337 }
338 338
339 } // namespace test 339 } // namespace test
340 } // namespace base 340 } // namespace base
OLDNEW
« no previous file with comments | « base/test/null_task_runner.cc ('k') | base/test/test_mock_time_task_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698