OLD | NEW |
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 "media/base/serial_runner.h" | 5 #include "media/base/serial_runner.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
11 #include "base/single_thread_task_runner.h" | 11 #include "base/single_thread_task_runner.h" |
12 | 12 |
13 namespace media { | 13 namespace media { |
14 | 14 |
| 15 // Converts a Closure into a bound function accepting a PipelineStatusCB. |
| 16 static void RunClosure( |
| 17 const base::Closure& closure, |
| 18 const PipelineStatusCB& status_cb) { |
| 19 closure.Run(); |
| 20 status_cb.Run(PIPELINE_OK); |
| 21 } |
| 22 |
15 // Converts a bound function accepting a Closure into a bound function | 23 // Converts a bound function accepting a Closure into a bound function |
16 // accepting a PipelineStatusCB. Since closures have no way of reporting a | 24 // accepting a PipelineStatusCB. Since closures have no way of reporting a |
17 // status |status_cb| is executed with PIPELINE_OK. | 25 // status |status_cb| is executed with PIPELINE_OK. |
18 static void RunBoundClosure( | 26 static void RunBoundClosure( |
19 const SerialRunner::BoundClosure& bound_closure, | 27 const SerialRunner::BoundClosure& bound_closure, |
20 const PipelineStatusCB& status_cb) { | 28 const PipelineStatusCB& status_cb) { |
21 bound_closure.Run(base::Bind(status_cb, PIPELINE_OK)); | 29 bound_closure.Run(base::Bind(status_cb, PIPELINE_OK)); |
22 } | 30 } |
23 | 31 |
24 // Runs |status_cb| with |last_status| on |task_runner|. | 32 // Runs |status_cb| with |last_status| on |task_runner|. |
25 static void RunOnTaskRunner( | 33 static void RunOnTaskRunner( |
26 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 34 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
27 const PipelineStatusCB& status_cb, | 35 const PipelineStatusCB& status_cb, |
28 PipelineStatus last_status) { | 36 PipelineStatus last_status) { |
29 // Force post to permit cancellation of a series in the scenario where all | 37 // Force post to permit cancellation of a series in the scenario where all |
30 // bound functions run on the same thread. | 38 // bound functions run on the same thread. |
31 task_runner->PostTask(FROM_HERE, base::Bind(status_cb, last_status)); | 39 task_runner->PostTask(FROM_HERE, base::Bind(status_cb, last_status)); |
32 } | 40 } |
33 | 41 |
34 SerialRunner::Queue::Queue() {} | 42 SerialRunner::Queue::Queue() {} |
35 SerialRunner::Queue::~Queue() {} | 43 SerialRunner::Queue::~Queue() {} |
36 | 44 |
| 45 void SerialRunner::Queue::Push(const base::Closure& closure) { |
| 46 bound_fns_.push(base::Bind(&RunClosure, closure)); |
| 47 } |
| 48 |
37 void SerialRunner::Queue::Push( | 49 void SerialRunner::Queue::Push( |
38 const BoundClosure& bound_closure) { | 50 const BoundClosure& bound_closure) { |
39 bound_fns_.push(base::Bind(&RunBoundClosure, bound_closure)); | 51 bound_fns_.push(base::Bind(&RunBoundClosure, bound_closure)); |
40 } | 52 } |
41 | 53 |
42 void SerialRunner::Queue::Push( | 54 void SerialRunner::Queue::Push( |
43 const BoundPipelineStatusCB& bound_status_cb) { | 55 const BoundPipelineStatusCB& bound_status_cb) { |
44 bound_fns_.push(bound_status_cb); | 56 bound_fns_.push(bound_status_cb); |
45 } | 57 } |
46 | 58 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 } | 104 } |
93 | 105 |
94 BoundPipelineStatusCB bound_fn = bound_fns_.Pop(); | 106 BoundPipelineStatusCB bound_fn = bound_fns_.Pop(); |
95 bound_fn.Run(base::Bind( | 107 bound_fn.Run(base::Bind( |
96 &RunOnTaskRunner, | 108 &RunOnTaskRunner, |
97 task_runner_, | 109 task_runner_, |
98 base::Bind(&SerialRunner::RunNextInSeries, weak_factory_.GetWeakPtr()))); | 110 base::Bind(&SerialRunner::RunNextInSeries, weak_factory_.GetWeakPtr()))); |
99 } | 111 } |
100 | 112 |
101 } // namespace media | 113 } // namespace media |
OLD | NEW |