Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7691af90 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Make sure that the event callback thread is Java capable in the simulator.

parent c34ebce4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ LOCAL_SHARED_LIBRARIES += \

ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true)
        LOCAL_LDLIBS += -lpthread -ldl
        LOCAL_SHARED_LIBRARIES += libdvm
        LOCAL_CPPFLAGS += -DANDROID_SIMULATOR
endif

ifneq ($(TARGET_SIMULATOR),true)
+22 −0
Original line number Diff line number Diff line
@@ -28,6 +28,10 @@

#include <media/stagefright/MediaDebug.h>

#ifdef ANDROID_SIMULATOR
#include <jni.h>
#endif

namespace android {

TimedEventQueue::TimedEventQueue()
@@ -183,8 +187,26 @@ int64_t TimedEventQueue::getRealTimeUs() {

// static
void *TimedEventQueue::ThreadWrapper(void *me) {

#ifdef ANDROID_SIMULATOR
    // The simulator runs everything as one process, so any
    // Binder calls happen on this thread instead of a thread
    // in another process. We therefore need to make sure that
    // this thread can do calls into interpreted code.
    // On the device this is not an issue because the remote
    // thread will already be set up correctly for this.
    JavaVM *vm;
    int numvms;
    JNI_GetCreatedJavaVMs(&vm, 1, &numvms);
    JNIEnv *env;
    vm->AttachCurrentThread(&env, NULL);
#endif

    static_cast<TimedEventQueue *>(me)->threadEntry();

#ifdef ANDROID_SIMULATOR
    vm->DetachCurrentThread();
#endif
    return NULL;
}