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

View File

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

View File

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

View File

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

View File

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

View File

@ -45,12 +45,6 @@ jobject NewGlobalRef(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
// attached.
class AttachThreadScoped {

View File

@ -9,7 +9,6 @@
*/
#include "modules/utility/include/helpers_android.h"
#include "rtc_base/checks.h"
#include <android/log.h>
#include <assert.h>
@ -17,6 +16,9 @@
#include <stddef.h>
#include <unistd.h>
#include "rtc_base/checks.h"
#include "rtc_base/platform_thread.h"
#define TAG "HelpersAndroid"
#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";
}
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)
: attached_(false), jvm_(jvm), env_(NULL) {
env_ = GetEnv(jvm);
@ -102,7 +91,7 @@ AttachThreadScoped::AttachThreadScoped(JavaVM* jvm)
// Adding debug log here so we can track down potential leaks and figure
// out why we sometimes see "Native thread exiting without having called
// 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);
attached_ = (res == JNI_OK);
RTC_CHECK(attached_) << "AttachCurrentThread failed: " << res;
@ -111,7 +100,7 @@ AttachThreadScoped::AttachThreadScoped(JavaVM* jvm)
AttachThreadScoped::~AttachThreadScoped() {
if (attached_) {
ALOGD("Detaching thread from JVM%s", GetThreadInfo().c_str());
ALOGD("Detaching thread from JVM[tid=%d]", rtc::CurrentThreadId());
jint res = jvm_->DetachCurrentThread();
RTC_CHECK(res == JNI_OK) << "DetachCurrentThread failed: " << res;
RTC_CHECK(!GetEnv(jvm_));

View File

@ -15,6 +15,7 @@
#include "modules/utility/include/jvm_android.h"
#include "rtc_base/checks.h"
#include "rtc_base/platform_thread.h"
#define TAG "JVM"
#define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
@ -72,7 +73,7 @@ jclass LookUpClass(const char* name) {
// AttachCurrentThreadIfNeeded implementation.
AttachCurrentThreadIfNeeded::AttachCurrentThreadIfNeeded()
: attached_(false) {
ALOGD("AttachCurrentThreadIfNeeded::ctor%s", GetThreadInfo().c_str());
ALOGD("AttachCurrentThreadIfNeeded::ctor[tid=%d]", rtc::CurrentThreadId());
JavaVM* jvm = JVM::GetInstance()->jvm();
RTC_CHECK(jvm);
JNIEnv* jni = GetEnv(jvm);
@ -85,7 +86,7 @@ AttachCurrentThreadIfNeeded::AttachCurrentThreadIfNeeded()
}
AttachCurrentThreadIfNeeded::~AttachCurrentThreadIfNeeded() {
ALOGD("AttachCurrentThreadIfNeeded::dtor%s", GetThreadInfo().c_str());
ALOGD("AttachCurrentThreadIfNeeded::dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (attached_) {
ALOGD("Detaching thread from JVM");
@ -97,11 +98,11 @@ AttachCurrentThreadIfNeeded::~AttachCurrentThreadIfNeeded() {
// GlobalRef implementation.
GlobalRef::GlobalRef(JNIEnv* jni, jobject object)
: jni_(jni), j_object_(NewGlobalRef(jni, object)) {
ALOGD("GlobalRef::ctor%s", GetThreadInfo().c_str());
ALOGD("GlobalRef::ctor[tid=%d]", rtc::CurrentThreadId());
}
GlobalRef::~GlobalRef() {
ALOGD("GlobalRef::dtor%s", GetThreadInfo().c_str());
ALOGD("GlobalRef::dtor[tid=%d]", rtc::CurrentThreadId());
DeleteGlobalRef(jni_, j_object_);
}
@ -134,18 +135,18 @@ void GlobalRef::CallVoidMethod(jmethodID methodID, ...) {
// NativeRegistration implementation.
NativeRegistration::NativeRegistration(JNIEnv* jni, jclass clazz)
: JavaClass(jni, clazz), jni_(jni) {
ALOGD("NativeRegistration::ctor%s", GetThreadInfo().c_str());
ALOGD("NativeRegistration::ctor[tid=%d]", rtc::CurrentThreadId());
}
NativeRegistration::~NativeRegistration() {
ALOGD("NativeRegistration::dtor%s", GetThreadInfo().c_str());
ALOGD("NativeRegistration::dtor[tid=%d]", rtc::CurrentThreadId());
jni_->UnregisterNatives(j_class_);
CHECK_EXCEPTION(jni_) << "Error during UnregisterNatives";
}
std::unique_ptr<GlobalRef> NativeRegistration::NewObject(
const char* name, const char* signature, ...) {
ALOGD("NativeRegistration::NewObject%s", GetThreadInfo().c_str());
ALOGD("NativeRegistration::NewObject[tid=%d]", rtc::CurrentThreadId());
va_list args;
va_start(args, signature);
jobject obj = jni_->NewObjectV(j_class_,
@ -185,11 +186,11 @@ jint JavaClass::CallStaticIntMethod(jmethodID methodID, ...) {
// JNIEnvironment implementation.
JNIEnvironment::JNIEnvironment(JNIEnv* jni) : jni_(jni) {
ALOGD("JNIEnvironment::ctor%s", GetThreadInfo().c_str());
ALOGD("JNIEnvironment::ctor[tid=%d]", rtc::CurrentThreadId());
}
JNIEnvironment::~JNIEnvironment() {
ALOGD("JNIEnvironment::dtor%s", GetThreadInfo().c_str());
ALOGD("JNIEnvironment::dtor[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread());
}
@ -218,7 +219,7 @@ std::string JNIEnvironment::JavaToStdString(const jstring& j_string) {
// static
void JVM::Initialize(JavaVM* jvm) {
ALOGD("JVM::Initialize%s", GetThreadInfo().c_str());
ALOGD("JVM::Initialize[tid=%d]", rtc::CurrentThreadId());
RTC_CHECK(!g_jvm);
g_jvm = new JVM(jvm);
}
@ -236,7 +237,7 @@ void JVM::Initialize(JavaVM* jvm, jobject context) {
// static
void JVM::Uninitialize() {
ALOGD("JVM::Uninitialize%s", GetThreadInfo().c_str());
ALOGD("JVM::Uninitialize[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(g_jvm);
delete g_jvm;
g_jvm = nullptr;
@ -249,19 +250,19 @@ JVM* JVM::GetInstance() {
}
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.";
LoadClasses(jni());
}
JVM::~JVM() {
ALOGD("JVM::~JVM%s", GetThreadInfo().c_str());
ALOGD("JVM::~JVM[tid=%d]", rtc::CurrentThreadId());
RTC_DCHECK(thread_checker_.CalledOnValidThread());
FreeClassReferences(jni());
}
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
// 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
@ -276,7 +277,7 @@ std::unique_ptr<JNIEnvironment> JVM::environment() {
}
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());
return JavaClass(jni(), LookUpClass(name));
}