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

Side by Side Diff: media/base/serial_runner.h

Issue 10830146: Replace RunInSeries() and RunInParallel() with CallbackSeries helper class. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: boom Created 8 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 | « media/base/pipeline.cc ('k') | media/base/serial_runner.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) 2012 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 MEDIA_BASE_SERIAL_RUNNER_H_
6 #define MEDIA_BASE_SERIAL_RUNNER_H_
7
8 #include <queue>
9
10 #include "base/callback.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h"
14 #include "media/base/pipeline_status.h"
15
16 namespace base {
17 class MessageLoopProxy;
18 }
19
20 namespace media {
21
22 // Runs a series of bound functions accepting Closures or PipelineStatusCB.
23 // SerialRunner doesn't use regular Closure/PipelineStatusCBs as it late binds
24 // the completion callback as the series progresses.
25 class SerialRunner {
26 public:
27 typedef base::Callback<void(const base::Closure&)> BoundClosure;
28 typedef base::Callback<void(const PipelineStatusCB&)> BoundPipelineStatusCB;
29
30 // Serial queue of bound functions to run.
31 class Queue {
32 public:
33 Queue();
34 ~Queue();
35
36 void Push(const BoundClosure& bound_fn);
37 void Push(const BoundPipelineStatusCB& bound_fn);
38
39 private:
40 friend class SerialRunner;
scherkus (not reviewing) 2012/08/03 20:44:09 turns out this _isn't_ java!
41
42 BoundPipelineStatusCB Pop();
43 bool empty() { return bound_fns_.empty(); }
Ami GONE FROM CHROMIUM 2012/08/03 20:48:23 out-of-line?
44
45 std::queue<BoundPipelineStatusCB> bound_fns_;
46 };
scherkus (not reviewing) 2012/08/03 20:44:09 FYI no more DISALLOW_XXX() -- I don't think I need
47
48 // Executes the bound functions in series, executing |done_cb| when finished.
49 //
50 // All bound functions are executed on the thread that Run() is called on,
51 // including |done_cb|.
52 //
53 // Deleting the object will prevent execution of any unstarted bound
54 // functions, including |done_cb|.
55 static scoped_ptr<SerialRunner> Run(
56 const Queue& bound_fns, const PipelineStatusCB& done_cb);
57
58 private:
59 friend class scoped_ptr<SerialRunner>;
60
61 SerialRunner(const Queue& bound_fns, const PipelineStatusCB& done_cb);
62 ~SerialRunner();
63
64 void RunNextInSeries(PipelineStatus last_status);
65
66 base::WeakPtrFactory<SerialRunner> weak_this_;
67 scoped_refptr<base::MessageLoopProxy> message_loop_;
68 Queue bound_fns_;
69 PipelineStatusCB done_cb_;
70
71 DISALLOW_COPY_AND_ASSIGN(SerialRunner);
72 };
73
74 } // namespace media
75
76 #endif // MEDIA_BASE_SERIAL_RUNNER_H_
OLDNEW
« no previous file with comments | « media/base/pipeline.cc ('k') | media/base/serial_runner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698