Android SurfaceTextureHelper: Distinguish thread names for decoder and camera

Review URL: https://codereview.webrtc.org/1843973002

Cr-Commit-Position: refs/heads/master@{#12176}
This commit is contained in:
magjed
2016-03-31 00:54:15 -07:00
committed by Commit bot
parent af9e4ac4bc
commit 82b750b80e
8 changed files with 47 additions and 44 deletions

View File

@ -250,8 +250,8 @@ public final class GlRectDrawerTest extends ActivityTestCase {
eglBase.createPbufferSurface(WIDTH, HEIGHT); eglBase.createPbufferSurface(WIDTH, HEIGHT);
// Create resources for generating OES textures. // Create resources for generating OES textures.
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(eglBase.getEglBaseContext()); "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext());
final StubOesTextureProducer oesProducer = new StubOesTextureProducer( final StubOesTextureProducer oesProducer = new StubOesTextureProducer(
eglBase.getEglBaseContext(), surfaceTextureHelper.getSurfaceTexture(), WIDTH, HEIGHT); eglBase.getEglBaseContext(), surfaceTextureHelper.getSurfaceTexture(), WIDTH, HEIGHT);
final SurfaceTextureHelperTest.MockTextureListener listener = final SurfaceTextureHelperTest.MockTextureListener listener =

View File

@ -102,8 +102,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
final GlRectDrawer drawer = new GlRectDrawer(); final GlRectDrawer drawer = new GlRectDrawer();
// Create SurfaceTextureHelper and listener. // Create SurfaceTextureHelper and listener.
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(eglBase.getEglBaseContext()); "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext());
final MockTextureListener listener = new MockTextureListener(); final MockTextureListener listener = new MockTextureListener();
surfaceTextureHelper.startListening(listener); surfaceTextureHelper.startListening(listener);
surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height); surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height);
@ -169,8 +169,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
eglBase.createPbufferSurface(width, height); eglBase.createPbufferSurface(width, height);
// Create SurfaceTextureHelper and listener. // Create SurfaceTextureHelper and listener.
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(eglBase.getEglBaseContext()); "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext());
final MockTextureListener listener = new MockTextureListener(); final MockTextureListener listener = new MockTextureListener();
surfaceTextureHelper.startListening(listener); surfaceTextureHelper.startListening(listener);
surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height); surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height);
@ -229,8 +229,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
@MediumTest @MediumTest
public static void testDispose() throws InterruptedException { public static void testDispose() throws InterruptedException {
// Create SurfaceTextureHelper and listener. // Create SurfaceTextureHelper and listener.
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null); "SurfaceTextureHelper test" /* threadName */, null);
final MockTextureListener listener = new MockTextureListener(); final MockTextureListener listener = new MockTextureListener();
surfaceTextureHelper.startListening(listener); surfaceTextureHelper.startListening(listener);
// Create EglBase with the SurfaceTexture as target EGLSurface. // Create EglBase with the SurfaceTexture as target EGLSurface.
@ -265,8 +265,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
*/ */
@SmallTest @SmallTest
public static void testDisposeImmediately() { public static void testDisposeImmediately() {
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null); "SurfaceTextureHelper test" /* threadName */, null);
surfaceTextureHelper.dispose(); surfaceTextureHelper.dispose();
} }
@ -288,8 +288,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
@MediumTest @MediumTest
public static void testStopListening() throws InterruptedException { public static void testStopListening() throws InterruptedException {
// Create SurfaceTextureHelper and listener. // Create SurfaceTextureHelper and listener.
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null); "SurfaceTextureHelper test" /* threadName */, null);
final MockTextureListener listener = new MockTextureListener(); final MockTextureListener listener = new MockTextureListener();
surfaceTextureHelper.startListening(listener); surfaceTextureHelper.startListening(listener);
// Create EglBase with the SurfaceTexture as target EGLSurface. // Create EglBase with the SurfaceTexture as target EGLSurface.
@ -324,8 +324,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
*/ */
@SmallTest @SmallTest
public static void testStopListeningImmediately() throws InterruptedException { public static void testStopListeningImmediately() throws InterruptedException {
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null); "SurfaceTextureHelper test" /* threadName */, null);
final MockTextureListener listener = new MockTextureListener(); final MockTextureListener listener = new MockTextureListener();
surfaceTextureHelper.startListening(listener); surfaceTextureHelper.startListening(listener);
stopListeningOnHandlerThread(surfaceTextureHelper); stopListeningOnHandlerThread(surfaceTextureHelper);
@ -338,8 +338,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
*/ */
@SmallTest @SmallTest
public static void testStopListeningImmediatelyOnHandlerThread() throws InterruptedException { public static void testStopListeningImmediatelyOnHandlerThread() throws InterruptedException {
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null); "SurfaceTextureHelper test" /* threadName */, null);
final MockTextureListener listener = new MockTextureListener(); final MockTextureListener listener = new MockTextureListener();
final CountDownLatch stopListeningBarrier = new CountDownLatch(1); final CountDownLatch stopListeningBarrier = new CountDownLatch(1);
@ -377,8 +377,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
@MediumTest @MediumTest
public static void testRestartListeningWithNewListener() throws InterruptedException { public static void testRestartListeningWithNewListener() throws InterruptedException {
// Create SurfaceTextureHelper and listener. // Create SurfaceTextureHelper and listener.
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null); "SurfaceTextureHelper test" /* threadName */, null);
final MockTextureListener listener1 = new MockTextureListener(); final MockTextureListener listener1 = new MockTextureListener();
surfaceTextureHelper.startListening(listener1); surfaceTextureHelper.startListening(listener1);
// Create EglBase with the SurfaceTexture as target EGLSurface. // Create EglBase with the SurfaceTexture as target EGLSurface.
@ -425,8 +425,8 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN); final EglBase eglBase = EglBase.create(null, EglBase.CONFIG_PLAIN);
// Create SurfaceTextureHelper and listener. // Create SurfaceTextureHelper and listener.
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(eglBase.getEglBaseContext()); "SurfaceTextureHelper test" /* threadName */, eglBase.getEglBaseContext());
final MockTextureListener listener = new MockTextureListener(); final MockTextureListener listener = new MockTextureListener();
surfaceTextureHelper.startListening(listener); surfaceTextureHelper.startListening(listener);
surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height); surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height);

View File

@ -286,8 +286,8 @@ public class VideoCapturerAndroidTestFixtures {
final List<CaptureFormat> formats = capturer.getSupportedFormats(); final List<CaptureFormat> formats = capturer.getSupportedFormats();
final CameraEnumerationAndroid.CaptureFormat format = formats.get(0); final CameraEnumerationAndroid.CaptureFormat format = formats.get(0);
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
final FakeCapturerObserver observer = new FakeCapturerObserver(); final FakeCapturerObserver observer = new FakeCapturerObserver();
capturer.startCapture(format.width, format.height, format.maxFramerate, capturer.startCapture(format.width, format.height, format.maxFramerate,
surfaceTextureHelper, appContext, observer); surfaceTextureHelper, appContext, observer);
@ -310,8 +310,8 @@ public class VideoCapturerAndroidTestFixtures {
final List<CaptureFormat> formats = capturer.getSupportedFormats(); final List<CaptureFormat> formats = capturer.getSupportedFormats();
final CameraEnumerationAndroid.CaptureFormat format = formats.get(0); final CameraEnumerationAndroid.CaptureFormat format = formats.get(0);
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
final FakeCapturerObserver observer = new FakeCapturerObserver(); final FakeCapturerObserver observer = new FakeCapturerObserver();
capturer.startCapture(format.width, format.height, format.maxFramerate, capturer.startCapture(format.width, format.height, format.maxFramerate,
surfaceTextureHelper, appContext, observer); surfaceTextureHelper, appContext, observer);
@ -356,8 +356,8 @@ public class VideoCapturerAndroidTestFixtures {
static public void startStopWithDifferentResolutions(VideoCapturerAndroid capturer, static public void startStopWithDifferentResolutions(VideoCapturerAndroid capturer,
Context appContext) throws InterruptedException { Context appContext) throws InterruptedException {
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
FakeCapturerObserver observer = new FakeCapturerObserver(); FakeCapturerObserver observer = new FakeCapturerObserver();
List<CaptureFormat> formats = capturer.getSupportedFormats(); List<CaptureFormat> formats = capturer.getSupportedFormats();
@ -409,8 +409,8 @@ public class VideoCapturerAndroidTestFixtures {
final CameraEnumerationAndroid.CaptureFormat format = formats.get(0); final CameraEnumerationAndroid.CaptureFormat format = formats.get(0);
Camera camera = Camera.open(capturer.getCurrentCameraId()); Camera camera = Camera.open(capturer.getCurrentCameraId());
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
final FakeCapturerObserver observer = new FakeCapturerObserver(); final FakeCapturerObserver observer = new FakeCapturerObserver();
capturer.startCapture(format.width, format.height, format.maxFramerate, capturer.startCapture(format.width, format.height, format.maxFramerate,
surfaceTextureHelper, appContext, observer); surfaceTextureHelper, appContext, observer);
@ -434,8 +434,8 @@ public class VideoCapturerAndroidTestFixtures {
final CameraEnumerationAndroid.CaptureFormat format = formats.get(0); final CameraEnumerationAndroid.CaptureFormat format = formats.get(0);
Camera camera = Camera.open(capturer.getCurrentCameraId()); Camera camera = Camera.open(capturer.getCurrentCameraId());
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
final FakeCapturerObserver observer = new FakeCapturerObserver(); final FakeCapturerObserver observer = new FakeCapturerObserver();
capturer.startCapture(format.width, format.height, format.maxFramerate, capturer.startCapture(format.width, format.height, format.maxFramerate,
surfaceTextureHelper, appContext, observer); surfaceTextureHelper, appContext, observer);
@ -460,8 +460,8 @@ public class VideoCapturerAndroidTestFixtures {
final CameraEnumerationAndroid.CaptureFormat format = formats.get(0); final CameraEnumerationAndroid.CaptureFormat format = formats.get(0);
Camera camera = Camera.open(capturer.getCurrentCameraId()); Camera camera = Camera.open(capturer.getCurrentCameraId());
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
final FakeCapturerObserver observer = new FakeCapturerObserver(); final FakeCapturerObserver observer = new FakeCapturerObserver();
capturer.startCapture(format.width, format.height, format.maxFramerate, capturer.startCapture(format.width, format.height, format.maxFramerate,
surfaceTextureHelper, appContext, observer); surfaceTextureHelper, appContext, observer);
@ -473,8 +473,8 @@ public class VideoCapturerAndroidTestFixtures {
static public void returnBufferLate(VideoCapturerAndroid capturer, static public void returnBufferLate(VideoCapturerAndroid capturer,
Context appContext) throws InterruptedException { Context appContext) throws InterruptedException {
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
FakeCapturerObserver observer = new FakeCapturerObserver(); FakeCapturerObserver observer = new FakeCapturerObserver();
List<CaptureFormat> formats = capturer.getSupportedFormats(); List<CaptureFormat> formats = capturer.getSupportedFormats();
@ -550,8 +550,8 @@ public class VideoCapturerAndroidTestFixtures {
final List<CaptureFormat> formats = capturer.getSupportedFormats(); final List<CaptureFormat> formats = capturer.getSupportedFormats();
final CameraEnumerationAndroid.CaptureFormat format = formats.get(0); final CameraEnumerationAndroid.CaptureFormat format = formats.get(0);
final SurfaceTextureHelper surfaceTextureHelper = final SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(
SurfaceTextureHelper.create(null /* sharedContext */); "SurfaceTextureHelper test" /* threadName */, null /* sharedContext */);
final FakeCapturerObserver observer = new FakeCapturerObserver(); final FakeCapturerObserver observer = new FakeCapturerObserver();
capturer.startCapture(format.width, format.height, format.maxFramerate, capturer.startCapture(format.width, format.height, format.maxFramerate,
surfaceTextureHelper, appContext, observer); surfaceTextureHelper, appContext, observer);

View File

@ -52,8 +52,9 @@ class SurfaceTextureHelper {
* Construct a new SurfaceTextureHelper sharing OpenGL resources with |sharedContext|. A dedicated * Construct a new SurfaceTextureHelper sharing OpenGL resources with |sharedContext|. A dedicated
* thread and handler is created for handling the SurfaceTexture. * thread and handler is created for handling the SurfaceTexture.
*/ */
public static SurfaceTextureHelper create(final EglBase.Context sharedContext) { public static SurfaceTextureHelper create(
final HandlerThread thread = new HandlerThread(TAG); final String threadName, final EglBase.Context sharedContext) {
final HandlerThread thread = new HandlerThread(threadName);
thread.start(); thread.start();
final Handler handler = new Handler(thread.getLooper()); final Handler handler = new Handler(thread.getLooper());

View File

@ -345,7 +345,7 @@ int32_t MediaCodecVideoDecoder::InitDecodeOnCodecThread() {
if (use_surface_) { if (use_surface_) {
surface_texture_helper_ = new rtc::RefCountedObject<SurfaceTextureHelper>( surface_texture_helper_ = new rtc::RefCountedObject<SurfaceTextureHelper>(
jni, render_egl_context_); jni, "Decoder SurfaceTextureHelper", render_egl_context_);
} }
jobject j_video_codec_enum = JavaEnumFromIndexAndClassName( jobject j_video_codec_enum = JavaEnumFromIndexAndClassName(

View File

@ -42,7 +42,7 @@ AndroidVideoCapturerJni::AndroidVideoCapturerJni(
FindClass(jni, FindClass(jni,
"org/webrtc/VideoCapturer$NativeObserver")), "org/webrtc/VideoCapturer$NativeObserver")),
surface_texture_helper_(new rtc::RefCountedObject<SurfaceTextureHelper>( surface_texture_helper_(new rtc::RefCountedObject<SurfaceTextureHelper>(
jni, j_egl_context)), jni, "Camera SurfaceTextureHelper", j_egl_context)),
capturer_(nullptr) { capturer_(nullptr) {
LOG(LS_INFO) << "AndroidVideoCapturerJni ctor"; LOG(LS_INFO) << "AndroidVideoCapturerJni ctor";
thread_checker_.DetachFromThread(); thread_checker_.DetachFromThread();

View File

@ -18,15 +18,15 @@
namespace webrtc_jni { namespace webrtc_jni {
SurfaceTextureHelper::SurfaceTextureHelper( SurfaceTextureHelper::SurfaceTextureHelper(
JNIEnv* jni, jobject j_egl_context) JNIEnv* jni, const char* thread_name, jobject j_egl_context)
: j_surface_texture_helper_(jni, jni->CallStaticObjectMethod( : j_surface_texture_helper_(jni, jni->CallStaticObjectMethod(
FindClass(jni, "org/webrtc/SurfaceTextureHelper"), FindClass(jni, "org/webrtc/SurfaceTextureHelper"),
GetStaticMethodID(jni, GetStaticMethodID(jni,
FindClass(jni, "org/webrtc/SurfaceTextureHelper"), FindClass(jni, "org/webrtc/SurfaceTextureHelper"),
"create", "create",
"(Lorg/webrtc/EglBase$Context;)" "(Ljava/lang/String;Lorg/webrtc/EglBase$Context;)"
"Lorg/webrtc/SurfaceTextureHelper;"), "Lorg/webrtc/SurfaceTextureHelper;"),
j_egl_context)), jni->NewStringUTF(thread_name), j_egl_context)),
j_return_texture_method_( j_return_texture_method_(
GetMethodID(jni, GetMethodID(jni,
FindClass(jni, "org/webrtc/SurfaceTextureHelper"), FindClass(jni, "org/webrtc/SurfaceTextureHelper"),

View File

@ -38,7 +38,9 @@ namespace webrtc_jni {
// 4. Call CreateTextureFrame to wrap the Java texture in a VideoFrameBuffer. // 4. Call CreateTextureFrame to wrap the Java texture in a VideoFrameBuffer.
class SurfaceTextureHelper : public rtc::RefCountInterface { class SurfaceTextureHelper : public rtc::RefCountInterface {
public: public:
SurfaceTextureHelper(JNIEnv* jni, jobject j_egl_context); SurfaceTextureHelper(JNIEnv* jni,
const char* thread_name,
jobject j_egl_context);
jobject GetJavaSurfaceTextureHelper() const; jobject GetJavaSurfaceTextureHelper() const;