In Android encoders, cache EncoderInfo in InitEncode.

GetEncoderInfo() is now called every frame, so we should not do
expensive parsing or logging in there. Instead, prepare an EncoderInfo
instance in InitEncode() and just return that in GetEncoderInfo().

Bug: webrtc:9890
Change-Id: Idc9e79e681c6f7ff4f9b446aa298c156f25bc6f6
Reviewed-on: https://webrtc-review.googlesource.com/c/110161
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25569}
diff --git a/sdk/android/src/jni/androidmediaencoder.cc b/sdk/android/src/jni/androidmediaencoder.cc
index d25b0db..9072fde 100644
--- a/sdk/android/src/jni/androidmediaencoder.cc
+++ b/sdk/android/src/jni/androidmediaencoder.cc
@@ -267,6 +267,7 @@
   size_t gof_idx_;
 
   const bool has_egl_context_;
+  EncoderInfo encoder_info_;
 
   // Temporary fix for VP8.
   // Sends a key frame if frames are largely spaced apart (possibly
@@ -354,6 +355,10 @@
     ALOGD << "H.264 profile: " << profile_;
   }
 
+  encoder_info_.supports_native_handle = has_egl_context_;
+  encoder_info_.implementation_name = "MediaCodec";
+  encoder_info_.scaling_settings = GetScalingSettingsInternal();
+
   return InitEncodeInternal(
       init_width, init_height, codec_settings->startBitrate,
       codec_settings->maxFramerate,
@@ -922,11 +927,7 @@
 }
 
 VideoEncoder::EncoderInfo MediaCodecVideoEncoder::GetEncoderInfo() const {
-  EncoderInfo info;
-  info.supports_native_handle = has_egl_context_;
-  info.implementation_name = "MediaCodec";
-  info.scaling_settings = GetScalingSettingsInternal();
-  return info;
+  return encoder_info_;
 }
 
 bool MediaCodecVideoEncoder::DeliverPendingOutputs(JNIEnv* jni) {
diff --git a/sdk/android/src/jni/videoencoderwrapper.cc b/sdk/android/src/jni/videoencoderwrapper.cc
index f63785d..1e4b84e 100644
--- a/sdk/android/src/jni/videoencoderwrapper.cc
+++ b/sdk/android/src/jni/videoencoderwrapper.cc
@@ -32,8 +32,6 @@
 VideoEncoderWrapper::VideoEncoderWrapper(JNIEnv* jni,
                                          const JavaRef<jobject>& j_encoder)
     : encoder_(jni, j_encoder), int_array_class_(GetClass(jni, "[I")) {
-  implementation_name_ = GetImplementationName(jni);
-
   initialized_ = false;
   num_resets_ = 0;
 }
@@ -82,6 +80,10 @@
       jni, Java_VideoEncoder_initEncode(jni, encoder_, settings, callback));
   RTC_LOG(LS_INFO) << "initEncode: " << status;
 
+  encoder_info_.supports_native_handle = true;
+  encoder_info_.implementation_name = GetImplementationName(jni);
+  encoder_info_.scaling_settings = GetScalingSettingsInternal(jni);
+
   if (status == WEBRTC_VIDEO_CODEC_OK) {
     initialized_ = true;
   }
@@ -149,16 +151,11 @@
 }
 
 VideoEncoder::EncoderInfo VideoEncoderWrapper::GetEncoderInfo() const {
-  EncoderInfo info;
-  info.supports_native_handle = true;
-  info.implementation_name = implementation_name_;
-  info.scaling_settings = GetScalingSettingsInternal();
-  return info;
+  return encoder_info_;
 }
 
 VideoEncoderWrapper::ScalingSettings
-VideoEncoderWrapper::GetScalingSettingsInternal() const {
-  JNIEnv* jni = AttachCurrentThreadIfNeeded();
+VideoEncoderWrapper::GetScalingSettingsInternal(JNIEnv* jni) const {
   ScopedJavaLocalRef<jobject> j_scaling_settings =
       Java_VideoEncoder_getScalingSettings(jni, encoder_);
   bool isOn =
diff --git a/sdk/android/src/jni/videoencoderwrapper.h b/sdk/android/src/jni/videoencoderwrapper.h
index c35b880..3618f78 100644
--- a/sdk/android/src/jni/videoencoderwrapper.h
+++ b/sdk/android/src/jni/videoencoderwrapper.h
@@ -86,13 +86,11 @@
       const VideoBitrateAllocation& allocation);
   std::string GetImplementationName(JNIEnv* jni) const;
 
-  ScalingSettings GetScalingSettingsInternal() const;
+  ScalingSettings GetScalingSettingsInternal(JNIEnv* jni) const;
 
   const ScopedJavaGlobalRef<jobject> encoder_;
   const ScopedJavaGlobalRef<jclass> int_array_class_;
 
-  std::string implementation_name_;
-
   rtc::TaskQueue* encoder_queue_;
   std::deque<FrameExtraInfo> frame_extra_infos_;
   EncodedImageCallback* callback_;
@@ -100,6 +98,7 @@
   int num_resets_;
   int number_of_cores_;
   VideoCodec codec_settings_;
+  EncoderInfo encoder_info_;
   H264BitstreamParser h264_bitstream_parser_;
 
   // VP9 variables to populate codec specific structure.