break SF dependencies on libdvm and libandroid_runtime
these libraries are only needed for debugging and are now linked at runtime if needed. Change-Id: I03f138523c6de166a1e2700d4454d4a854aee145
This commit is contained in:
parent
92efd84f37
commit
c1d359d42b
|
@ -3,6 +3,7 @@ include $(CLEAR_VARS)
|
||||||
|
|
||||||
LOCAL_SRC_FILES:= \
|
LOCAL_SRC_FILES:= \
|
||||||
Client.cpp \
|
Client.cpp \
|
||||||
|
DdmConnection.cpp \
|
||||||
DisplayDevice.cpp \
|
DisplayDevice.cpp \
|
||||||
EventThread.cpp \
|
EventThread.cpp \
|
||||||
Layer.cpp \
|
Layer.cpp \
|
||||||
|
@ -39,6 +40,7 @@ endif
|
||||||
|
|
||||||
LOCAL_SHARED_LIBRARIES := \
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
libcutils \
|
libcutils \
|
||||||
|
libdl \
|
||||||
libhardware \
|
libhardware \
|
||||||
libutils \
|
libutils \
|
||||||
libEGL \
|
libEGL \
|
||||||
|
@ -47,13 +49,6 @@ LOCAL_SHARED_LIBRARIES := \
|
||||||
libui \
|
libui \
|
||||||
libgui
|
libgui
|
||||||
|
|
||||||
# this is only needed for DDMS debugging
|
|
||||||
ifneq ($(TARGET_BUILD_PDK),true)
|
|
||||||
LOCAL_SHARED_LIBRARIES += libdvm libandroid_runtime
|
|
||||||
LOCAL_CFLAGS += -DDDMS_DEBUGGING
|
|
||||||
LOCAL_SRC_FILES += DdmConnection.cpp
|
|
||||||
endif
|
|
||||||
|
|
||||||
LOCAL_MODULE:= libsurfaceflinger
|
LOCAL_MODULE:= libsurfaceflinger
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
|
|
@ -14,16 +14,16 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
#include <android_runtime/AndroidRuntime.h>
|
#include <android_runtime/AndroidRuntime.h>
|
||||||
|
|
||||||
#include "jni.h"
|
#include "jni.h"
|
||||||
#include "DdmConnection.h"
|
#include "DdmConnection.h"
|
||||||
|
|
||||||
extern "C" jint Java_com_android_internal_util_WithFramework_registerNatives(
|
|
||||||
JNIEnv* env, jclass clazz);
|
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
|
|
||||||
|
|
||||||
void DdmConnection::start(const char* name) {
|
void DdmConnection::start(const char* name) {
|
||||||
JavaVM* vm;
|
JavaVM* vm;
|
||||||
JNIEnv* env;
|
JNIEnv* env;
|
||||||
|
@ -40,12 +40,36 @@ void DdmConnection::start(const char* name) {
|
||||||
args.nOptions = 1;
|
args.nOptions = 1;
|
||||||
args.ignoreUnrecognized = JNI_FALSE;
|
args.ignoreUnrecognized = JNI_FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
void* libdvm_dso = dlopen("libdvm.so", RTLD_NOW);
|
||||||
|
ALOGE_IF(!libdvm_dso, "DdmConnection: %s", dlerror());
|
||||||
|
|
||||||
|
void* libandroid_runtime_dso = dlopen("libandroid_runtime.so", RTLD_NOW);
|
||||||
|
ALOGE_IF(!libandroid_runtime_dso, "DdmConnection: %s", dlerror());
|
||||||
|
|
||||||
|
if (!libdvm_dso || !libandroid_runtime_dso) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
jint (*JNI_CreateJavaVM)(JavaVM** p_vm, JNIEnv** p_env, void* vm_args);
|
||||||
|
JNI_CreateJavaVM = (typeof JNI_CreateJavaVM)dlsym(libdvm_dso, "JNI_CreateJavaVM");
|
||||||
|
ALOGE_IF(!JNI_CreateJavaVM, "DdmConnection: %s", dlerror());
|
||||||
|
|
||||||
|
jint (*registerNatives)(JNIEnv* env, jclass clazz);
|
||||||
|
registerNatives = (typeof registerNatives)dlsym(libandroid_runtime_dso,
|
||||||
|
"Java_com_android_internal_util_WithFramework_registerNatives");
|
||||||
|
ALOGE_IF(!registerNatives, "DdmConnection: %s", dlerror());
|
||||||
|
|
||||||
|
if (!JNI_CreateJavaVM || !registerNatives) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
if (JNI_CreateJavaVM(&vm, &env, &args) == 0) {
|
if (JNI_CreateJavaVM(&vm, &env, &args) == 0) {
|
||||||
jclass startClass;
|
jclass startClass;
|
||||||
jmethodID startMeth;
|
jmethodID startMeth;
|
||||||
|
|
||||||
// register native code
|
// register native code
|
||||||
if (Java_com_android_internal_util_WithFramework_registerNatives(env, 0) == 0) {
|
if (registerNatives(env, 0) == 0) {
|
||||||
// set our name by calling DdmHandleAppName.setAppName()
|
// set our name by calling DdmHandleAppName.setAppName()
|
||||||
startClass = env->FindClass("android/ddm/DdmHandleAppName");
|
startClass = env->FindClass("android/ddm/DdmHandleAppName");
|
||||||
if (startClass) {
|
if (startClass) {
|
||||||
|
@ -70,6 +94,15 @@ void DdmConnection::start(const char* name) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
error:
|
||||||
|
if (libandroid_runtime_dso) {
|
||||||
|
dlclose(libandroid_runtime_dso);
|
||||||
|
}
|
||||||
|
if (libdvm_dso) {
|
||||||
|
dlclose(libdvm_dso);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // namespace android
|
}; // namespace android
|
||||||
|
|
|
@ -105,18 +105,14 @@ SurfaceFlinger::SurfaceFlinger()
|
||||||
property_get("debug.sf.showupdates", value, "0");
|
property_get("debug.sf.showupdates", value, "0");
|
||||||
mDebugRegion = atoi(value);
|
mDebugRegion = atoi(value);
|
||||||
|
|
||||||
#ifdef DDMS_DEBUGGING
|
|
||||||
property_get("debug.sf.ddms", value, "0");
|
property_get("debug.sf.ddms", value, "0");
|
||||||
mDebugDDMS = atoi(value);
|
mDebugDDMS = atoi(value);
|
||||||
if (mDebugDDMS) {
|
if (mDebugDDMS) {
|
||||||
DdmConnection::start(getServiceName());
|
DdmConnection::start(getServiceName());
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
#warning "DDMS_DEBUGGING disabled"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ALOGI_IF(mDebugRegion, "showupdates enabled");
|
ALOGI_IF(mDebugRegion, "showupdates enabled");
|
||||||
ALOGI_IF(mDebugDDMS, "DDMS debugging enabled");
|
ALOGI_IF(mDebugDDMS, "DDMS debugging enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceFlinger::onFirstRef()
|
void SurfaceFlinger::onFirstRef()
|
||||||
|
|
Loading…
Reference in New Issue