Index: components/copresence/mediums/audio/audio_manager_impl.cc |
diff --git a/components/copresence/mediums/audio/audio_manager_impl.cc b/components/copresence/mediums/audio/audio_manager_impl.cc |
index fadfdf9847ef7bb5426bd91dd26b84ae2f3f223c..6d9f1d3d87eed39c8f61296016bb49140dbca757 100644 |
--- a/components/copresence/mediums/audio/audio_manager_impl.cc |
+++ b/components/copresence/mediums/audio/audio_manager_impl.cc |
@@ -12,6 +12,7 @@ |
#include "base/logging.h" |
#include "base/run_loop.h" |
#include "base/strings/string_util.h" |
+#include "base/time/time.h" |
#include "components/copresence/mediums/audio/audio_player_impl.h" |
#include "components/copresence/mediums/audio/audio_recorder_impl.h" |
#include "components/copresence/public/copresence_constants.h" |
@@ -36,6 +37,7 @@ std::string FromUrlSafe(std::string token) { |
const int kSampleExpiryTimeMs = 60 * 60 * 1000; // 60 minutes. |
const int kMaxSamples = 10000; |
+const int kTokenTimeoutMs = 2000; |
} // namespace |
@@ -48,8 +50,6 @@ AudioManagerImpl::AudioManagerImpl() |
playing_[INAUDIBLE] = false; |
recording_[AUDIBLE] = false; |
recording_[INAUDIBLE] = false; |
- heard_own_token_[AUDIBLE] = false; |
- heard_own_token_[INAUDIBLE] = false; |
player_[AUDIBLE] = nullptr; |
player_[INAUDIBLE] = nullptr; |
@@ -107,6 +107,7 @@ AudioManagerImpl::~AudioManagerImpl() { |
void AudioManagerImpl::StartPlaying(AudioType type) { |
DCHECK(type == AUDIBLE || type == INAUDIBLE); |
playing_[type] = true; |
+ started_playing_[type] = base::Time::Now(); |
// If we don't have our token encoded yet, this check will be false, for now. |
// Once our token is encoded, OnTokenEncoded will call UpdateToken, which |
// will call this code again (if we're still supposed to be playing). |
@@ -170,7 +171,15 @@ bool AudioManagerImpl::IsPlaying(AudioType type) { |
} |
bool AudioManagerImpl::IsPlayingTokenHeard(AudioType type) { |
- return heard_own_token_[type]; |
+ base::TimeDelta tokenTimeout = |
+ base::TimeDelta::FromMilliseconds(kTokenTimeoutMs); |
+ |
+ // This is a bit of a hack. If we haven't been playing long enough, |
+ // return true to avoid tripping an audio fail alarm. |
+ if (base::Time::Now() - started_playing_[type] < tokenTimeout) |
+ return true; |
+ |
+ return base::Time::Now() - heard_own_token_[type] < tokenTimeout; |
} |
// Private methods. |
@@ -188,7 +197,7 @@ void AudioManagerImpl::OnTokensFound(const std::vector<AudioToken>& tokens) { |
for (const auto& token : tokens) { |
AudioType type = token.audible ? AUDIBLE : INAUDIBLE; |
if (playing_token_[type] == token.token) |
- heard_own_token_[type] = true; |
+ heard_own_token_[type] = base::Time::Now(); |
if (recording_[AUDIBLE] && token.audible) { |
tokens_to_report.push_back(token); |