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

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

Issue 764673003: Adding CopresenceState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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_impl.cc b/components/copresence/handlers/audio/audio_directive_handler_impl.cc
index c5c57f933e08e93d4009c35515338b7db3c39c9c..57284dc26867b813f1f11117332ee4b8d75716a1 100644
--- a/components/copresence/handlers/audio/audio_directive_handler_impl.cc
+++ b/components/copresence/handlers/audio/audio_directive_handler_impl.cc
@@ -5,6 +5,7 @@
#include "components/copresence/handlers/audio/audio_directive_handler_impl.h"
#include <algorithm>
+#include <vector>
#include "base/bind.h"
#include "base/logging.h"
@@ -33,23 +34,31 @@ base::TimeTicks GetEarliestEventTime(AudioDirectiveList* list,
std::min(list->GetActiveDirective()->end_time, event_time);
}
+void ConvertDirectives(const std::vector<AudioDirective>& in_directives,
+ std::vector<Directive>* out_directives) {
+ for (const AudioDirective& in_directive : in_directives)
+ out_directives->push_back(in_directive.server_directive);
+}
+
} // namespace
// Public functions.
-AudioDirectiveHandlerImpl::AudioDirectiveHandlerImpl()
- : audio_manager_(new AudioManagerImpl),
+AudioDirectiveHandlerImpl::AudioDirectiveHandlerImpl(
+ const DirectivesCallback& update_directives_callback)
+ : update_directives_callback_(update_directives_callback),
+ 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(
+ const DirectivesCallback& update_directives_callback,
scoped_ptr<AudioManager> audio_manager,
scoped_ptr<base::Timer> timer,
const scoped_refptr<TickClockRefCounted>& clock)
- : audio_manager_(audio_manager.Pass()),
+ : update_directives_callback_(update_directives_callback),
+ audio_manager_(audio_manager.Pass()),
audio_event_timer_(timer.Pass()),
clock_(clock) {}
@@ -71,12 +80,15 @@ void AudioDirectiveHandlerImpl::Initialize(WhispernetClient* whispernet_client,
}
void AudioDirectiveHandlerImpl::AddInstruction(
- const TokenInstruction& instruction,
- const std::string& op_id,
- base::TimeDelta ttl) {
+ const Directive& directive,
+ const std::string& op_id) {
DCHECK(transmits_lists_.size() == 2u && receives_lists_.size() == 2u)
<< "Call Initialize() before other AudioDirectiveHandler methods";
+ const TokenInstruction& instruction = directive.token_instruction();
+ base::TimeDelta ttl =
+ base::TimeDelta::FromMilliseconds(directive.ttl_millis());
+
switch (instruction.token_instruction_type()) {
case TRANSMIT:
DVLOG(2) << "Audio Transmit Directive received. Token: "
@@ -85,11 +97,11 @@ void AudioDirectiveHandlerImpl::AddInstruction(
<< " with TTL=" << ttl.InMilliseconds();
switch (instruction.medium()) {
case AUDIO_ULTRASOUND_PASSBAND:
- transmits_lists_[INAUDIBLE]->AddDirective(op_id, ttl);
+ transmits_lists_[INAUDIBLE]->AddDirective(op_id, directive);
audio_manager_->SetToken(INAUDIBLE, instruction.token_id());
break;
case AUDIO_AUDIBLE_DTMF:
- transmits_lists_[AUDIBLE]->AddDirective(op_id, ttl);
+ transmits_lists_[AUDIBLE]->AddDirective(op_id, directive);
audio_manager_->SetToken(AUDIBLE, instruction.token_id());
break;
default:
@@ -102,10 +114,10 @@ void AudioDirectiveHandlerImpl::AddInstruction(
<< " with TTL=" << ttl.InMilliseconds();
switch (instruction.medium()) {
case AUDIO_ULTRASOUND_PASSBAND:
- receives_lists_[INAUDIBLE]->AddDirective(op_id, ttl);
+ receives_lists_[INAUDIBLE]->AddDirective(op_id, directive);
break;
case AUDIO_AUDIBLE_DTMF:
- receives_lists_[AUDIBLE]->AddDirective(op_id, ttl);
+ receives_lists_[AUDIBLE]->AddDirective(op_id, directive);
break;
default:
NOTREACHED();
@@ -140,6 +152,7 @@ bool AudioDirectiveHandlerImpl::IsPlayingTokenHeard(AudioType type) const {
return audio_manager_->IsPlayingTokenHeard(type);
}
+
// Private functions.
void AudioDirectiveHandlerImpl::ProcessNextInstruction() {
@@ -178,6 +191,15 @@ void AudioDirectiveHandlerImpl::ProcessNextInstruction() {
base::Bind(&AudioDirectiveHandlerImpl::ProcessNextInstruction,
base::Unretained(this)));
}
+
+ // TODO(crbug.com/436584): Instead of this, store the directives
+ // in a single list, and prune them when expired.
+ std::vector<Directive> directives;
+ ConvertDirectives(transmits_lists_[AUDIBLE]->directives(), &directives);
+ ConvertDirectives(transmits_lists_[INAUDIBLE]->directives(), &directives);
+ ConvertDirectives(receives_lists_[AUDIBLE]->directives(), &directives);
+ ConvertDirectives(receives_lists_[INAUDIBLE]->directives(), &directives);
+ update_directives_callback_.Run(directives);
}
bool AudioDirectiveHandlerImpl::GetNextInstructionExpiry(

Powered by Google App Engine
This is Rietveld 408576698