Android: Remove GetThreadInfo()

This CL is part of merging the helper functions for audio and non-audio JNI code.
The GetThreadInfo() function is unrelated to JNI and I would prefer not to keep
it in a JNI helper file. Also, GetThreadInfo() is a very small function and inlining
it makes it simpler and more transparent IMO, as well as removing a lot of unnecessary
std::string creations.

Bug: webrtc:8689
Change-Id: I7d238fee826d310c0f5343d18b92d0dff864fd6a
Reviewed-on: https://webrtc-review.googlesource.com/36302
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Commit-Queue: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21466}
This commit is contained in:
Magnus Jedvert
2017-12-28 14:12:05 +01:00
committed by Commit Bot
parent 0942b36af1
commit 9185bde7ee
8 changed files with 70 additions and 81 deletions

View File

@ -18,6 +18,7 @@
#include "modules/utility/include/helpers_android.h" #include "modules/utility/include/helpers_android.h"
#include "rtc_base/arraysize.h" #include "rtc_base/arraysize.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/platform_thread.h"
#define TAG "AudioManager" #define TAG "AudioManager"
#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__) #define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__)
@ -40,11 +41,11 @@ AudioManager::JavaAudioManager::JavaAudioManager(
is_device_blacklisted_for_open_sles_usage_( is_device_blacklisted_for_open_sles_usage_(
native_reg->GetMethodId("isDeviceBlacklistedForOpenSLESUsage", native_reg->GetMethodId("isDeviceBlacklistedForOpenSLESUsage",
"()Z")) { "()Z")) {
ALOGD("JavaAudioManager::ctor%s", GetThreadInfo().c_str()); ALOGD("JavaAudioManager::ctor @[tid=%d]", rtc::CurrentThreadId());
} }
AudioManager::JavaAudioManager::~JavaAudioManager() { AudioManager::JavaAudioManager::~JavaAudioManager() {
ALOGD("JavaAudioManager::dtor%s", GetThreadInfo().c_str()); ALOGD("JavaAudioManager::dtor[tid=%d]", rtc::CurrentThreadId());
} }
bool AudioManager::JavaAudioManager::Init() { bool AudioManager::JavaAudioManager::Init() {
@ -75,7 +76,7 @@ AudioManager::AudioManager()
low_latency_playout_(false), low_latency_playout_(false),
low_latency_record_(false), low_latency_record_(false),
delay_estimate_in_milliseconds_(0) { delay_estimate_in_milliseconds_(0) {
ALOGD("ctor%s", GetThreadInfo().c_str()); ALOGD("ctor[tid=%d]", rtc::CurrentThreadId());
RTC_CHECK(j_environment_); RTC_CHECK(j_environment_);
JNINativeMethod native_methods[] = { JNINativeMethod native_methods[] = {
{"nativeCacheAudioParameters", "(IIIZZZZZZIIJ)V", {"nativeCacheAudioParameters", "(IIIZZZZZZIIJ)V",
@ -90,14 +91,14 @@ AudioManager::AudioManager()
} }
AudioManager::~AudioManager() { AudioManager::~AudioManager() {
ALOGD("~dtor%s", GetThreadInfo().c_str()); ALOGD("~dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
Close(); Close();
} }
void AudioManager::SetActiveAudioLayer( void AudioManager::SetActiveAudioLayer(
AudioDeviceModule::AudioLayer audio_layer) { AudioDeviceModule::AudioLayer audio_layer) {
ALOGD("SetActiveAudioLayer(%d)%s", audio_layer, GetThreadInfo().c_str()); ALOGD("SetActiveAudioLayer(%d)[tid=%d]", audio_layer, rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(!initialized_); RTC_DCHECK(!initialized_);
// Store the currently utilized audio layer. // Store the currently utilized audio layer.
@ -114,7 +115,7 @@ void AudioManager::SetActiveAudioLayer(
} }
SLObjectItf AudioManager::GetOpenSLEngine() { SLObjectItf AudioManager::GetOpenSLEngine() {
ALOGD("GetOpenSLEngine%s", GetThreadInfo().c_str()); ALOGD("GetOpenSLEngine[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
// Only allow usage of OpenSL ES if such an audio layer has been specified. // Only allow usage of OpenSL ES if such an audio layer has been specified.
if (audio_layer_ != AudioDeviceModule::kAndroidOpenSLESAudio && if (audio_layer_ != AudioDeviceModule::kAndroidOpenSLESAudio &&
@ -153,7 +154,7 @@ SLObjectItf AudioManager::GetOpenSLEngine() {
} }
bool AudioManager::Init() { bool AudioManager::Init() {
ALOGD("Init%s", GetThreadInfo().c_str()); ALOGD("Init[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(!initialized_); RTC_DCHECK(!initialized_);
RTC_DCHECK_NE(audio_layer_, AudioDeviceModule::kPlatformDefaultAudio); RTC_DCHECK_NE(audio_layer_, AudioDeviceModule::kPlatformDefaultAudio);
@ -166,7 +167,7 @@ bool AudioManager::Init() {
} }
bool AudioManager::Close() { bool AudioManager::Close() {
ALOGD("Close%s", GetThreadInfo().c_str()); ALOGD("Close[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!initialized_) if (!initialized_)
return true; return true;
@ -271,7 +272,7 @@ void AudioManager::OnCacheAudioParameters(JNIEnv* env,
jboolean pro_audio, jboolean pro_audio,
jint output_buffer_size, jint output_buffer_size,
jint input_buffer_size) { jint input_buffer_size) {
ALOGD("OnCacheAudioParameters%s", GetThreadInfo().c_str()); ALOGD("OnCacheAudioParameters[tid=%d]", rtc::CurrentThreadId());
ALOGD("hardware_aec: %d", hardware_aec); ALOGD("hardware_aec: %d", hardware_aec);
ALOGD("hardware_agc: %d", hardware_agc); ALOGD("hardware_agc: %d", hardware_agc);
ALOGD("hardware_ns: %d", hardware_ns); ALOGD("hardware_ns: %d", hardware_ns);

View File

@ -18,6 +18,7 @@
#include "rtc_base/arraysize.h" #include "rtc_base/arraysize.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/format_macros.h" #include "rtc_base/format_macros.h"
#include "rtc_base/platform_thread.h"
#define TAG "AudioRecordJni" #define TAG "AudioRecordJni"
#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__) #define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__)
@ -78,7 +79,7 @@ AudioRecordJni::AudioRecordJni(AudioManager* audio_manager)
initialized_(false), initialized_(false),
recording_(false), recording_(false),
audio_device_buffer_(nullptr) { audio_device_buffer_(nullptr) {
ALOGD("ctor%s", GetThreadInfo().c_str()); ALOGD("ctor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(audio_parameters_.is_valid()); RTC_DCHECK(audio_parameters_.is_valid());
RTC_CHECK(j_environment_); RTC_CHECK(j_environment_);
JNINativeMethod native_methods[] = { JNINativeMethod native_methods[] = {
@ -100,26 +101,26 @@ AudioRecordJni::AudioRecordJni(AudioManager* audio_manager)
} }
AudioRecordJni::~AudioRecordJni() { AudioRecordJni::~AudioRecordJni() {
ALOGD("~dtor%s", GetThreadInfo().c_str()); ALOGD("~dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
Terminate(); Terminate();
} }
int32_t AudioRecordJni::Init() { int32_t AudioRecordJni::Init() {
ALOGD("Init%s", GetThreadInfo().c_str()); ALOGD("Init[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
return 0; return 0;
} }
int32_t AudioRecordJni::Terminate() { int32_t AudioRecordJni::Terminate() {
ALOGD("Terminate%s", GetThreadInfo().c_str()); ALOGD("Terminate[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
StopRecording(); StopRecording();
return 0; return 0;
} }
int32_t AudioRecordJni::InitRecording() { int32_t AudioRecordJni::InitRecording() {
ALOGD("InitRecording%s", GetThreadInfo().c_str()); ALOGD("InitRecording[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(!initialized_); RTC_DCHECK(!initialized_);
RTC_DCHECK(!recording_); RTC_DCHECK(!recording_);
@ -141,7 +142,7 @@ int32_t AudioRecordJni::InitRecording() {
} }
int32_t AudioRecordJni::StartRecording() { int32_t AudioRecordJni::StartRecording() {
ALOGD("StartRecording%s", GetThreadInfo().c_str()); ALOGD("StartRecording[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(initialized_); RTC_DCHECK(initialized_);
RTC_DCHECK(!recording_); RTC_DCHECK(!recording_);
@ -154,7 +155,7 @@ int32_t AudioRecordJni::StartRecording() {
} }
int32_t AudioRecordJni::StopRecording() { int32_t AudioRecordJni::StopRecording() {
ALOGD("StopRecording%s", GetThreadInfo().c_str()); ALOGD("StopRecording[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!initialized_ || !recording_) { if (!initialized_ || !recording_) {
return 0; return 0;
@ -190,7 +191,7 @@ void AudioRecordJni::AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) {
} }
int32_t AudioRecordJni::EnableBuiltInAEC(bool enable) { int32_t AudioRecordJni::EnableBuiltInAEC(bool enable) {
ALOGD("EnableBuiltInAEC%s", GetThreadInfo().c_str()); ALOGD("EnableBuiltInAEC[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
return j_audio_record_->EnableBuiltInAEC(enable) ? 0 : -1; return j_audio_record_->EnableBuiltInAEC(enable) ? 0 : -1;
} }
@ -202,7 +203,7 @@ int32_t AudioRecordJni::EnableBuiltInAGC(bool enable) {
} }
int32_t AudioRecordJni::EnableBuiltInNS(bool enable) { int32_t AudioRecordJni::EnableBuiltInNS(bool enable) {
ALOGD("EnableBuiltInNS%s", GetThreadInfo().c_str()); ALOGD("EnableBuiltInNS[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
return j_audio_record_->EnableBuiltInNS(enable) ? 0 : -1; return j_audio_record_->EnableBuiltInNS(enable) ? 0 : -1;
} }

View File

@ -18,6 +18,7 @@
#include "rtc_base/arraysize.h" #include "rtc_base/arraysize.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/format_macros.h" #include "rtc_base/format_macros.h"
#include "rtc_base/platform_thread.h"
#define TAG "AudioTrackJni" #define TAG "AudioTrackJni"
#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__) #define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__)
@ -77,7 +78,7 @@ AudioTrackJni::AudioTrackJni(AudioManager* audio_manager)
initialized_(false), initialized_(false),
playing_(false), playing_(false),
audio_device_buffer_(nullptr) { audio_device_buffer_(nullptr) {
ALOGD("ctor%s", GetThreadInfo().c_str()); ALOGD("ctor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(audio_parameters_.is_valid()); RTC_DCHECK(audio_parameters_.is_valid());
RTC_CHECK(j_environment_); RTC_CHECK(j_environment_);
JNINativeMethod native_methods[] = { JNINativeMethod native_methods[] = {
@ -99,26 +100,26 @@ AudioTrackJni::AudioTrackJni(AudioManager* audio_manager)
} }
AudioTrackJni::~AudioTrackJni() { AudioTrackJni::~AudioTrackJni() {
ALOGD("~dtor%s", GetThreadInfo().c_str()); ALOGD("~dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
Terminate(); Terminate();
} }
int32_t AudioTrackJni::Init() { int32_t AudioTrackJni::Init() {
ALOGD("Init%s", GetThreadInfo().c_str()); ALOGD("Init[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
return 0; return 0;
} }
int32_t AudioTrackJni::Terminate() { int32_t AudioTrackJni::Terminate() {
ALOGD("Terminate%s", GetThreadInfo().c_str()); ALOGD("Terminate[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
StopPlayout(); StopPlayout();
return 0; return 0;
} }
int32_t AudioTrackJni::InitPlayout() { int32_t AudioTrackJni::InitPlayout() {
ALOGD("InitPlayout%s", GetThreadInfo().c_str()); ALOGD("InitPlayout[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(!initialized_); RTC_DCHECK(!initialized_);
RTC_DCHECK(!playing_); RTC_DCHECK(!playing_);
@ -132,7 +133,7 @@ int32_t AudioTrackJni::InitPlayout() {
} }
int32_t AudioTrackJni::StartPlayout() { int32_t AudioTrackJni::StartPlayout() {
ALOGD("StartPlayout%s", GetThreadInfo().c_str()); ALOGD("StartPlayout[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(initialized_); RTC_DCHECK(initialized_);
RTC_DCHECK(!playing_); RTC_DCHECK(!playing_);
@ -145,7 +146,7 @@ int32_t AudioTrackJni::StartPlayout() {
} }
int32_t AudioTrackJni::StopPlayout() { int32_t AudioTrackJni::StopPlayout() {
ALOGD("StopPlayout%s", GetThreadInfo().c_str()); ALOGD("StopPlayout[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!initialized_ || !playing_) { if (!initialized_ || !playing_) {
return 0; return 0;
@ -170,27 +171,27 @@ int AudioTrackJni::SpeakerVolumeIsAvailable(bool& available) {
} }
int AudioTrackJni::SetSpeakerVolume(uint32_t volume) { int AudioTrackJni::SetSpeakerVolume(uint32_t volume) {
ALOGD("SetSpeakerVolume(%d)%s", volume, GetThreadInfo().c_str()); ALOGD("SetSpeakerVolume(%d)[tid=%d]", volume, rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
return j_audio_track_->SetStreamVolume(volume) ? 0 : -1; return j_audio_track_->SetStreamVolume(volume) ? 0 : -1;
} }
int AudioTrackJni::MaxSpeakerVolume(uint32_t& max_volume) const { int AudioTrackJni::MaxSpeakerVolume(uint32_t& max_volume) const {
ALOGD("MaxSpeakerVolume%s", GetThreadInfo().c_str()); ALOGD("MaxSpeakerVolume[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
max_volume = j_audio_track_->GetStreamMaxVolume(); max_volume = j_audio_track_->GetStreamMaxVolume();
return 0; return 0;
} }
int AudioTrackJni::MinSpeakerVolume(uint32_t& min_volume) const { int AudioTrackJni::MinSpeakerVolume(uint32_t& min_volume) const {
ALOGD("MaxSpeakerVolume%s", GetThreadInfo().c_str()); ALOGD("MaxSpeakerVolume[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
min_volume = 0; min_volume = 0;
return 0; return 0;
} }
int AudioTrackJni::SpeakerVolume(uint32_t& volume) const { int AudioTrackJni::SpeakerVolume(uint32_t& volume) const {
ALOGD("SpeakerVolume%s", GetThreadInfo().c_str()); ALOGD("SpeakerVolume[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
volume = j_audio_track_->GetStreamVolume(); volume = j_audio_track_->GetStreamVolume();
return 0; return 0;
@ -198,7 +199,7 @@ int AudioTrackJni::SpeakerVolume(uint32_t& volume) const {
// TODO(henrika): possibly add stereo support. // TODO(henrika): possibly add stereo support.
void AudioTrackJni::AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) { void AudioTrackJni::AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) {
ALOGD("AttachAudioBuffer%s", GetThreadInfo().c_str()); ALOGD("AttachAudioBuffer[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
audio_device_buffer_ = audioBuffer; audio_device_buffer_ = audioBuffer;
const int sample_rate_hz = audio_parameters_.sample_rate(); const int sample_rate_hz = audio_parameters_.sample_rate();

View File

@ -19,6 +19,7 @@
#include "rtc_base/arraysize.h" #include "rtc_base/arraysize.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/format_macros.h" #include "rtc_base/format_macros.h"
#include "rtc_base/platform_thread.h"
#include "rtc_base/timeutils.h" #include "rtc_base/timeutils.h"
#define TAG "OpenSLESPlayer" #define TAG "OpenSLESPlayer"
@ -51,7 +52,7 @@ OpenSLESPlayer::OpenSLESPlayer(AudioManager* audio_manager)
simple_buffer_queue_(nullptr), simple_buffer_queue_(nullptr),
volume_(nullptr), volume_(nullptr),
last_play_time_(0) { last_play_time_(0) {
ALOGD("ctor%s", GetThreadInfo().c_str()); ALOGD("ctor[tid=%d]", rtc::CurrentThreadId());
// Use native audio output parameters provided by the audio manager and // Use native audio output parameters provided by the audio manager and
// define the PCM format structure. // define the PCM format structure.
pcm_format_ = CreatePCMConfiguration(audio_parameters_.channels(), pcm_format_ = CreatePCMConfiguration(audio_parameters_.channels(),
@ -63,7 +64,7 @@ OpenSLESPlayer::OpenSLESPlayer(AudioManager* audio_manager)
} }
OpenSLESPlayer::~OpenSLESPlayer() { OpenSLESPlayer::~OpenSLESPlayer() {
ALOGD("dtor%s", GetThreadInfo().c_str()); ALOGD("dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
Terminate(); Terminate();
DestroyAudioPlayer(); DestroyAudioPlayer();
@ -77,7 +78,7 @@ OpenSLESPlayer::~OpenSLESPlayer() {
} }
int OpenSLESPlayer::Init() { int OpenSLESPlayer::Init() {
ALOGD("Init%s", GetThreadInfo().c_str()); ALOGD("Init[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (audio_parameters_.channels() == 2) { if (audio_parameters_.channels() == 2) {
// TODO(henrika): FineAudioBuffer needs more work to support stereo. // TODO(henrika): FineAudioBuffer needs more work to support stereo.
@ -88,14 +89,14 @@ int OpenSLESPlayer::Init() {
} }
int OpenSLESPlayer::Terminate() { int OpenSLESPlayer::Terminate() {
ALOGD("Terminate%s", GetThreadInfo().c_str()); ALOGD("Terminate[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
StopPlayout(); StopPlayout();
return 0; return 0;
} }
int OpenSLESPlayer::InitPlayout() { int OpenSLESPlayer::InitPlayout() {
ALOGD("InitPlayout%s", GetThreadInfo().c_str()); ALOGD("InitPlayout[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(!initialized_); RTC_DCHECK(!initialized_);
RTC_DCHECK(!playing_); RTC_DCHECK(!playing_);
@ -110,7 +111,7 @@ int OpenSLESPlayer::InitPlayout() {
} }
int OpenSLESPlayer::StartPlayout() { int OpenSLESPlayer::StartPlayout() {
ALOGD("StartPlayout%s", GetThreadInfo().c_str()); ALOGD("StartPlayout[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(initialized_); RTC_DCHECK(initialized_);
RTC_DCHECK(!playing_); RTC_DCHECK(!playing_);
@ -138,7 +139,7 @@ int OpenSLESPlayer::StartPlayout() {
} }
int OpenSLESPlayer::StopPlayout() { int OpenSLESPlayer::StopPlayout() {
ALOGD("StopPlayout%s", GetThreadInfo().c_str()); ALOGD("StopPlayout[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!initialized_ || !playing_) { if (!initialized_ || !playing_) {
return 0; return 0;

View File

@ -19,6 +19,7 @@
#include "rtc_base/arraysize.h" #include "rtc_base/arraysize.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/format_macros.h" #include "rtc_base/format_macros.h"
#include "rtc_base/platform_thread.h"
#include "rtc_base/timeutils.h" #include "rtc_base/timeutils.h"
#define TAG "OpenSLESRecorder" #define TAG "OpenSLESRecorder"
@ -51,7 +52,7 @@ OpenSLESRecorder::OpenSLESRecorder(AudioManager* audio_manager)
simple_buffer_queue_(nullptr), simple_buffer_queue_(nullptr),
buffer_index_(0), buffer_index_(0),
last_rec_time_(0) { last_rec_time_(0) {
ALOGD("ctor%s", GetThreadInfo().c_str()); ALOGD("ctor[tid=%d]", rtc::CurrentThreadId());
// Detach from this thread since we want to use the checker to verify calls // Detach from this thread since we want to use the checker to verify calls
// from the internal audio thread. // from the internal audio thread.
thread_checker_opensles_.DetachFromThread(); thread_checker_opensles_.DetachFromThread();
@ -63,7 +64,7 @@ OpenSLESRecorder::OpenSLESRecorder(AudioManager* audio_manager)
} }
OpenSLESRecorder::~OpenSLESRecorder() { OpenSLESRecorder::~OpenSLESRecorder() {
ALOGD("dtor%s", GetThreadInfo().c_str()); ALOGD("dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
Terminate(); Terminate();
DestroyAudioRecorder(); DestroyAudioRecorder();
@ -74,7 +75,7 @@ OpenSLESRecorder::~OpenSLESRecorder() {
} }
int OpenSLESRecorder::Init() { int OpenSLESRecorder::Init() {
ALOGD("Init%s", GetThreadInfo().c_str()); ALOGD("Init[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (audio_parameters_.channels() == 2) { if (audio_parameters_.channels() == 2) {
// TODO(henrika): FineAudioBuffer needs more work to support stereo. // TODO(henrika): FineAudioBuffer needs more work to support stereo.
@ -85,14 +86,14 @@ int OpenSLESRecorder::Init() {
} }
int OpenSLESRecorder::Terminate() { int OpenSLESRecorder::Terminate() {
ALOGD("Terminate%s", GetThreadInfo().c_str()); ALOGD("Terminate[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
StopRecording(); StopRecording();
return 0; return 0;
} }
int OpenSLESRecorder::InitRecording() { int OpenSLESRecorder::InitRecording() {
ALOGD("InitRecording%s", GetThreadInfo().c_str()); ALOGD("InitRecording[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(!initialized_); RTC_DCHECK(!initialized_);
RTC_DCHECK(!recording_); RTC_DCHECK(!recording_);
@ -107,7 +108,7 @@ int OpenSLESRecorder::InitRecording() {
} }
int OpenSLESRecorder::StartRecording() { int OpenSLESRecorder::StartRecording() {
ALOGD("StartRecording%s", GetThreadInfo().c_str()); ALOGD("StartRecording[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
RTC_DCHECK(initialized_); RTC_DCHECK(initialized_);
RTC_DCHECK(!recording_); RTC_DCHECK(!recording_);
@ -144,7 +145,7 @@ int OpenSLESRecorder::StartRecording() {
} }
int OpenSLESRecorder::StopRecording() { int OpenSLESRecorder::StopRecording() {
ALOGD("StopRecording%s", GetThreadInfo().c_str()); ALOGD("StopRecording[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (!initialized_ || !recording_) { if (!initialized_ || !recording_) {
return 0; return 0;

View File

@ -45,12 +45,6 @@ jobject NewGlobalRef(JNIEnv* jni, jobject o);
void DeleteGlobalRef(JNIEnv* jni, jobject o); void DeleteGlobalRef(JNIEnv* jni, jobject o);
// Return thread ID as a string.
std::string GetThreadId();
// Return thread ID as string suitable for debug logging.
std::string GetThreadInfo();
// Attach thread to JVM if necessary and detach at scope end if originally // Attach thread to JVM if necessary and detach at scope end if originally
// attached. // attached.
class AttachThreadScoped { class AttachThreadScoped {

View File

@ -9,7 +9,6 @@
*/ */
#include "modules/utility/include/helpers_android.h" #include "modules/utility/include/helpers_android.h"
#include "rtc_base/checks.h"
#include <android/log.h> #include <android/log.h>
#include <assert.h> #include <assert.h>
@ -17,6 +16,9 @@
#include <stddef.h> #include <stddef.h>
#include <unistd.h> #include <unistd.h>
#include "rtc_base/checks.h"
#include "rtc_base/platform_thread.h"
#define TAG "HelpersAndroid" #define TAG "HelpersAndroid"
#define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) #define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
@ -82,19 +84,6 @@ void DeleteGlobalRef(JNIEnv* jni, jobject o) {
CHECK_EXCEPTION(jni) << "Error during DeleteGlobalRef"; CHECK_EXCEPTION(jni) << "Error during DeleteGlobalRef";
} }
std::string GetThreadId() {
char buf[21]; // Big enough to hold a kuint64max plus terminating NULL.
int thread_id = gettid();
RTC_CHECK_LT(snprintf(buf, sizeof(buf), "%i", thread_id),
static_cast<int>(sizeof(buf)))
<< "Thread id is bigger than uint64??";
return std::string(buf);
}
std::string GetThreadInfo() {
return "@[tid=" + GetThreadId() + "]";
}
AttachThreadScoped::AttachThreadScoped(JavaVM* jvm) AttachThreadScoped::AttachThreadScoped(JavaVM* jvm)
: attached_(false), jvm_(jvm), env_(NULL) { : attached_(false), jvm_(jvm), env_(NULL) {
env_ = GetEnv(jvm); env_ = GetEnv(jvm);
@ -102,7 +91,7 @@ AttachThreadScoped::AttachThreadScoped(JavaVM* jvm)
// Adding debug log here so we can track down potential leaks and figure // Adding debug log here so we can track down potential leaks and figure
// out why we sometimes see "Native thread exiting without having called // out why we sometimes see "Native thread exiting without having called
// DetachCurrentThread" in logcat outputs. // DetachCurrentThread" in logcat outputs.
ALOGD("Attaching thread to JVM%s", GetThreadInfo().c_str()); ALOGD("Attaching thread to JVM[tid=%d]", rtc::CurrentThreadId());
jint res = jvm->AttachCurrentThread(&env_, NULL); jint res = jvm->AttachCurrentThread(&env_, NULL);
attached_ = (res == JNI_OK); attached_ = (res == JNI_OK);
RTC_CHECK(attached_) << "AttachCurrentThread failed: " << res; RTC_CHECK(attached_) << "AttachCurrentThread failed: " << res;
@ -111,7 +100,7 @@ AttachThreadScoped::AttachThreadScoped(JavaVM* jvm)
AttachThreadScoped::~AttachThreadScoped() { AttachThreadScoped::~AttachThreadScoped() {
if (attached_) { if (attached_) {
ALOGD("Detaching thread from JVM%s", GetThreadInfo().c_str()); ALOGD("Detaching thread from JVM[tid=%d]", rtc::CurrentThreadId());
jint res = jvm_->DetachCurrentThread(); jint res = jvm_->DetachCurrentThread();
RTC_CHECK(res == JNI_OK) << "DetachCurrentThread failed: " << res; RTC_CHECK(res == JNI_OK) << "DetachCurrentThread failed: " << res;
RTC_CHECK(!GetEnv(jvm_)); RTC_CHECK(!GetEnv(jvm_));

View File

@ -15,6 +15,7 @@
#include "modules/utility/include/jvm_android.h" #include "modules/utility/include/jvm_android.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/platform_thread.h"
#define TAG "JVM" #define TAG "JVM"
#define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) #define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
@ -72,7 +73,7 @@ jclass LookUpClass(const char* name) {
// AttachCurrentThreadIfNeeded implementation. // AttachCurrentThreadIfNeeded implementation.
AttachCurrentThreadIfNeeded::AttachCurrentThreadIfNeeded() AttachCurrentThreadIfNeeded::AttachCurrentThreadIfNeeded()
: attached_(false) { : attached_(false) {
ALOGD("AttachCurrentThreadIfNeeded::ctor%s", GetThreadInfo().c_str()); ALOGD("AttachCurrentThreadIfNeeded::ctor[tid=%d]", rtc::CurrentThreadId());
JavaVM* jvm = JVM::GetInstance()->jvm(); JavaVM* jvm = JVM::GetInstance()->jvm();
RTC_CHECK(jvm); RTC_CHECK(jvm);
JNIEnv* jni = GetEnv(jvm); JNIEnv* jni = GetEnv(jvm);
@ -85,7 +86,7 @@ AttachCurrentThreadIfNeeded::AttachCurrentThreadIfNeeded()
} }
AttachCurrentThreadIfNeeded::~AttachCurrentThreadIfNeeded() { AttachCurrentThreadIfNeeded::~AttachCurrentThreadIfNeeded() {
ALOGD("AttachCurrentThreadIfNeeded::dtor%s", GetThreadInfo().c_str()); ALOGD("AttachCurrentThreadIfNeeded::dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (attached_) { if (attached_) {
ALOGD("Detaching thread from JVM"); ALOGD("Detaching thread from JVM");
@ -97,11 +98,11 @@ AttachCurrentThreadIfNeeded::~AttachCurrentThreadIfNeeded() {
// GlobalRef implementation. // GlobalRef implementation.
GlobalRef::GlobalRef(JNIEnv* jni, jobject object) GlobalRef::GlobalRef(JNIEnv* jni, jobject object)
: jni_(jni), j_object_(NewGlobalRef(jni, object)) { : jni_(jni), j_object_(NewGlobalRef(jni, object)) {
ALOGD("GlobalRef::ctor%s", GetThreadInfo().c_str()); ALOGD("GlobalRef::ctor[tid=%d]", rtc::CurrentThreadId());
} }
GlobalRef::~GlobalRef() { GlobalRef::~GlobalRef() {
ALOGD("GlobalRef::dtor%s", GetThreadInfo().c_str()); ALOGD("GlobalRef::dtor[tid=%d]", rtc::CurrentThreadId());
DeleteGlobalRef(jni_, j_object_); DeleteGlobalRef(jni_, j_object_);
} }
@ -134,18 +135,18 @@ void GlobalRef::CallVoidMethod(jmethodID methodID, ...) {
// NativeRegistration implementation. // NativeRegistration implementation.
NativeRegistration::NativeRegistration(JNIEnv* jni, jclass clazz) NativeRegistration::NativeRegistration(JNIEnv* jni, jclass clazz)
: JavaClass(jni, clazz), jni_(jni) { : JavaClass(jni, clazz), jni_(jni) {
ALOGD("NativeRegistration::ctor%s", GetThreadInfo().c_str()); ALOGD("NativeRegistration::ctor[tid=%d]", rtc::CurrentThreadId());
} }
NativeRegistration::~NativeRegistration() { NativeRegistration::~NativeRegistration() {
ALOGD("NativeRegistration::dtor%s", GetThreadInfo().c_str()); ALOGD("NativeRegistration::dtor[tid=%d]", rtc::CurrentThreadId());
jni_->UnregisterNatives(j_class_); jni_->UnregisterNatives(j_class_);
CHECK_EXCEPTION(jni_) << "Error during UnregisterNatives"; CHECK_EXCEPTION(jni_) << "Error during UnregisterNatives";
} }
std::unique_ptr<GlobalRef> NativeRegistration::NewObject( std::unique_ptr<GlobalRef> NativeRegistration::NewObject(
const char* name, const char* signature, ...) { const char* name, const char* signature, ...) {
ALOGD("NativeRegistration::NewObject%s", GetThreadInfo().c_str()); ALOGD("NativeRegistration::NewObject[tid=%d]", rtc::CurrentThreadId());
va_list args; va_list args;
va_start(args, signature); va_start(args, signature);
jobject obj = jni_->NewObjectV(j_class_, jobject obj = jni_->NewObjectV(j_class_,
@ -185,11 +186,11 @@ jint JavaClass::CallStaticIntMethod(jmethodID methodID, ...) {
// JNIEnvironment implementation. // JNIEnvironment implementation.
JNIEnvironment::JNIEnvironment(JNIEnv* jni) : jni_(jni) { JNIEnvironment::JNIEnvironment(JNIEnv* jni) : jni_(jni) {
ALOGD("JNIEnvironment::ctor%s", GetThreadInfo().c_str()); ALOGD("JNIEnvironment::ctor[tid=%d]", rtc::CurrentThreadId());
} }
JNIEnvironment::~JNIEnvironment() { JNIEnvironment::~JNIEnvironment() {
ALOGD("JNIEnvironment::dtor%s", GetThreadInfo().c_str()); ALOGD("JNIEnvironment::dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
} }
@ -218,7 +219,7 @@ std::string JNIEnvironment::JavaToStdString(const jstring& j_string) {
// static // static
void JVM::Initialize(JavaVM* jvm) { void JVM::Initialize(JavaVM* jvm) {
ALOGD("JVM::Initialize%s", GetThreadInfo().c_str()); ALOGD("JVM::Initialize[tid=%d]", rtc::CurrentThreadId());
RTC_CHECK(!g_jvm); RTC_CHECK(!g_jvm);
g_jvm = new JVM(jvm); g_jvm = new JVM(jvm);
} }
@ -236,7 +237,7 @@ void JVM::Initialize(JavaVM* jvm, jobject context) {
// static // static
void JVM::Uninitialize() { void JVM::Uninitialize() {
ALOGD("JVM::Uninitialize%s", GetThreadInfo().c_str()); ALOGD("JVM::Uninitialize[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(g_jvm); RTC_DCHECK(g_jvm);
delete g_jvm; delete g_jvm;
g_jvm = nullptr; g_jvm = nullptr;
@ -249,19 +250,19 @@ JVM* JVM::GetInstance() {
} }
JVM::JVM(JavaVM* jvm) : jvm_(jvm) { JVM::JVM(JavaVM* jvm) : jvm_(jvm) {
ALOGD("JVM::JVM%s", GetThreadInfo().c_str()); ALOGD("JVM::JVM[tid=%d]", rtc::CurrentThreadId());
RTC_CHECK(jni()) << "AttachCurrentThread() must be called on this thread."; RTC_CHECK(jni()) << "AttachCurrentThread() must be called on this thread.";
LoadClasses(jni()); LoadClasses(jni());
} }
JVM::~JVM() { JVM::~JVM() {
ALOGD("JVM::~JVM%s", GetThreadInfo().c_str()); ALOGD("JVM::~JVM[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
FreeClassReferences(jni()); FreeClassReferences(jni());
} }
std::unique_ptr<JNIEnvironment> JVM::environment() { std::unique_ptr<JNIEnvironment> JVM::environment() {
ALOGD("JVM::environment%s", GetThreadInfo().c_str()); ALOGD("JVM::environment[tid=%d]", rtc::CurrentThreadId());
// The JNIEnv is used for thread-local storage. For this reason, we cannot // The JNIEnv is used for thread-local storage. For this reason, we cannot
// share a JNIEnv between threads. If a piece of code has no other way to get // share a JNIEnv between threads. If a piece of code has no other way to get
// its JNIEnv, we should share the JavaVM, and use GetEnv to discover the // its JNIEnv, we should share the JavaVM, and use GetEnv to discover the
@ -276,7 +277,7 @@ std::unique_ptr<JNIEnvironment> JVM::environment() {
} }
JavaClass JVM::GetClass(const char* name) { JavaClass JVM::GetClass(const char* name) {
ALOGD("JVM::GetClass(%s)%s", name, GetThreadInfo().c_str()); ALOGD("JVM::GetClass(%s)[tid=%d]", name, rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread()); RTC_DCHECK(thread_checker_.CalledOnValidThread());
return JavaClass(jni(), LookUpClass(name)); return JavaClass(jni(), LookUpClass(name));
} }