Index: content/browser/renderer_host/media/audio_sync_reader.cc |
=================================================================== |
--- content/browser/renderer_host/media/audio_sync_reader.cc (revision 99444) |
+++ content/browser/renderer_host/media/audio_sync_reader.cc (working copy) |
@@ -8,12 +8,9 @@ |
#include "base/process_util.h" |
#include "base/shared_memory.h" |
-#include "base/threading/platform_thread.h" |
#include "media/audio/audio_buffers_state.h" |
#include "media/audio/audio_util.h" |
-const int kMinIntervalBetweenReadCalls = 10; |
- |
AudioSyncReader::AudioSyncReader(base::SharedMemory* shared_memory) |
: shared_memory_(shared_memory) { |
} |
@@ -29,19 +26,6 @@ |
uint32 AudioSyncReader::Read(void* data, uint32 size) { |
uint32 max_size = media::PacketSizeSizeInBytes( |
shared_memory_->created_size()); |
- |
- // HACK: yield if reader is called too often. |
- // Problem is lack of synchronization between host and renderer. We cannot be |
- // sure if renderer already filled the buffer, and due to all the plugins we |
- // cannot change the API, so we yield if previous call was too recent. |
- // Optimization: if renderer is "new" one that writes length of data we can |
- // stop yielding the moment length is written -- not ideal solution, |
- // but better than nothing. |
- while (media::IsUnknownDataSize(shared_memory_, max_size) && |
- ((base::Time::Now() - previous_call_time_).InMilliseconds() < |
- kMinIntervalBetweenReadCalls)) { |
- base::PlatformThread::YieldCurrentThread(); |
- } |
uint32 read_size = std::min(media::GetActualDataSizeInBytes(shared_memory_, |
max_size), |
size); |
@@ -56,11 +40,9 @@ |
// Zero out the entire buffer. |
memset(shared_memory_->memory(), 0, max_size); |
- // Store unknown length of data into buffer, in case renderer does not store |
- // the length itself. It also helps in decision if we need to yield. |
- media::SetUnknownDataSize(shared_memory_, max_size); |
+ // Store max length of data into buffer, in case client does not do that. |
+ media::SetActualDataSizeInBytes(shared_memory_, max_size, max_size); |
- previous_call_time_ = base::Time::Now(); |
return read_size; |
} |