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

Side by Side Diff: components/scheduler/renderer/lazy_scheduler_message_loop_delegate.cc

Issue 1152623008: scheduler: Always create a real scheduler in unit tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Windows build fix. Created 5 years, 6 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/scheduler/renderer/lazy_scheduler_message_loop_delegate.h"
6
7 namespace scheduler {
8
9 // static
10 scoped_refptr<LazySchedulerMessageLoopDelegate>
11 LazySchedulerMessageLoopDelegate::Create() {
12 return make_scoped_refptr(new LazySchedulerMessageLoopDelegate());
13 }
14
15 LazySchedulerMessageLoopDelegate::LazySchedulerMessageLoopDelegate()
16 : thread_id_(base::PlatformThread::CurrentId()) {
17 }
18
19 LazySchedulerMessageLoopDelegate::~LazySchedulerMessageLoopDelegate() {
20 }
21
22 base::MessageLoop* LazySchedulerMessageLoopDelegate::EnsureMessageLoop() const {
23 base::MessageLoop* message_loop = base::MessageLoop::current();
24 DCHECK(message_loop);
25 for (auto& observer : pending_observers_) {
26 message_loop->AddTaskObserver(observer);
27 }
28 pending_observers_.clear();
29 return message_loop;
30 }
31
32 bool LazySchedulerMessageLoopDelegate::HasMessageLoop() const {
33 return base::MessageLoop::current() != nullptr;
34 }
35
36 bool LazySchedulerMessageLoopDelegate::PostDelayedTask(
37 const tracked_objects::Location& from_here,
38 const base::Closure& task,
39 base::TimeDelta delay) {
40 return EnsureMessageLoop()->task_runner()->PostDelayedTask(from_here, task,
41 delay);
42 }
43
44 bool LazySchedulerMessageLoopDelegate::PostNonNestableDelayedTask(
45 const tracked_objects::Location& from_here,
46 const base::Closure& task,
47 base::TimeDelta delay) {
48 return EnsureMessageLoop()->task_runner()->PostNonNestableDelayedTask(
49 from_here, task, delay);
50 }
51
52 bool LazySchedulerMessageLoopDelegate::RunsTasksOnCurrentThread() const {
53 return thread_id_ == base::PlatformThread::CurrentId();
54 }
55
56 bool LazySchedulerMessageLoopDelegate::IsNested() const {
57 return EnsureMessageLoop()->IsNested();
58 }
59
60 void LazySchedulerMessageLoopDelegate::AddTaskObserver(
61 base::MessageLoop::TaskObserver* task_observer) {
62 if (!HasMessageLoop()) {
63 pending_observers_.insert(task_observer);
64 return;
65 }
66 EnsureMessageLoop()->AddTaskObserver(task_observer);
67 }
68
69 void LazySchedulerMessageLoopDelegate::RemoveTaskObserver(
70 base::MessageLoop::TaskObserver* task_observer) {
71 if (!HasMessageLoop()) {
72 pending_observers_.erase(task_observer);
73 return;
74 }
75 EnsureMessageLoop()->RemoveTaskObserver(task_observer);
76 }
77
78 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698