summaryrefslogtreecommitdiff
path: root/media/libmediaplayer2/JavaVMHelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libmediaplayer2/JavaVMHelper.cpp')
-rw-r--r--media/libmediaplayer2/JavaVMHelper.cpp162
1 files changed, 0 insertions, 162 deletions
diff --git a/media/libmediaplayer2/JavaVMHelper.cpp b/media/libmediaplayer2/JavaVMHelper.cpp
deleted file mode 100644
index 8d03ed0a10..0000000000
--- a/media/libmediaplayer2/JavaVMHelper.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "JavaVMHelper"
-
-#include "mediaplayer2/JavaVMHelper.h"
-
-#include <media/stagefright/foundation/ADebug.h>
-#include <utils/threads.h>
-
-#include <stdlib.h>
-
-namespace android {
-
-// static
-std::atomic<JavaVM *> JavaVMHelper::sJavaVM(NULL);
-
-/*
- * Makes the current thread visible to the VM.
- *
- * The JNIEnv pointer returned is only valid for the current thread, and
- * thus must be tucked into thread-local storage.
- */
-static int javaAttachThread(const char* threadName, JNIEnv** pEnv) {
- JavaVMAttachArgs args;
- JavaVM* vm;
- jint result;
-
- vm = JavaVMHelper::getJavaVM();
- if (vm == NULL) {
- return JNI_ERR;
- }
-
- args.version = JNI_VERSION_1_4;
- args.name = (char*) threadName;
- args.group = NULL;
-
- result = vm->AttachCurrentThread(pEnv, (void*) &args);
- if (result != JNI_OK) {
- ALOGI("NOTE: attach of thread '%s' failed\n", threadName);
- }
-
- return result;
-}
-
-/*
- * Detach the current thread from the set visible to the VM.
- */
-static int javaDetachThread(void) {
- JavaVM* vm;
- jint result;
-
- vm = JavaVMHelper::getJavaVM();
- if (vm == NULL) {
- return JNI_ERR;
- }
-
- result = vm->DetachCurrentThread();
- if (result != JNI_OK) {
- ALOGE("ERROR: thread detach failed\n");
- }
- return result;
-}
-
-/*
- * When starting a native thread that will be visible from the VM, we
- * bounce through this to get the right attach/detach action.
- * Note that this function calls free(args)
- */
-static int javaThreadShell(void* args) {
- void* start = ((void**)args)[0];
- void* userData = ((void **)args)[1];
- char* name = (char*) ((void **)args)[2]; // we own this storage
- free(args);
- JNIEnv* env;
- int result;
-
- /* hook us into the VM */
- if (javaAttachThread(name, &env) != JNI_OK) {
- return -1;
- }
-
- /* start the thread running */
- result = (*(android_thread_func_t)start)(userData);
-
- /* unhook us */
- javaDetachThread();
- free(name);
-
- return result;
-}
-
-/*
- * This is invoked from androidCreateThreadEtc() via the callback
- * set with androidSetCreateThreadFunc().
- *
- * We need to create the new thread in such a way that it gets hooked
- * into the VM before it really starts executing.
- */
-static int javaCreateThreadEtc(
- android_thread_func_t entryFunction,
- void* userData,
- const char* threadName,
- int32_t threadPriority,
- size_t threadStackSize,
- android_thread_id_t* threadId) {
- void** args = (void**) malloc(3 * sizeof(void*)); // javaThreadShell must free
- int result;
-
- LOG_ALWAYS_FATAL_IF(threadName == nullptr, "threadName not provided to javaCreateThreadEtc");
-
- args[0] = (void*) entryFunction;
- args[1] = userData;
- args[2] = (void*) strdup(threadName); // javaThreadShell must free
-
- result = androidCreateRawThreadEtc(javaThreadShell, args,
- threadName, threadPriority, threadStackSize, threadId);
- return result;
-}
-
-// static
-JNIEnv *JavaVMHelper::getJNIEnv() {
- JNIEnv *env;
- JavaVM *vm = sJavaVM.load();
- CHECK(vm != NULL);
-
- if (vm->GetEnv((void **)&env, JNI_VERSION_1_4) != JNI_OK) {
- return NULL;
- }
-
- return env;
-}
-
-//static
-JavaVM *JavaVMHelper::getJavaVM() {
- return sJavaVM.load();
-}
-
-// static
-void JavaVMHelper::setJavaVM(JavaVM *vm) {
- sJavaVM.store(vm);
-
- // Ensure that Thread(/*canCallJava*/ true) in libutils is attached to the VM.
- // This is supposed to be done by runtime, but when libutils is used with linker
- // namespace, CreateThreadFunc should be initialized separately within the namespace.
- androidSetCreateThreadFunc((android_create_thread_fn) javaCreateThreadEtc);
-}
-
-} // namespace android