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

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: Rebase. 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 base::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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 private: 261 private:
263 const std::string name_; 262 const std::string name_;
264 const PortDirection direction_; 263 const PortDirection direction_;
265 const bool midi_; 264 const bool midi_;
266 265
267 DISALLOW_COPY_AND_ASSIGN(Port); 266 DISALLOW_COPY_AND_ASSIGN(Port);
268 }; 267 };
269 268
270 class Client { 269 class Client {
271 public: 270 public:
272 typedef std::map<int, Port*> PortMap; 271 typedef base::ScopedPtrMap<int, scoped_ptr<Port>> PortMap;
273 272
274 Client(const std::string& name, snd_seq_client_type_t type); 273 Client(const std::string& name, snd_seq_client_type_t type);
275 ~Client(); 274 ~Client();
276 275
277 std::string name() const { return name_; } 276 std::string name() const { return name_; }
278 snd_seq_client_type_t type() const { return type_; } 277 snd_seq_client_type_t type() const { return type_; }
279 void AddPort(int addr, scoped_ptr<Port> port); 278 void AddPort(int addr, scoped_ptr<Port> port);
280 void RemovePort(int addr); 279 void RemovePort(int addr);
281 PortMap::const_iterator begin() const; 280 PortMap::const_iterator begin() const;
282 PortMap::const_iterator end() const; 281 PortMap::const_iterator end() const;
283 282
284 private: 283 private:
285 const std::string name_; 284 const std::string name_;
286 const snd_seq_client_type_t type_; 285 const snd_seq_client_type_t type_;
287 PortMap ports_; 286 PortMap ports_;
288 STLValueDeleter<PortMap> ports_deleter_;
289 287
290 DISALLOW_COPY_AND_ASSIGN(Client); 288 DISALLOW_COPY_AND_ASSIGN(Client);
291 }; 289 };
292 290
293 typedef std::map<int, Client*> ClientMap; 291 typedef base::ScopedPtrMap<int, scoped_ptr<Client>> ClientMap;
294 292
295 ClientMap clients_; 293 ClientMap clients_;
296 STLValueDeleter<ClientMap> clients_deleter_;
297 294
298 // This is the current number of clients we know about that have 295 // This is the current number of clients we know about that have
299 // cards. When this number matches alsa_card_midi_count_, we know 296 // cards. When this number matches alsa_card_midi_count_, we know
300 // we are in sync between ALSA and udev. Until then, we cannot generate 297 // we are in sync between ALSA and udev. Until then, we cannot generate
301 // MIDIConnectionEvents to web clients. 298 // MIDIConnectionEvents to web clients.
302 int card_client_count_; 299 int card_client_count_;
303 300
304 DISALLOW_COPY_AND_ASSIGN(AlsaSeqState); 301 DISALLOW_COPY_AND_ASSIGN(AlsaSeqState);
305 }; 302 };
306 303
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 // One input port, many output ports. 399 // One input port, many output ports.
403 int in_port_id_ = -1; 400 int in_port_id_ = -1;
404 OutPortMap out_ports_; // guarded by out_ports_lock_ 401 OutPortMap out_ports_; // guarded by out_ports_lock_
405 base::Lock out_ports_lock_; // guards out_ports_ 402 base::Lock out_ports_lock_; // guards out_ports_
406 403
407 // Mapping from ALSA client:port to our index. 404 // Mapping from ALSA client:port to our index.
408 SourceMap source_map_; 405 SourceMap source_map_;
409 406
410 // Mapping from card to devices. 407 // Mapping from card to devices.
411 AlsaCardMap alsa_cards_; 408 AlsaCardMap alsa_cards_;
412 STLValueDeleter<AlsaCardMap> alsa_cards_deleter_;
413 409
414 // This is the current count of midi devices across all cards we know 410 // This is the current count of midi devices across all cards we know
415 // about. When this number matches card_client_count_ in AlsaSeqState, 411 // about. When this number matches card_client_count_ in AlsaSeqState,
416 // we are safe to generate MIDIConnectionEvents. Otherwise we need to 412 // we are safe to generate MIDIConnectionEvents. Otherwise we need to
417 // wait for our information from ALSA and udev to get back in sync. 413 // wait for our information from ALSA and udev to get back in sync.
418 int alsa_card_midi_count_ = 0; 414 int alsa_card_midi_count_ = 0;
419 415
420 // ALSA event -> MIDI coder. 416 // ALSA event -> MIDI coder.
421 scoped_ptr<snd_midi_event_t, SndMidiEventDeleter> decoder_; 417 scoped_ptr<snd_midi_event_t, SndMidiEventDeleter> decoder_;
422 418
423 // udev, for querying hardware devices. 419 // udev, for querying hardware devices.
424 device::ScopedUdevPtr udev_; 420 device::ScopedUdevPtr udev_;
425 device::ScopedUdevMonitorPtr udev_monitor_; 421 device::ScopedUdevMonitorPtr udev_monitor_;
426 422
427 base::Thread send_thread_; 423 base::Thread send_thread_;
428 base::Thread event_thread_; 424 base::Thread event_thread_;
429 425
430 bool event_thread_shutdown_ = false; // guarded by shutdown_lock_ 426 bool event_thread_shutdown_ = false; // guarded by shutdown_lock_
431 base::Lock shutdown_lock_; // guards event_thread_shutdown_ 427 base::Lock shutdown_lock_; // guards event_thread_shutdown_
432 428
433 DISALLOW_COPY_AND_ASSIGN(MidiManagerAlsa); 429 DISALLOW_COPY_AND_ASSIGN(MidiManagerAlsa);
434 }; 430 };
435 431
436 } // namespace midi 432 } // namespace midi
437 } // namespace media 433 } // namespace media
438 434
439 #endif // MEDIA_MIDI_MIDI_MANAGER_ALSA_H_ 435 #endif // MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
OLDNEW
« no previous file with comments | « components/sync_driver/non_blocking_data_type_manager.cc ('k') | media/midi/midi_manager_alsa.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698