| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/midi/midi_manager.h" | 5 #include "media/midi/midi_manager.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 MidiManager* MidiManager::Create() { | 65 MidiManager* MidiManager::Create() { |
| 66 ReportUsage(Usage::CREATED_ON_UNSUPPORTED_PLATFORMS); | 66 ReportUsage(Usage::CREATED_ON_UNSUPPORTED_PLATFORMS); |
| 67 return new MidiManager; | 67 return new MidiManager; |
| 68 } | 68 } |
| 69 #endif | 69 #endif |
| 70 | 70 |
| 71 void MidiManager::Shutdown() { | 71 void MidiManager::Shutdown() { |
| 72 UMA_HISTOGRAM_ENUMERATION("Media.Midi.ResultOnShutdown", | 72 UMA_HISTOGRAM_ENUMERATION("Media.Midi.ResultOnShutdown", |
| 73 static_cast<int>(result_), | 73 static_cast<int>(result_), |
| 74 static_cast<int>(Result::MAX) + 1); | 74 static_cast<int>(Result::MAX) + 1); |
| 75 base::AutoLock auto_lock(lock_); | 75 bool shutdown_synchronously = false; |
| 76 if (session_thread_runner_) { | 76 { |
| 77 session_thread_runner_->PostTask( | 77 base::AutoLock auto_lock(lock_); |
| 78 FROM_HERE, base::Bind(&MidiManager::ShutdownOnSessionThread, | 78 if (session_thread_runner_) { |
| 79 base::Unretained(this))); | 79 if (session_thread_runner_->BelongsToCurrentThread()) { |
| 80 session_thread_runner_ = nullptr; | 80 shutdown_synchronously = true; |
| 81 } else { | 81 } else { |
| 82 finalized_ = true; | 82 session_thread_runner_->PostTask( |
| 83 FROM_HERE, base::Bind(&MidiManager::ShutdownOnSessionThread, |
| 84 base::Unretained(this))); |
| 85 } |
| 86 session_thread_runner_ = nullptr; |
| 87 } else { |
| 88 finalized_ = true; |
| 89 } |
| 83 } | 90 } |
| 91 if (shutdown_synchronously) |
| 92 ShutdownOnSessionThread(); |
| 84 } | 93 } |
| 85 | 94 |
| 86 void MidiManager::StartSession(MidiManagerClient* client) { | 95 void MidiManager::StartSession(MidiManagerClient* client) { |
| 87 ReportUsage(Usage::SESSION_STARTED); | 96 ReportUsage(Usage::SESSION_STARTED); |
| 88 | 97 |
| 89 bool needs_initialization = false; | 98 bool needs_initialization = false; |
| 90 | 99 |
| 91 { | 100 { |
| 92 base::AutoLock auto_lock(lock_); | 101 base::AutoLock auto_lock(lock_); |
| 93 if (clients_.find(client) != clients_.end() || | 102 if (clients_.find(client) != clients_.end() || |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 Finalize(); | 273 Finalize(); |
| 265 base::AutoLock auto_lock(lock_); | 274 base::AutoLock auto_lock(lock_); |
| 266 finalized_ = true; | 275 finalized_ = true; |
| 267 | 276 |
| 268 // Detach all clients so that they do not call MidiManager methods any more. | 277 // Detach all clients so that they do not call MidiManager methods any more. |
| 269 for (auto* client : clients_) | 278 for (auto* client : clients_) |
| 270 client->Detach(); | 279 client->Detach(); |
| 271 } | 280 } |
| 272 | 281 |
| 273 } // namespace midi | 282 } // namespace midi |
| OLD | NEW |