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

Commit c1d359d4 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

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
parent 92efd84f
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
    Client.cpp                              \
    DdmConnection.cpp                       \
    DisplayDevice.cpp                       \
    EventThread.cpp                         \
    Layer.cpp                               \
@@ -39,6 +40,7 @@ endif

LOCAL_SHARED_LIBRARIES := \
	libcutils \
	libdl \
	libhardware \
	libutils \
	libEGL \
@@ -47,13 +49,6 @@ LOCAL_SHARED_LIBRARIES := \
	libui \
	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

include $(BUILD_SHARED_LIBRARY)
+37 −4
Original line number Diff line number Diff line
@@ -14,16 +14,16 @@
 * limitations under the License.
 */

#include <dlfcn.h>

#include <android_runtime/AndroidRuntime.h>

#include "jni.h"
#include "DdmConnection.h"

extern "C" jint Java_com_android_internal_util_WithFramework_registerNatives(
        JNIEnv* env, jclass clazz);

namespace android {


void DdmConnection::start(const char* name) {
    JavaVM* vm;
    JNIEnv* env;
@@ -40,12 +40,36 @@ void DdmConnection::start(const char* name) {
    args.nOptions = 1;
    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) {
        jclass startClass;
        jmethodID startMeth;

        // 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()
            startClass = env->FindClass("android/ddm/DdmHandleAppName");
            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
+2 −6
Original line number Diff line number Diff line
@@ -105,15 +105,11 @@ SurfaceFlinger::SurfaceFlinger()
    property_get("debug.sf.showupdates", value, "0");
    mDebugRegion = atoi(value);

#ifdef DDMS_DEBUGGING
    property_get("debug.sf.ddms", value, "0");
    mDebugDDMS = atoi(value);
    if (mDebugDDMS) {
        DdmConnection::start(getServiceName());
    }
#else
#warning "DDMS_DEBUGGING disabled"
#endif

    ALOGI_IF(mDebugRegion, "showupdates enabled");
    ALOGI_IF(mDebugDDMS, "DDMS debugging enabled");