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

Side by Side Diff: media/midi/midi_scheduler.cc

Issue 2262043002: MidiScheduler binds to task runner of constructing thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 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
« no previous file with comments | « media/midi/midi_scheduler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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/midi/midi_scheduler.h" 5 #include "media/midi/midi_scheduler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/single_thread_task_runner.h"
12 #include "base/threading/thread_task_runner_handle.h" 11 #include "base/threading/thread_task_runner_handle.h"
13 #include "base/time/time.h" 12 #include "base/time/time.h"
14 #include "media/midi/midi_manager.h" 13 #include "media/midi/midi_manager.h"
15 14
16 namespace media { 15 namespace media {
17 namespace midi { 16 namespace midi {
18 17
19 MidiScheduler::MidiScheduler(MidiManager* manager) 18 MidiScheduler::MidiScheduler(MidiManager* manager)
20 : manager_(manager), 19 : manager_(manager),
21 weak_factory_(this) { 20 task_runner_(base::ThreadTaskRunnerHandle::Get()),
22 } 21 weak_factory_(this) {}
23 22
24 MidiScheduler::~MidiScheduler() { 23 MidiScheduler::~MidiScheduler() {
24 DCHECK(thread_checker_.CalledOnValidThread());
25 } 25 }
26 26
27 // TODO(crbug.com/467442): Use CancelableTaskTracker once it supports 27 // TODO(crbug.com/467442): Use CancelableTaskTracker once it supports
28 // DelayedTask. 28 // DelayedTask.
29 // TODO(shaochuan): Unit tests to ensure thread safety.
29 void MidiScheduler::PostSendDataTask(MidiManagerClient* client, 30 void MidiScheduler::PostSendDataTask(MidiManagerClient* client,
30 size_t length, 31 size_t length,
31 double timestamp, 32 double timestamp,
32 const base::Closure& closure) { 33 const base::Closure& closure) {
33 DCHECK(client); 34 DCHECK(client);
34 35
35 const base::Closure& weak_closure = base::Bind( 36 const base::Closure& weak_closure = base::Bind(
36 &MidiScheduler::InvokeClosure, 37 &MidiScheduler::InvokeClosure,
37 weak_factory_.GetWeakPtr(), 38 weak_factory_.GetWeakPtr(),
38 client, 39 client,
39 length, 40 length,
40 closure); 41 closure);
41 42
42 base::TimeDelta delay; 43 base::TimeDelta delay;
43 if (timestamp != 0.0) { 44 if (timestamp != 0.0) {
44 base::TimeTicks time_to_send = 45 base::TimeTicks time_to_send =
45 base::TimeTicks() + base::TimeDelta::FromMicroseconds( 46 base::TimeTicks() + base::TimeDelta::FromMicroseconds(
46 timestamp * base::Time::kMicrosecondsPerSecond); 47 timestamp * base::Time::kMicrosecondsPerSecond);
47 delay = std::max(time_to_send - base::TimeTicks::Now(), base::TimeDelta()); 48 delay = std::max(time_to_send - base::TimeTicks::Now(), base::TimeDelta());
48 } 49 }
49 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(FROM_HERE, weak_closure, 50 task_runner_->PostDelayedTask(FROM_HERE, weak_closure, delay);
50 delay);
51 } 51 }
52 52
53 void MidiScheduler::InvokeClosure(MidiManagerClient* client, 53 void MidiScheduler::InvokeClosure(MidiManagerClient* client,
54 size_t length, 54 size_t length,
55 const base::Closure& closure) { 55 const base::Closure& closure) {
56 DCHECK(thread_checker_.CalledOnValidThread());
56 closure.Run(); 57 closure.Run();
57 manager_->AccumulateMidiBytesSent(client, length); 58 manager_->AccumulateMidiBytesSent(client, length);
58 } 59 }
59 60
60 } // namespace midi 61 } // namespace midi
61 } // namespace media 62 } // namespace media
OLDNEW
« no previous file with comments | « media/midi/midi_scheduler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698