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

Side by Side Diff: base/run_loop.cc

Issue 2564943002: Reland "Add thread checking to RunLoop, deprecate MessageLoopRunner. (patchset #4 id:20002 of https… (Closed)
Patch Set: Created 4 years 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/run_loop.h ('k') | chrome/browser/chromeos/file_manager/zip_file_creator_browsertest.cc » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/run_loop.h" 5 #include "base/run_loop.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/tracked_objects.h" 8 #include "base/tracked_objects.h"
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 10
11 namespace base { 11 namespace base {
12 12
13 RunLoop::RunLoop() 13 RunLoop::RunLoop()
14 : loop_(MessageLoop::current()), 14 : loop_(MessageLoop::current()),
15 previous_run_loop_(NULL), 15 previous_run_loop_(NULL),
16 run_depth_(0), 16 run_depth_(0),
17 run_called_(false), 17 run_called_(false),
18 quit_called_(false), 18 quit_called_(false),
19 running_(false), 19 running_(false),
20 quit_when_idle_received_(false), 20 quit_when_idle_received_(false),
21 weak_factory_(this) { 21 weak_factory_(this) {
22 } 22 }
23 23
24 RunLoop::~RunLoop() { 24 RunLoop::~RunLoop() {
25 } 25 }
26 26
27 void RunLoop::Run() { 27 void RunLoop::Run() {
28 DCHECK(thread_checker_.CalledOnValidThread());
28 if (!BeforeRun()) 29 if (!BeforeRun())
29 return; 30 return;
30 31
31 // Use task stopwatch to exclude the loop run time from the current task, if 32 // Use task stopwatch to exclude the loop run time from the current task, if
32 // any. 33 // any.
33 tracked_objects::TaskStopwatch stopwatch; 34 tracked_objects::TaskStopwatch stopwatch;
34 stopwatch.Start(); 35 stopwatch.Start();
35 loop_->RunHandler(); 36 loop_->RunHandler();
36 stopwatch.Stop(); 37 stopwatch.Stop();
37 38
38 AfterRun(); 39 AfterRun();
39 } 40 }
40 41
41 void RunLoop::RunUntilIdle() { 42 void RunLoop::RunUntilIdle() {
42 quit_when_idle_received_ = true; 43 quit_when_idle_received_ = true;
43 Run(); 44 Run();
44 } 45 }
45 46
46 void RunLoop::Quit() { 47 void RunLoop::Quit() {
48 DCHECK(thread_checker_.CalledOnValidThread());
47 quit_called_ = true; 49 quit_called_ = true;
48 if (running_ && loop_->run_loop_ == this) { 50 if (running_ && loop_->run_loop_ == this) {
49 // This is the inner-most RunLoop, so quit now. 51 // This is the inner-most RunLoop, so quit now.
50 loop_->QuitNow(); 52 loop_->QuitNow();
51 } 53 }
52 } 54 }
53 55
54 void RunLoop::QuitWhenIdle() { 56 void RunLoop::QuitWhenIdle() {
57 DCHECK(thread_checker_.CalledOnValidThread());
55 quit_when_idle_received_ = true; 58 quit_when_idle_received_ = true;
56 } 59 }
57 60
58 base::Closure RunLoop::QuitClosure() { 61 base::Closure RunLoop::QuitClosure() {
59 return base::Bind(&RunLoop::Quit, weak_factory_.GetWeakPtr()); 62 return base::Bind(&RunLoop::Quit, weak_factory_.GetWeakPtr());
60 } 63 }
61 64
62 base::Closure RunLoop::QuitWhenIdleClosure() { 65 base::Closure RunLoop::QuitWhenIdleClosure() {
63 return base::Bind(&RunLoop::QuitWhenIdle, weak_factory_.GetWeakPtr()); 66 return base::Bind(&RunLoop::QuitWhenIdle, weak_factory_.GetWeakPtr());
64 } 67 }
(...skipping 23 matching lines...) Expand all
88 91
89 // Pop RunLoop stack: 92 // Pop RunLoop stack:
90 loop_->run_loop_ = previous_run_loop_; 93 loop_->run_loop_ = previous_run_loop_;
91 94
92 // Execute deferred QuitNow, if any: 95 // Execute deferred QuitNow, if any:
93 if (previous_run_loop_ && previous_run_loop_->quit_called_) 96 if (previous_run_loop_ && previous_run_loop_->quit_called_)
94 loop_->QuitNow(); 97 loop_->QuitNow();
95 } 98 }
96 99
97 } // namespace base 100 } // namespace base
OLDNEW
« no previous file with comments | « base/run_loop.h ('k') | chrome/browser/chromeos/file_manager/zip_file_creator_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698