Index: media/midi/midi_scheduler.h |
diff --git a/media/midi/midi_scheduler.h b/media/midi/midi_scheduler.h |
index 17354a96a0d3b5d6c57b6b0ee074c82f15a838b8..2d79fc8266096405761a75aa7ccc4b03c04d4bca 100644 |
--- a/media/midi/midi_scheduler.h |
+++ b/media/midi/midi_scheduler.h |
@@ -10,6 +10,8 @@ |
#include "base/callback.h" |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/single_thread_task_runner.h" |
+#include "base/threading/thread_checker.h" |
#include "media/midi/midi_export.h" |
namespace media { |
@@ -21,12 +23,17 @@ class MidiManagerClient; |
// TODO(crbug.com/467442): Make tasks cancelable per client. |
class MIDI_EXPORT MidiScheduler final { |
public: |
+ // Both constructor and destructor should be run on the same thread. The |
+ // instance is bound to the TaskRunner of the constructing thread, on which |
+ // InvokeClosure() is run. |
explicit MidiScheduler(MidiManager* manager); |
~MidiScheduler(); |
- // Post |closure| to the current message loop safely. The |closure| will not |
- // be invoked after MidiScheduler is deleted. AccumulateMidiBytesSent() of |
- // |client| is called internally. |
+ // Post |closure| to |task_runner_| safely. The |closure| will not be invoked |
+ // after MidiScheduler is deleted. AccumulateMidiBytesSent() of |client| is |
+ // called internally. May be called on any thread, but the user should ensure |
+ // this method is not called on other threads during/after MidiScheduler |
+ // destruction. |
void PostSendDataTask(MidiManagerClient* client, |
size_t length, |
double timestamp, |
@@ -39,6 +46,14 @@ class MIDI_EXPORT MidiScheduler final { |
// MidiManager should own the MidiScheduler and be alive longer. |
MidiManager* manager_; |
+ |
+ // The TaskRunner of the thread on which the instance is constructed. |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ |
+ // Ensures |weak_factory_| is destructed, and WeakPtrs are dereferenced on the |
+ // same thread. |
+ base::ThreadChecker thread_checker_; |
+ |
base::WeakPtrFactory<MidiScheduler> weak_factory_; |
DISALLOW_COPY_AND_ASSIGN(MidiScheduler); |