Chromium Code Reviews| Index: media/midi/midi_manager.cc |
| diff --git a/media/midi/midi_manager.cc b/media/midi/midi_manager.cc |
| index b3262e4a034516ab8af46629bc3cfffa5b5d5ea7..91198021b835e8d2e58204bb58373cc43e2cdf5e 100644 |
| --- a/media/midi/midi_manager.cc |
| +++ b/media/midi/midi_manager.cc |
| @@ -8,6 +8,7 @@ |
| #include "base/bind_helpers.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/threading/thread.h" |
| +#include "media/midi/midi_message_queue.h" |
| namespace media { |
| @@ -46,6 +47,7 @@ void MIDIManager::EndSession(MIDIManagerClient* client) { |
| void MIDIManager::AddInputPort(const MIDIPortInfo& info) { |
| input_ports_.push_back(info); |
| + input_message_queues_.push_back(new MIDIMessageQueue(true)); |
| } |
| void MIDIManager::AddOutputPort(const MIDIPortInfo& info) { |
| @@ -59,8 +61,15 @@ void MIDIManager::ReceiveMIDIData( |
| double timestamp) { |
| base::AutoLock auto_lock(clients_lock_); |
|
Takashi Toyoshima
2013/11/12 21:59:36
This message queue introduces two additional memor
yukawa
2013/11/14 14:55:31
Thank you for the suggestion. I moved MIDIMessageQ
|
| - for (ClientList::iterator i = clients_.begin(); i != clients_.end(); ++i) |
| - (*i)->ReceiveMIDIData(port_index, data, length, timestamp); |
| + input_message_queues_[port_index]->Add(data, length); |
| + std::vector<uint8> message; |
| + while (true) { |
| + input_message_queues_[port_index]->Get(&message); |
| + if (message.empty()) |
| + return; |
| + for (ClientList::iterator i = clients_.begin(); i != clients_.end(); ++i) |
| + (*i)->ReceiveMIDIData(port_index, &message[0], message.size(), timestamp); |
| + } |
| } |
| bool MIDIManager::CurrentlyOnMIDISendThread() { |