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

Unified Diff: components/copresence/handlers/audio/audio_directive_handler_impl.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_impl.cc
diff --git a/components/copresence/handlers/audio/audio_directive_handler.cc b/components/copresence/handlers/audio/audio_directive_handler_impl.cc
similarity index 55%
rename from components/copresence/handlers/audio/audio_directive_handler.cc
rename to components/copresence/handlers/audio/audio_directive_handler_impl.cc
index 7563193a23a42206bd450af616898c44b84707fb..e11e1035cb05bf714f46ebf4f67d4f85bfbf38e1 100644
--- a/components/copresence/handlers/audio/audio_directive_handler.cc
+++ b/components/copresence/handlers/audio/audio_directive_handler_impl.cc
@@ -2,7 +2,9 @@
// 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 "components/copresence/handlers/audio/audio_directive_handler_impl.h"
+
+#include <algorithm>
#include "base/bind.h"
#include "base/logging.h"
@@ -10,6 +12,7 @@
#include "base/time/default_tick_clock.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
+#include "components/copresence/handlers/audio/audio_directive_list.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"
@@ -25,36 +28,53 @@ base::TimeTicks GetEarliestEventTime(AudioDirectiveList* list,
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);
+ return event_time.is_null() ?
+ list->GetActiveDirective()->end_time :
+ 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))) {
-}
+// Public functions.
-AudioDirectiveHandler::~AudioDirectiveHandler() {
-}
+AudioDirectiveHandlerImpl::AudioDirectiveHandlerImpl()
+ : audio_manager_(new AudioManagerImpl),
+ audio_event_timer_(new base::OneShotTimer<AudioDirectiveHandler>),
+ clock_(new TickClockRefCounted(new base::DefaultTickClock)) {}
+
+// TODO(ckehoe): Merge these two constructors when
+// delegating constructors are allowed.
+AudioDirectiveHandlerImpl::AudioDirectiveHandlerImpl(
+ scoped_ptr<AudioManager> audio_manager,
+ scoped_ptr<base::Timer> timer,
+ const scoped_refptr<TickClockRefCounted>& clock)
+ : audio_manager_(audio_manager.Pass()),
+ audio_event_timer_(timer.Pass()),
+ clock_(clock) {}
+
+AudioDirectiveHandlerImpl::~AudioDirectiveHandlerImpl() {}
-void AudioDirectiveHandler::Initialize(
+void AudioDirectiveHandlerImpl::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);
+
+ DCHECK(transmits_lists_.empty());
+ transmits_lists_.push_back(new AudioDirectiveList(clock_));
+ transmits_lists_.push_back(new AudioDirectiveList(clock_));
+
+ DCHECK(receives_lists_.empty());
+ receives_lists_.push_back(new AudioDirectiveList(clock_));
+ receives_lists_.push_back(new AudioDirectiveList(clock_));
}
-void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction,
- const std::string& op_id,
- base::TimeDelta ttl) {
+void AudioDirectiveHandlerImpl::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: "
@@ -63,11 +83,11 @@ void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction,
<< " with TTL=" << ttl.InMilliseconds();
switch (instruction.medium()) {
case AUDIO_ULTRASOUND_PASSBAND:
- transmits_list_[INAUDIBLE].AddDirective(op_id, ttl);
+ transmits_lists_[INAUDIBLE]->AddDirective(op_id, ttl);
audio_manager_->SetToken(INAUDIBLE, instruction.token_id());
break;
case AUDIO_AUDIBLE_DTMF:
- transmits_list_[AUDIBLE].AddDirective(op_id, ttl);
+ transmits_lists_[AUDIBLE]->AddDirective(op_id, ttl);
audio_manager_->SetToken(AUDIBLE, instruction.token_id());
break;
default:
@@ -80,10 +100,10 @@ void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction,
<< " with TTL=" << ttl.InMilliseconds();
switch (instruction.medium()) {
case AUDIO_ULTRASOUND_PASSBAND:
- receives_list_[INAUDIBLE].AddDirective(op_id, ttl);
+ receives_lists_[INAUDIBLE]->AddDirective(op_id, ttl);
break;
case AUDIO_AUDIBLE_DTMF:
- receives_list_[AUDIBLE].AddDirective(op_id, ttl);
+ receives_lists_[AUDIBLE]->AddDirective(op_id, ttl);
break;
default:
NOTREACHED();
@@ -97,60 +117,47 @@ void AudioDirectiveHandler::AddInstruction(const TokenInstruction& instruction,
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);
+void AudioDirectiveHandlerImpl::RemoveInstructions(const std::string& op_id) {
+ transmits_lists_[AUDIBLE]->RemoveDirective(op_id);
+ transmits_lists_[INAUDIBLE]->RemoveDirective(op_id);
+ receives_lists_[AUDIBLE]->RemoveDirective(op_id);
+ receives_lists_[INAUDIBLE]->RemoveDirective(op_id);
ProcessNextInstruction();
}
-const std::string AudioDirectiveHandler::PlayingToken(AudioType type) const {
+const std::string AudioDirectiveHandlerImpl::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.
+// Private functions.
-void AudioDirectiveHandler::ProcessNextInstruction() {
+void AudioDirectiveHandlerImpl::ProcessNextInstruction() {
DCHECK(audio_event_timer_);
audio_event_timer_->Stop();
// Change |audio_manager_| state for audible transmits.
- if (transmits_list_[AUDIBLE].GetActiveDirective())
+ if (transmits_lists_[AUDIBLE]->GetActiveDirective())
audio_manager_->StartPlaying(AUDIBLE);
else
audio_manager_->StopPlaying(AUDIBLE);
// Change audio_manager_ state for inaudible transmits.
- if (transmits_list_[INAUDIBLE].GetActiveDirective())
+ if (transmits_lists_[INAUDIBLE]->GetActiveDirective())
audio_manager_->StartPlaying(INAUDIBLE);
else
audio_manager_->StopPlaying(INAUDIBLE);
// Change audio_manager_ state for audible receives.
- if (receives_list_[AUDIBLE].GetActiveDirective())
+ if (receives_lists_[AUDIBLE]->GetActiveDirective())
audio_manager_->StartRecording(AUDIBLE);
else
audio_manager_->StopRecording(AUDIBLE);
// Change audio_manager_ state for inaudible receives.
- if (receives_list_[INAUDIBLE].GetActiveDirective())
+ if (receives_lists_[INAUDIBLE]->GetActiveDirective())
audio_manager_->StartRecording(INAUDIBLE);
else
audio_manager_->StopRecording(INAUDIBLE);
@@ -160,18 +167,19 @@ void AudioDirectiveHandler::ProcessNextInstruction() {
audio_event_timer_->Start(
FROM_HERE,
next_event_time - clock_->NowTicks(),
- base::Bind(&AudioDirectiveHandler::ProcessNextInstruction,
+ base::Bind(&AudioDirectiveHandlerImpl::ProcessNextInstruction,
base::Unretained(this)));
}
}
-bool AudioDirectiveHandler::GetNextInstructionExpiry(base::TimeTicks* expiry) {
+bool AudioDirectiveHandlerImpl::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);
+ *expiry = GetEarliestEventTime(transmits_lists_[AUDIBLE], base::TimeTicks());
+ *expiry = GetEarliestEventTime(transmits_lists_[INAUDIBLE], *expiry);
+ *expiry = GetEarliestEventTime(receives_lists_[AUDIBLE], *expiry);
+ *expiry = GetEarliestEventTime(receives_lists_[INAUDIBLE], *expiry);
return !expiry->is_null();
}

Powered by Google App Engine
This is Rietveld 408576698