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

Unified Diff: components/copresence/handlers/audio/audio_directive_handler.cc

Issue 690213004: Refactoring AudioDirectiveHandler to support testing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: components/copresence/handlers/audio/audio_directive_handler.cc
diff --git a/components/copresence/handlers/audio/audio_directive_handler.cc b/components/copresence/handlers/audio/audio_directive_handler.cc
deleted file mode 100644
index 7563193a23a42206bd450af616898c44b84707fb..0000000000000000000000000000000000000000
--- a/components/copresence/handlers/audio/audio_directive_handler.cc
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/copresence/handlers/audio/audio_directive_handler.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/time/default_tick_clock.h"
-#include "base/time/time.h"
-#include "base/timer/timer.h"
-#include "components/copresence/handlers/audio/tick_clock_ref_counted.h"
-#include "components/copresence/mediums/audio/audio_manager_impl.h"
-#include "components/copresence/proto/data.pb.h"
-#include "components/copresence/public/copresence_constants.h"
-#include "media/base/audio_bus.h"
-
-namespace copresence {
-
-namespace {
-
-base::TimeTicks GetEarliestEventTime(AudioDirectiveList* list,
- base::TimeTicks event_time) {
- if (!list->GetActiveDirective())
- return event_time;
-
- if (event_time.is_null())
- return list->GetActiveDirective()->end_time;
- else
- return std::min(list->GetActiveDirective()->end_time, event_time);
-}
-
-} // namespace
-
-// Public methods.
-
-AudioDirectiveHandler::AudioDirectiveHandler()
- : audio_event_timer_(new base::OneShotTimer<AudioDirectiveHandler>),
- clock_(new TickClockRefCounted(
- make_scoped_ptr(new base::DefaultTickClock))) {
-}
-
-AudioDirectiveHandler::~AudioDirectiveHandler() {
-}
-
-void AudioDirectiveHandler::Initialize(
- const AudioManager::DecodeSamplesCallback& decode_cb,
- const AudioManager::EncodeTokenCallback& encode_cb) {
- if (!audio_manager_)
- audio_manager_.reset(new AudioManagerImpl());
- audio_manager_->Initialize(decode_cb, encode_cb);
-}
-
-void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction,
- const std::string& op_id,
- base::TimeDelta ttl) {
- switch (instruction.token_instruction_type()) {
- case TRANSMIT:
- DVLOG(2) << "Audio Transmit Directive received. Token: "
- << instruction.token_id()
- << " with medium=" << instruction.medium()
- << " with TTL=" << ttl.InMilliseconds();
- switch (instruction.medium()) {
- case AUDIO_ULTRASOUND_PASSBAND:
- transmits_list_[INAUDIBLE].AddDirective(op_id, ttl);
- audio_manager_->SetToken(INAUDIBLE, instruction.token_id());
- break;
- case AUDIO_AUDIBLE_DTMF:
- transmits_list_[AUDIBLE].AddDirective(op_id, ttl);
- audio_manager_->SetToken(AUDIBLE, instruction.token_id());
- break;
- default:
- NOTREACHED();
- }
- break;
- case RECEIVE:
- DVLOG(2) << "Audio Receive Directive received."
- << " with medium=" << instruction.medium()
- << " with TTL=" << ttl.InMilliseconds();
- switch (instruction.medium()) {
- case AUDIO_ULTRASOUND_PASSBAND:
- receives_list_[INAUDIBLE].AddDirective(op_id, ttl);
- break;
- case AUDIO_AUDIBLE_DTMF:
- receives_list_[AUDIBLE].AddDirective(op_id, ttl);
- break;
- default:
- NOTREACHED();
- }
- break;
- case UNKNOWN_TOKEN_INSTRUCTION_TYPE:
- default:
- LOG(WARNING) << "Unknown Audio Transmit Directive received. type = "
- << instruction.token_instruction_type();
- }
- ProcessNextInstruction();
-}
-
-void AudioDirectiveHandler::RemoveInstructions(const std::string& op_id) {
- transmits_list_[AUDIBLE].RemoveDirective(op_id);
- transmits_list_[INAUDIBLE].RemoveDirective(op_id);
- receives_list_[AUDIBLE].RemoveDirective(op_id);
- receives_list_[INAUDIBLE].RemoveDirective(op_id);
-
- ProcessNextInstruction();
-}
-
-const std::string AudioDirectiveHandler::PlayingToken(AudioType type) const {
- return audio_manager_->GetToken(type);
-}
-
-void AudioDirectiveHandler::set_clock_for_testing(
- const scoped_refptr<TickClockRefCounted>& clock) {
- clock_ = clock;
-
- transmits_list_[AUDIBLE].set_clock_for_testing(clock);
- transmits_list_[INAUDIBLE].set_clock_for_testing(clock);
- receives_list_[AUDIBLE].set_clock_for_testing(clock);
- receives_list_[INAUDIBLE].set_clock_for_testing(clock);
-}
-
-void AudioDirectiveHandler::set_timer_for_testing(
- scoped_ptr<base::Timer> timer) {
- audio_event_timer_.swap(timer);
-}
-
-// Private methods.
-
-void AudioDirectiveHandler::ProcessNextInstruction() {
- DCHECK(audio_event_timer_);
- audio_event_timer_->Stop();
-
- // Change |audio_manager_| state for audible transmits.
- if (transmits_list_[AUDIBLE].GetActiveDirective())
- audio_manager_->StartPlaying(AUDIBLE);
- else
- audio_manager_->StopPlaying(AUDIBLE);
-
- // Change audio_manager_ state for inaudible transmits.
- if (transmits_list_[INAUDIBLE].GetActiveDirective())
- audio_manager_->StartPlaying(INAUDIBLE);
- else
- audio_manager_->StopPlaying(INAUDIBLE);
-
- // Change audio_manager_ state for audible receives.
- if (receives_list_[AUDIBLE].GetActiveDirective())
- audio_manager_->StartRecording(AUDIBLE);
- else
- audio_manager_->StopRecording(AUDIBLE);
-
- // Change audio_manager_ state for inaudible receives.
- if (receives_list_[INAUDIBLE].GetActiveDirective())
- audio_manager_->StartRecording(INAUDIBLE);
- else
- audio_manager_->StopRecording(INAUDIBLE);
-
- base::TimeTicks next_event_time;
- if (GetNextInstructionExpiry(&next_event_time)) {
- audio_event_timer_->Start(
- FROM_HERE,
- next_event_time - clock_->NowTicks(),
- base::Bind(&AudioDirectiveHandler::ProcessNextInstruction,
- base::Unretained(this)));
- }
-}
-
-bool AudioDirectiveHandler::GetNextInstructionExpiry(base::TimeTicks* expiry) {
- DCHECK(expiry);
-
- *expiry = GetEarliestEventTime(&transmits_list_[AUDIBLE], base::TimeTicks());
- *expiry = GetEarliestEventTime(&transmits_list_[INAUDIBLE], *expiry);
- *expiry = GetEarliestEventTime(&receives_list_[AUDIBLE], *expiry);
- *expiry = GetEarliestEventTime(&receives_list_[INAUDIBLE], *expiry);
-
- return !expiry->is_null();
-}
-
-} // namespace copresence

Powered by Google App Engine
This is Rietveld 408576698