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

Side by Side Diff: media/midi/midi_manager_alsa.h

Issue 1096983002: Update usages of std::map to use ScopedPtrMap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@passwordmanager-scopedmemory
Patch Set: Fix Mac compile. Created 5 years, 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #ifndef MEDIA_MIDI_MIDI_MANAGER_ALSA_H_ 5 #ifndef MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
6 #define MEDIA_MIDI_MIDI_MANAGER_ALSA_H_ 6 #define MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
7 7
8 #include <alsa/asoundlib.h> 8 #include <alsa/asoundlib.h>
9 #include <map>
10 #include <vector> 9 #include <vector>
11 10
12 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/containers/scoped_ptr_map.h"
13 #include "base/gtest_prod_util.h" 13 #include "base/gtest_prod_util.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/scoped_vector.h" 15 #include "base/memory/scoped_vector.h"
16 #include "base/stl_util.h"
17 #include "base/synchronization/lock.h" 16 #include "base/synchronization/lock.h"
18 #include "base/threading/thread.h" 17 #include "base/threading/thread.h"
19 #include "base/values.h" 18 #include "base/values.h"
20 #include "device/udev_linux/scoped_udev.h" 19 #include "device/udev_linux/scoped_udev.h"
21 #include "media/midi/midi_export.h" 20 #include "media/midi/midi_export.h"
22 #include "media/midi/midi_manager.h" 21 #include "media/midi/midi_manager.h"
23 22
24 namespace media { 23 namespace media {
25 namespace midi { 24 namespace midi {
26 25
27 class MIDI_EXPORT MidiManagerAlsa final : public MidiManager { 26 class MIDI_EXPORT MidiManagerAlsa final : public MidiManager {
28 public: 27 public:
29 MidiManagerAlsa(); 28 MidiManagerAlsa();
30 ~MidiManagerAlsa() override; 29 ~MidiManagerAlsa() override;
31 30
32 // MidiManager implementation. 31 // MidiManager implementation.
33 void StartInitialization() override; 32 void StartInitialization() override;
34 void DispatchSendMidiData(MidiManagerClient* client, 33 void DispatchSendMidiData(MidiManagerClient* client,
35 uint32 port_index, 34 uint32 port_index,
36 const std::vector<uint8>& data, 35 const std::vector<uint8>& data,
37 double timestamp) override; 36 double timestamp) override;
38 37
39 private: 38 private:
40 friend class MidiManagerAlsaTest; 39 friend class MidiManagerAlsaTest;
41 FRIEND_TEST_ALL_PREFIXES(MidiManagerAlsaTest, ExtractManufacturer); 40 FRIEND_TEST_ALL_PREFIXES(MidiManagerAlsaTest, ExtractManufacturer);
42 FRIEND_TEST_ALL_PREFIXES(MidiManagerAlsaTest, ToMidiPortState); 41 FRIEND_TEST_ALL_PREFIXES(MidiManagerAlsaTest, ToMidiPortState);
43 42
44 class AlsaCard; 43 class AlsaCard;
45 typedef std::map<int, AlsaCard*> AlsaCardMap; 44 typedef ScopedPtrMap<int, scoped_ptr<AlsaCard>> AlsaCardMap;
46 45
47 class MidiPort { 46 class MidiPort {
48 public: 47 public:
49 enum class Type { kInput, kOutput }; 48 enum class Type { kInput, kOutput };
50 49
51 // The Id class is used to keep the multiple strings separate 50 // The Id class is used to keep the multiple strings separate
52 // but compare them all together for equality purposes. 51 // but compare them all together for equality purposes.
53 // The individual strings that make up the Id can theoretically contain 52 // The individual strings that make up the Id can theoretically contain
54 // arbitrary characters, so unfortunately there is no simple way to 53 // arbitrary characters, so unfortunately there is no simple way to
55 // concatenate them into a single string. 54 // concatenate them into a single string.
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 private: 263 private:
265 const std::string name_; 264 const std::string name_;
266 const PortDirection direction_; 265 const PortDirection direction_;
267 const bool midi_; 266 const bool midi_;
268 267
269 DISALLOW_COPY_AND_ASSIGN(Port); 268 DISALLOW_COPY_AND_ASSIGN(Port);
270 }; 269 };
271 270
272 class Client { 271 class Client {
273 public: 272 public:
274 typedef std::map<int, Port*> PortMap; 273 typedef ScopedPtrMap<int, scoped_ptr<Port>> PortMap;
275 274
276 Client(const std::string& name, snd_seq_client_type_t type); 275 Client(const std::string& name, snd_seq_client_type_t type);
277 ~Client(); 276 ~Client();
278 277
279 std::string name() const { return name_; } 278 std::string name() const { return name_; }
280 snd_seq_client_type_t type() const { return type_; } 279 snd_seq_client_type_t type() const { return type_; }
281 void AddPort(int addr, scoped_ptr<Port> port); 280 void AddPort(int addr, scoped_ptr<Port> port);
282 void RemovePort(int addr); 281 void RemovePort(int addr);
283 PortMap::const_iterator begin() const; 282 PortMap::const_iterator begin() const;
284 PortMap::const_iterator end() const; 283 PortMap::const_iterator end() const;
285 284
286 private: 285 private:
287 const std::string name_; 286 const std::string name_;
288 const snd_seq_client_type_t type_; 287 const snd_seq_client_type_t type_;
289 PortMap ports_; 288 PortMap ports_;
290 STLValueDeleter<PortMap> ports_deleter_;
291 289
292 DISALLOW_COPY_AND_ASSIGN(Client); 290 DISALLOW_COPY_AND_ASSIGN(Client);
293 }; 291 };
294 292
295 typedef std::map<int, Client*> ClientMap; 293 typedef ScopedPtrMap<int, scoped_ptr<Client>> ClientMap;
296 294
297 ClientMap clients_; 295 ClientMap clients_;
298 STLValueDeleter<ClientMap> clients_deleter_;
299 296
300 // This is the current number of clients we know about that have 297 // This is the current number of clients we know about that have
301 // cards. When this number matches alsa_card_midi_count_, we know 298 // cards. When this number matches alsa_card_midi_count_, we know
302 // we are in sync between ALSA and udev. Until then, we cannot generate 299 // we are in sync between ALSA and udev. Until then, we cannot generate
303 // MIDIConnectionEvents to web clients. 300 // MIDIConnectionEvents to web clients.
304 int card_client_count_; 301 int card_client_count_;
305 302
306 DISALLOW_COPY_AND_ASSIGN(AlsaSeqState); 303 DISALLOW_COPY_AND_ASSIGN(AlsaSeqState);
307 }; 304 };
308 305
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 // One input port, many output ports. 391 // One input port, many output ports.
395 int in_port_id_; 392 int in_port_id_;
396 OutPortMap out_ports_; // guarded by out_ports_lock_ 393 OutPortMap out_ports_; // guarded by out_ports_lock_
397 base::Lock out_ports_lock_; // guards out_ports_ 394 base::Lock out_ports_lock_; // guards out_ports_
398 395
399 // Mapping from ALSA client:port to our index. 396 // Mapping from ALSA client:port to our index.
400 SourceMap source_map_; 397 SourceMap source_map_;
401 398
402 // Mapping from card to devices. 399 // Mapping from card to devices.
403 AlsaCardMap alsa_cards_; 400 AlsaCardMap alsa_cards_;
404 STLValueDeleter<AlsaCardMap> alsa_cards_deleter_;
405 401
406 // This is the current count of midi devices across all cards we know 402 // This is the current count of midi devices across all cards we know
407 // about. When this number matches card_client_count_ in AlsaSeqState, 403 // about. When this number matches card_client_count_ in AlsaSeqState,
408 // we are safe to generate MIDIConnectionEvents. Otherwise we need to 404 // we are safe to generate MIDIConnectionEvents. Otherwise we need to
409 // wait for our information from ALSA and udev to get back in sync. 405 // wait for our information from ALSA and udev to get back in sync.
410 int alsa_card_midi_count_; 406 int alsa_card_midi_count_;
411 407
412 // ALSA event -> MIDI coder. 408 // ALSA event -> MIDI coder.
413 snd_midi_event_t* decoder_; 409 snd_midi_event_t* decoder_;
414 410
415 // udev, for querying hardware devices. 411 // udev, for querying hardware devices.
416 device::ScopedUdevPtr udev_; 412 device::ScopedUdevPtr udev_;
417 device::ScopedUdevMonitorPtr udev_monitor_; 413 device::ScopedUdevMonitorPtr udev_monitor_;
418 414
419 base::Thread send_thread_; 415 base::Thread send_thread_;
420 base::Thread event_thread_; 416 base::Thread event_thread_;
421 417
422 bool event_thread_shutdown_; // guarded by shutdown_lock_ 418 bool event_thread_shutdown_; // guarded by shutdown_lock_
423 base::Lock shutdown_lock_; // guards event_thread_shutdown_ 419 base::Lock shutdown_lock_; // guards event_thread_shutdown_
424 420
425 DISALLOW_COPY_AND_ASSIGN(MidiManagerAlsa); 421 DISALLOW_COPY_AND_ASSIGN(MidiManagerAlsa);
426 }; 422 };
427 423
428 } // namespace midi 424 } // namespace midi
429 } // namespace media 425 } // namespace media
430 426
431 #endif // MEDIA_MIDI_MIDI_MANAGER_ALSA_H_ 427 #endif // MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698