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

Side by Side Diff: tools/gn/scheduler.h

Issue 21114002: Add initial prototype for the GN meta-buildsystem. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add owners and readme Created 7 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « tools/gn/pattern_unittest.cc ('k') | tools/gn/scheduler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013 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 #ifndef TOOLS_GN_SCHEDULER_H_
6 #define TOOLS_GN_SCHEDULER_H_
7
8 #include "base/atomic_ref_count.h"
9 #include "base/basictypes.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/run_loop.h"
12 #include "base/synchronization/lock.h"
13 #include "base/threading/sequenced_worker_pool.h"
14 #include "tools/gn/input_file_manager.h"
15
16 class Target;
17
18 // Maintains the thread pool and error state.
19 class Scheduler {
20 public:
21 Scheduler();
22 ~Scheduler();
23
24 bool Run();
25
26 base::MessageLoop* main_loop() { return &main_loop_; }
27 base::SequencedWorkerPool* pool() { return pool_; }
28
29 InputFileManager* input_file_manager() { return input_file_manager_; }
30
31 bool verbose_logging() const { return verbose_logging_; }
32 void set_verbose_logging(bool v) { verbose_logging_ = v; }
33
34 // TODO(brettw) data race on this access (benign?).
35 bool is_failed() const { return is_failed_; }
36
37 void Log(const std::string& verb, const std::string& msg);
38 void FailWithError(const Err& err);
39
40 void ScheduleWork(const base::Closure& work);
41
42 void ScheduleTargetFileWrite(const Target* target);
43
44 // Declares that the given file was read and affected the build output.
45 //
46 // TODO(brettw) this is global rather than per-BuildSettings. If we
47 // start using >1 build settings, then we probably want this to take a
48 // BuildSettings object so we know the depdency on a per-build basis.
49 void AddGenDependency(const SourceFile& source_file);
50 std::vector<SourceFile> GetGenDependencies() const;
51
52 // We maintain a count of the things we need to do that works like a
53 // refcount. When this reaches 0, the program exits.
54 void IncrementWorkCount();
55 void DecrementWorkCount();
56
57 private:
58 void LogOnMainThread(const std::string& verb, const std::string& msg);
59 void FailWithErrorOnMainThread(const Err& err);
60
61 void DoTargetFileWrite(const Target* target);
62
63 void DoWork(const base::Closure& closure);
64
65 void OnComplete();
66
67 base::MessageLoop main_loop_;
68 scoped_refptr<base::SequencedWorkerPool> pool_;
69
70 scoped_refptr<InputFileManager> input_file_manager_;
71
72 base::RunLoop runner_;
73
74 bool verbose_logging_;
75
76 base::AtomicRefCount work_count_;
77
78 mutable base::Lock lock_;
79 bool is_failed_;
80
81 // Additional input dependencies. Protected by the lock.
82 std::vector<SourceFile> gen_dependencies_;
83
84 DISALLOW_COPY_AND_ASSIGN(Scheduler);
85 };
86
87 extern Scheduler* g_scheduler;
88
89 #endif // TOOLS_GN_SCHEDULER_H_
90
OLDNEW
« no previous file with comments | « tools/gn/pattern_unittest.cc ('k') | tools/gn/scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698