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

Side by Side Diff: media/audio/mac/audio_manager_mac.cc

Issue 2784433002: Ensures that audio tasks cannot run after AudioManager is deleted. (Closed)
Patch Set: rebase Created 3 years, 7 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
« no previous file with comments | « media/audio/mac/audio_manager_mac.h ('k') | media/audio/mock_audio_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/audio/mac/audio_manager_mac.h" 5 #include "media/audio/mac/audio_manager_mac.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 502
503 bool is_suspending_; 503 bool is_suspending_;
504 const bool is_monitoring_; 504 const bool is_monitoring_;
505 base::TimeTicks earliest_start_time_; 505 base::TimeTicks earliest_start_time_;
506 base::ThreadChecker thread_checker_; 506 base::ThreadChecker thread_checker_;
507 size_t num_resume_notifications_; 507 size_t num_resume_notifications_;
508 508
509 DISALLOW_COPY_AND_ASSIGN(AudioPowerObserver); 509 DISALLOW_COPY_AND_ASSIGN(AudioPowerObserver);
510 }; 510 };
511 511
512 AudioManagerMac::AudioManagerMac( 512 AudioManagerMac::AudioManagerMac(std::unique_ptr<AudioThread> audio_thread,
513 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 513 AudioLogFactory* audio_log_factory)
514 scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner, 514 : AudioManagerBase(std::move(audio_thread), audio_log_factory),
515 AudioLogFactory* audio_log_factory)
516 : AudioManagerBase(std::move(task_runner),
517 std::move(worker_task_runner),
518 audio_log_factory),
519 current_sample_rate_(0), 515 current_sample_rate_(0),
520 current_output_device_(kAudioDeviceUnknown), 516 current_output_device_(kAudioDeviceUnknown),
521 in_shutdown_(false) { 517 in_shutdown_(false) {
522 SetMaxOutputStreamsAllowed(kMaxOutputStreams); 518 SetMaxOutputStreamsAllowed(kMaxOutputStreams);
523 519
524 // Task must be posted last to avoid races from handing out "this" to the 520 // Task must be posted last to avoid races from handing out "this" to the
525 // audio thread. Always PostTask even if we're on the right thread since 521 // audio thread. Always PostTask even if we're on the right thread since
526 // AudioManager creation is on the startup path and this may be slow. 522 // AudioManager creation is on the startup path and this may be slow.
527 GetTaskRunner()->PostTask( 523 GetTaskRunner()->PostTask(
528 FROM_HERE, base::Bind(&AudioManagerMac::InitializeOnAudioThread, 524 FROM_HERE, base::Bind(&AudioManagerMac::InitializeOnAudioThread,
529 base::Unretained(this))); 525 base::Unretained(this)));
530 } 526 }
531 527
532 AudioManagerMac::~AudioManagerMac() { 528 AudioManagerMac::~AudioManagerMac() = default;
533 DCHECK(GetTaskRunner()->BelongsToCurrentThread()); 529
530 void AudioManagerMac::ShutdownOnAudioThread() {
534 // We are now in shutdown mode. This flag disables MaybeChangeBufferSize() 531 // We are now in shutdown mode. This flag disables MaybeChangeBufferSize()
535 // and IncreaseIOBufferSizeIfPossible() which both touches native Core Audio 532 // and IncreaseIOBufferSizeIfPossible() which both touches native Core Audio
536 // APIs and they can fail and disrupt tests during shutdown. 533 // APIs and they can fail and disrupt tests during shutdown.
537 in_shutdown_ = true; 534 in_shutdown_ = true;
538 Shutdown(); 535 AudioManagerBase::ShutdownOnAudioThread();
539 } 536 }
540 537
541 bool AudioManagerMac::HasAudioOutputDevices() { 538 bool AudioManagerMac::HasAudioOutputDevices() {
542 return HasAudioHardware(kAudioHardwarePropertyDefaultOutputDevice); 539 return HasAudioHardware(kAudioHardwarePropertyDefaultOutputDevice);
543 } 540 }
544 541
545 bool AudioManagerMac::HasAudioInputDevices() { 542 bool AudioManagerMac::HasAudioInputDevices() {
546 return HasAudioHardware(kAudioHardwarePropertyDefaultInputDevice); 543 return HasAudioHardware(kAudioHardwarePropertyDefaultInputDevice);
547 } 544 }
548 545
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 basic_input_streams_.end(), 1175 basic_input_streams_.end(),
1179 stream); 1176 stream);
1180 if (stream_it == basic_input_streams_.end()) 1177 if (stream_it == basic_input_streams_.end())
1181 low_latency_input_streams_.remove(static_cast<AUAudioInputStream*>(stream)); 1178 low_latency_input_streams_.remove(static_cast<AUAudioInputStream*>(stream));
1182 else 1179 else
1183 basic_input_streams_.erase(stream_it); 1180 basic_input_streams_.erase(stream_it);
1184 1181
1185 AudioManagerBase::ReleaseInputStream(stream); 1182 AudioManagerBase::ReleaseInputStream(stream);
1186 } 1183 }
1187 1184
1188 ScopedAudioManagerPtr CreateAudioManager( 1185 std::unique_ptr<AudioManager> CreateAudioManager(
1189 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 1186 std::unique_ptr<AudioThread> audio_thread,
1190 scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
1191 AudioLogFactory* audio_log_factory) { 1187 AudioLogFactory* audio_log_factory) {
1192 return ScopedAudioManagerPtr( 1188 return base::MakeUnique<AudioManagerMac>(std::move(audio_thread),
1193 new AudioManagerMac(std::move(task_runner), std::move(worker_task_runner), 1189 audio_log_factory);
1194 audio_log_factory));
1195 } 1190 }
1196 1191
1197 } // namespace media 1192 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/mac/audio_manager_mac.h ('k') | media/audio/mock_audio_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698