OLD | NEW |
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/audio_output_controller.h" | 5 #include "media/audio/audio_output_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 } | 288 } |
289 | 289 |
290 void AudioOutputController::DoReportError() { | 290 void AudioOutputController::DoReportError() { |
291 DCHECK(message_loop_->BelongsToCurrentThread()); | 291 DCHECK(message_loop_->BelongsToCurrentThread()); |
292 if (state_ != kClosed) | 292 if (state_ != kClosed) |
293 handler_->OnError(); | 293 handler_->OnError(); |
294 } | 294 } |
295 | 295 |
296 int AudioOutputController::OnMoreData(AudioBus* dest, | 296 int AudioOutputController::OnMoreData(AudioBus* dest, |
297 AudioBuffersState buffers_state) { | 297 AudioBuffersState buffers_state) { |
298 return OnMoreIOData(NULL, dest, buffers_state); | 298 TRACE_EVENT0("audio", "AudioOutputController::OnMoreData"); |
299 } | |
300 | |
301 int AudioOutputController::OnMoreIOData(AudioBus* source, | |
302 AudioBus* dest, | |
303 AudioBuffersState buffers_state) { | |
304 TRACE_EVENT0("audio", "AudioOutputController::OnMoreIOData"); | |
305 | 299 |
306 // Indicate that we haven't wedged (at least not indefinitely, WedgeCheck() | 300 // Indicate that we haven't wedged (at least not indefinitely, WedgeCheck() |
307 // may have already fired if OnMoreIOData() took an abnormal amount of time). | 301 // may have already fired if OnMoreIOData() took an abnormal amount of time). |
308 // Since this thread is the only writer of |on_more_io_data_called_| once the | 302 // Since this thread is the only writer of |on_more_io_data_called_| once the |
309 // thread starts, its safe to compare and then increment. | 303 // thread starts, its safe to compare and then increment. |
310 if (base::AtomicRefCountIsZero(&on_more_io_data_called_)) | 304 if (base::AtomicRefCountIsZero(&on_more_io_data_called_)) |
311 base::AtomicRefCountInc(&on_more_io_data_called_); | 305 base::AtomicRefCountInc(&on_more_io_data_called_); |
312 | 306 |
313 sync_reader_->Read(source, dest); | 307 sync_reader_->Read(dest); |
314 | 308 |
315 const int frames = dest->frames(); | 309 const int frames = dest->frames(); |
316 sync_reader_->UpdatePendingBytes( | 310 sync_reader_->UpdatePendingBytes( |
317 buffers_state.total_bytes() + frames * params_.GetBytesPerFrame()); | 311 buffers_state.total_bytes() + frames * params_.GetBytesPerFrame()); |
318 | 312 |
319 #if defined(AUDIO_POWER_MONITORING) | 313 #if defined(AUDIO_POWER_MONITORING) |
320 power_monitor_.Scan(*dest, frames); | 314 power_monitor_.Scan(*dest, frames); |
321 #endif | 315 #endif |
322 | 316 |
323 return frames; | 317 return frames; |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 DCHECK(message_loop_->BelongsToCurrentThread()); | 428 DCHECK(message_loop_->BelongsToCurrentThread()); |
435 | 429 |
436 // If we should be playing and we haven't, that's a wedge. | 430 // If we should be playing and we haven't, that's a wedge. |
437 if (state_ == kPlaying) { | 431 if (state_ == kPlaying) { |
438 UMA_HISTOGRAM_BOOLEAN("Media.AudioOutputControllerPlaybackStartupSuccess", | 432 UMA_HISTOGRAM_BOOLEAN("Media.AudioOutputControllerPlaybackStartupSuccess", |
439 base::AtomicRefCountIsOne(&on_more_io_data_called_)); | 433 base::AtomicRefCountIsOne(&on_more_io_data_called_)); |
440 } | 434 } |
441 } | 435 } |
442 | 436 |
443 } // namespace media | 437 } // namespace media |
OLD | NEW |