Index: content/browser/renderer_host/media/audio_sync_reader.cc |
diff --git a/content/browser/renderer_host/media/audio_sync_reader.cc b/content/browser/renderer_host/media/audio_sync_reader.cc |
index e6657ef74ca827455663b6a4862b71cfe19debb9..0f09fc138aeed7ca353af478fdf8ddc62238e82d 100644 |
--- a/content/browser/renderer_host/media/audio_sync_reader.cc |
+++ b/content/browser/renderer_host/media/audio_sync_reader.cc |
@@ -121,9 +121,7 @@ bool AudioSyncReader::PrepareForeignSocket( |
} |
bool AudioSyncReader::WaitUntilDataIsReady() { |
- base::TimeDelta timeout = maximum_wait_time_; |
const base::TimeTicks start_time = base::TimeTicks::Now(); |
- const base::TimeTicks finish_time = start_time + timeout; |
// Check if data is ready and if not, wait a reasonable amount of time for it. |
// |
@@ -131,33 +129,26 @@ bool AudioSyncReader::WaitUntilDataIsReady() { |
// and one here. Every time a buffer is requested via UpdatePendingBytes(), |
// |buffer_index_| is incremented. Subsequently every time the renderer has a |
// buffer ready it increments its counter and sends the counter value over the |
- // SyncSocket. Data is ready when |buffer_index_| matches the counter value |
- // received from the renderer. |
+ // SyncSocket. Data is ready when |socket_| receive a counter value from |
+ // the renderer. |
// |
- // The counter values may temporarily become out of sync if the renderer is |
+ // The counter values can become out of sync if the renderer is |
// unable to deliver audio fast enough. It's assumed that the renderer will |
- // catch up at some point, which means discarding counter values read from the |
- // SyncSocket which don't match our current buffer index. |
- size_t bytes_received = 0; |
+ // automatically catch up at some point, and the browser should not wait for |
+ // the synchronization since it needs to feed the received audio data to |
+ // hardware ASAP. |
uint32 renderer_buffer_index = 0; |
- while (timeout.InMicroseconds() > 0) { |
no longer working on chromium
2014/10/16 20:27:56
Dale, besides the buffer size issue, I think we st
DaleCurtis
2014/10/16 21:14:14
I don't understand what you're asking. The loop br
|
- bytes_received = socket_->ReceiveWithTimeout( |
- &renderer_buffer_index, sizeof(renderer_buffer_index), timeout); |
- if (bytes_received != sizeof(renderer_buffer_index)) { |
- bytes_received = 0; |
- break; |
- } |
- |
- if (renderer_buffer_index == buffer_index_) |
- break; |
- |
- // Reduce the timeout value as receives succeed, but aren't the right index. |
- timeout = finish_time - base::TimeTicks::Now(); |
+ size_t bytes_received = socket_->ReceiveWithTimeout( |
+ &renderer_buffer_index, sizeof(renderer_buffer_index), |
+ maximum_wait_time_); |
+ if (bytes_received != sizeof(renderer_buffer_index)) { |
+ // Set |bytes_received| to 0 to indicate it is a timeout. |
+ bytes_received = 0; |
} |
// Receive timed out or another error occurred. Receive can timeout if the |
// renderer is unable to deliver audio data within the allotted time. |
- if (!bytes_received || renderer_buffer_index != buffer_index_) { |
+ if (!bytes_received) { |
DVLOG(2) << "AudioSyncReader::WaitUntilDataIsReady() timed out."; |
base::TimeDelta time_since_start = base::TimeTicks::Now() - start_time; |