Commit 184002e4 authored by jiayl@chromium.org's avatar jiayl@chromium.org

Do not call SendMessageToNativeLog on Android in AudioInputSyncWriter

MediaStreamManager::SendMessageToNativeLog posts a task to the UI thread, which will attach the audio thread to the Android java VM. Unlike chrome created threads, the audio thread is owned by the OS and does not detach itself from the VM on exit, causing a crash.

The fix is to not call SendMessageToNativeLog on Android because webrtc logging is never enabled on Android due to the lack of extension.

BUG=365915

Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=271764

Review URL: https://codereview.chromium.org/294803003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272309 0039d316-1c4b-4281-b951-d872f2087c98
parent 8f5209c8
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
#include "base/memory/shared_memory.h" #include "base/memory/shared_memory.h"
#include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/renderer_host/media/media_stream_manager.h"
static const uint32 kLogDelayThreadholdMs = 500;
namespace content { namespace content {
AudioInputSyncWriter::AudioInputSyncWriter( AudioInputSyncWriter::AudioInputSyncWriter(
...@@ -37,23 +35,29 @@ uint32 AudioInputSyncWriter::Write(const void* data, ...@@ -37,23 +35,29 @@ uint32 AudioInputSyncWriter::Write(const void* data,
uint32 size, uint32 size,
double volume, double volume,
bool key_pressed) { bool key_pressed) {
#if !defined(OS_ANDROID)
static const base::TimeDelta kLogDelayThreadhold =
base::TimeDelta::FromMilliseconds(500);
std::ostringstream oss; std::ostringstream oss;
if (last_write_time_.is_null()) { if (last_write_time_.is_null()) {
// This is the first time Write is called. // This is the first time Write is called.
base::TimeDelta interval = base::Time::Now() - creation_time_; base::TimeDelta interval = base::Time::Now() - creation_time_;
oss << "Audio input data received for the first time: delay = " oss << "Audio input data received for the first time: delay = "
<< interval.InMilliseconds() << "ms."; << interval.InMilliseconds() << "ms.";
} else { } else {
base::TimeDelta interval = base::Time::Now() - last_write_time_; base::TimeDelta interval = base::Time::Now() - last_write_time_;
if (interval.InMilliseconds() > kLogDelayThreadholdMs) { if (interval > kLogDelayThreadhold) {
oss << "Audio input data delay unexpectedly long: delay = " oss << "Audio input data delay unexpectedly long: delay = "
<< interval.InMilliseconds() << "ms."; << interval.InMilliseconds() << "ms.";
} }
} }
if (!oss.str().empty()) if (!oss.str().empty())
MediaStreamManager::SendMessageToNativeLog(oss.str()); MediaStreamManager::SendMessageToNativeLog(oss.str());
last_write_time_ = base::Time::Now(); last_write_time_ = base::Time::Now();
#endif
uint8* ptr = static_cast<uint8*>(shared_memory_->memory()); uint8* ptr = static_cast<uint8*>(shared_memory_->memory());
ptr += current_segment_id_ * shared_memory_segment_size_; ptr += current_segment_id_ * shared_memory_segment_size_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment