From 330f6e62b24a80eb92f08a60eb6b769480572be9 Mon Sep 17 00:00:00 2001 From: Pyry Haulos Date: Tue, 6 Oct 2015 15:46:39 -0700 Subject: [PATCH] Add ability to choose ExecServer port on Android Both ExecService and ServiceStarter will now use "port" integer extra, if supplied as part of intent, to choose port. Bug: 23429375 Change-Id: Ia4c5f6f4c90e01f8879aa76a9ba48c8addfc9669 --- android/package/AndroidManifest.xml | 21 +++++------- .../deqp/execserver/ExecServerActivity.java | 19 ++--------- .../drawelements/deqp/execserver/ExecService.java | 39 +++++++++++++++++----- .../deqp/execserver/ServiceStarter.java | 23 ++++++++----- .../drawelements/deqp/testercore/RemoteAPI.java | 2 +- .../platform/android/tcuAndroidExecService.cpp | 2 +- .../platform/android/tcuAndroidExecService.hpp | 2 +- framework/platform/android/tcuAndroidJNI.cpp | 10 +++--- 8 files changed, 65 insertions(+), 53 deletions(-) diff --git a/android/package/AndroidManifest.xml b/android/package/AndroidManifest.xml index 4bc0d4b..322ad47 100644 --- a/android/package/AndroidManifest.xml +++ b/android/package/AndroidManifest.xml @@ -1,21 +1,16 @@ - + - - - - - + android:exported="true" /> - - - + + + diff --git a/android/package/src/com/drawelements/deqp/execserver/ExecServerActivity.java b/android/package/src/com/drawelements/deqp/execserver/ExecServerActivity.java index b16e4be..843c216 100644 --- a/android/package/src/com/drawelements/deqp/execserver/ExecServerActivity.java +++ b/android/package/src/com/drawelements/deqp/execserver/ExecServerActivity.java @@ -36,10 +36,7 @@ import com.drawelements.deqp.R; public class ExecServerActivity extends Activity { - private static final String LOG_TAG = "dEQP/ExecServer"; - private static final int PORT = 50016; - - private TextView m_statusText; + private TextView m_statusText; @Override protected void onCreate (Bundle savedInstance) { @@ -52,18 +49,8 @@ public class ExecServerActivity extends Activity { @Override protected void onStart () { super.onStart(); - - try { - Intent svc = new Intent(this, com.drawelements.deqp.execserver.ExecService.class); - startService(svc); - } - catch (Exception e) { - Log.e(LOG_TAG, "Service starter starting problem", e); - m_statusText.setText("Failed to start ExecServer!"); - } - - // \todo [2013-05-07 pyry] Show IP address - m_statusText.setText(String.format("Listening on port %d", PORT)); + // \todo [2015-10-06 pyry] Connect to service, check status, offer option for killing it + m_statusText.setText("dEQP ExecServer is running"); } @Override diff --git a/android/package/src/com/drawelements/deqp/execserver/ExecService.java b/android/package/src/com/drawelements/deqp/execserver/ExecService.java index d091bad..bd65f92 100644 --- a/android/package/src/com/drawelements/deqp/execserver/ExecService.java +++ b/android/package/src/com/drawelements/deqp/execserver/ExecService.java @@ -31,9 +31,17 @@ import android.os.Binder; import android.os.IBinder; import com.drawelements.deqp.execserver.ExecServerActivity; +import com.drawelements.deqp.testercore.Log; import com.drawelements.deqp.R; public class ExecService extends Service { + + public static final String LOG_TAG = "dEQP"; + public static final int DEFAULT_PORT = 50016; + + private int m_curPort = -1; + private boolean m_isRunning = false; + static { System.loadLibrary("deqp"); } @@ -50,12 +58,24 @@ public class ExecService extends Service { private final IBinder m_binder = new LocalBinder(); @Override - public void onCreate () { - onCreateNative(); - } - - @Override public int onStartCommand (Intent intent, int flags, int startId) { + final int port = intent != null ? intent.getIntExtra("port", DEFAULT_PORT) : DEFAULT_PORT; + + if (m_isRunning && (m_curPort != port)) { + Log.i(LOG_TAG, String.format("Port changed (old: %d, new: %d), killing old server", m_curPort, port)); + stopServer(); + m_isRunning = false; + } + + if (!m_isRunning) { + startServer(port); + + m_isRunning = true; + m_curPort = port; + + Log.i(LOG_TAG, String.format("Listening on port %d", m_curPort)); + } + // Intent to launch when notification is clicked. Intent launchIntent = new Intent(this, ExecServerActivity.class); launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -76,9 +96,12 @@ public class ExecService extends Service { @Override public void onDestroy () { - onDestroyNative(); + if (m_isRunning) { + stopServer(); + m_isRunning = false; + } } - private native void onCreateNative (); - private native void onDestroyNative (); + private native void startServer (int port); + private native void stopServer (); } diff --git a/android/package/src/com/drawelements/deqp/execserver/ServiceStarter.java b/android/package/src/com/drawelements/deqp/execserver/ServiceStarter.java index 8bcefd8..e26880a 100644 --- a/android/package/src/com/drawelements/deqp/execserver/ServiceStarter.java +++ b/android/package/src/com/drawelements/deqp/execserver/ServiceStarter.java @@ -26,22 +26,29 @@ package com.drawelements.deqp.execserver; import android.app.Activity; import android.os.Bundle; import com.drawelements.deqp.testercore.Log; +import com.drawelements.deqp.execserver.ExecService; import android.content.Intent; -public class ServiceStarter extends Activity -{ - private static final String LOG_TAG = "dEQP/ServiceStarter"; +public class ServiceStarter extends Activity { @Override - public void onCreate(Bundle icicle) - { - super.onCreate(icicle); + public void onCreate(Bundle savedInstance) { + super.onCreate(savedInstance); + } + + @Override + public void onStart() { + super.onStart(); + + final int port = getIntent().getIntExtra("port", ExecService.DEFAULT_PORT); + try { - Intent svc = new Intent(this, com.drawelements.deqp.execserver.ExecService.class); + Intent svc = new Intent(this, ExecService.class); + svc.putExtra("port", port); startService(svc); } catch (Exception e) { - Log.e(LOG_TAG, "Service starter starting problem", e); + Log.e(ExecService.LOG_TAG, "Failed to start ExecService", e); } finish(); } diff --git a/android/package/src/com/drawelements/deqp/testercore/RemoteAPI.java b/android/package/src/com/drawelements/deqp/testercore/RemoteAPI.java index b1c515d..f54e5f3 100644 --- a/android/package/src/com/drawelements/deqp/testercore/RemoteAPI.java +++ b/android/package/src/com/drawelements/deqp/testercore/RemoteAPI.java @@ -33,7 +33,7 @@ import java.util.List; public class RemoteAPI { - private static final String LOG_TAG = "dEQP/RemoteAPI"; + private static final String LOG_TAG = "dEQP"; private Context m_context; private String m_processName; diff --git a/framework/platform/android/tcuAndroidExecService.cpp b/framework/platform/android/tcuAndroidExecService.cpp index 8fa2a1f..0766b38 100644 --- a/framework/platform/android/tcuAndroidExecService.cpp +++ b/framework/platform/android/tcuAndroidExecService.cpp @@ -350,7 +350,7 @@ void ServerThread::stop (void) // ExecService -ExecService::ExecService (JavaVM* vm, jobject context, deSocketFamily family, int port) +ExecService::ExecService (JavaVM* vm, jobject context, int port, deSocketFamily family) : m_process (vm, context) , m_thread (vm, &m_process, family, port) { diff --git a/framework/platform/android/tcuAndroidExecService.hpp b/framework/platform/android/tcuAndroidExecService.hpp index 1c02ff7..eef4319 100644 --- a/framework/platform/android/tcuAndroidExecService.hpp +++ b/framework/platform/android/tcuAndroidExecService.hpp @@ -108,7 +108,7 @@ private: class ExecService { public: - ExecService (JavaVM* vm, jobject context, deSocketFamily family = (deSocketFamily)DEFAULT_SOCKETFAMILY, int port = DEFAULT_PORT); + ExecService (JavaVM* vm, jobject context, int port, deSocketFamily family = (deSocketFamily)DEFAULT_SOCKETFAMILY); ~ExecService (void); void start (void); diff --git a/framework/platform/android/tcuAndroidJNI.cpp b/framework/platform/android/tcuAndroidJNI.cpp index 95f2fe8..11db382 100644 --- a/framework/platform/android/tcuAndroidJNI.cpp +++ b/framework/platform/android/tcuAndroidJNI.cpp @@ -67,7 +67,7 @@ static void logException (const std::exception& e) DE_BEGIN_EXTERN_C -JNIEXPORT void JNICALL Java_com_drawelements_deqp_execserver_ExecService_onCreateNative (JNIEnv* env, jobject obj) +JNIEXPORT void JNICALL Java_com_drawelements_deqp_execserver_ExecService_startServer (JNIEnv* env, jobject obj, jint port) { tcu::Android::ExecService* service = DE_NULL; JavaVM* vm = DE_NULL; @@ -79,7 +79,7 @@ JNIEXPORT void JNICALL Java_com_drawelements_deqp_execserver_ExecService_onCreat env->GetJavaVM(&vm); TCU_CHECK_INTERNAL(vm); - service = new tcu::Android::ExecService(vm, obj); + service = new tcu::Android::ExecService(vm, obj, port); service->start(); setExecService(env, obj, service); @@ -88,11 +88,11 @@ JNIEXPORT void JNICALL Java_com_drawelements_deqp_execserver_ExecService_onCreat { logException(e); delete service; - tcu::die("ExecService.onCreateNative() failed"); + tcu::die("ExecService.startServer() failed"); } } -JNIEXPORT void JNICALL Java_com_drawelements_deqp_execserver_ExecService_onDestroyNative (JNIEnv* env, jobject obj) +JNIEXPORT void JNICALL Java_com_drawelements_deqp_execserver_ExecService_stopServer (JNIEnv* env, jobject obj) { try { @@ -107,7 +107,7 @@ JNIEXPORT void JNICALL Java_com_drawelements_deqp_execserver_ExecService_onDestr catch (const std::exception& e) { logException(e); - tcu::die("ExecService.onDestroyNative() failed"); + tcu::die("ExecService.stopServer() failed"); } } -- 2.7.4