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

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: bind to constructing thread 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
« media/midi/midi_scheduler.h ('K') | « 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 void MidiScheduler::PostSendDataTask(MidiManagerClient* client, 29 void MidiScheduler::PostSendDataTask(MidiManagerClient* client,
30 size_t length, 30 size_t length,
31 double timestamp, 31 double timestamp,
32 const base::Closure& closure) { 32 const base::Closure& closure) {
33 DCHECK(client); 33 DCHECK(client);
34 34
35 const base::Closure& weak_closure = base::Bind( 35 const base::Closure& weak_closure = base::Bind(
36 &MidiScheduler::InvokeClosure, 36 &MidiScheduler::InvokeClosure,
37 weak_factory_.GetWeakPtr(), 37 weak_factory_.GetWeakPtr(),
Shao-Chuan Lee 2016/08/23 04:56:59 Assuming GetWeakPtr() is thread-safe.
Takashi Toyoshima 2016/08/23 05:30:41 OK, but probably, it's better to have a unit test
Shao-Chuan Lee 2016/08/23 09:36:07 Added TODO.
38 client, 38 client,
39 length, 39 length,
40 closure); 40 closure);
41 41
42 base::TimeDelta delay; 42 base::TimeDelta delay;
43 if (timestamp != 0.0) { 43 if (timestamp != 0.0) {
44 base::TimeTicks time_to_send = 44 base::TimeTicks time_to_send =
45 base::TimeTicks() + base::TimeDelta::FromMicroseconds( 45 base::TimeTicks() + base::TimeDelta::FromMicroseconds(
46 timestamp * base::Time::kMicrosecondsPerSecond); 46 timestamp * base::Time::kMicrosecondsPerSecond);
47 delay = std::max(time_to_send - base::TimeTicks::Now(), base::TimeDelta()); 47 delay = std::max(time_to_send - base::TimeTicks::Now(), base::TimeDelta());
48 } 48 }
49 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(FROM_HERE, weak_closure, 49 task_runner_->PostDelayedTask(FROM_HERE, weak_closure, delay);
50 delay);
51 } 50 }
52 51
53 void MidiScheduler::InvokeClosure(MidiManagerClient* client, 52 void MidiScheduler::InvokeClosure(MidiManagerClient* client,
54 size_t length, 53 size_t length,
55 const base::Closure& closure) { 54 const base::Closure& closure) {
55 DCHECK(thread_checker_.CalledOnValidThread());
56 closure.Run(); 56 closure.Run();
57 manager_->AccumulateMidiBytesSent(client, length); 57 manager_->AccumulateMidiBytesSent(client, length);
58 } 58 }
59 59
60 } // namespace midi 60 } // namespace midi
61 } // namespace media 61 } // namespace media
OLDNEW
« media/midi/midi_scheduler.h ('K') | « media/midi/midi_scheduler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698