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

Commit 5380ba10 authored by Jiyong Park's avatar Jiyong Park Committed by android-build-merger
Browse files

Merge "Load GL graphics drivers explicitly from sphal namespace" into oc-dev am: 8bac3c1f

am: babbf26e

Change-Id: I8c006b6df78dfff217f582b26ca9c6e12c99945c
parents 3f18aae9 babbf26e
Loading
Loading
Loading
Loading
+30 −5
Original line number Diff line number Diff line
@@ -33,6 +33,10 @@
#include "egl_trace.h"
#include "egldefs.h"

extern "C" {
  android_namespace_t* android_get_exported_namespace(const char*);
}

// ----------------------------------------------------------------------------
namespace android {
// ----------------------------------------------------------------------------
@@ -106,6 +110,11 @@ static void* do_dlopen(const char* path, int mode) {
    return dlopen(path, mode);
}

static void* do_android_dlopen_ext(const char* path, int mode, const android_dlextinfo* info) {
    ATRACE_CALL();
    return android_dlopen_ext(path, mode, info);
}

// ----------------------------------------------------------------------------

Loader::driver_t::driver_t(void* gles)
@@ -414,6 +423,27 @@ static void* load_system_driver(const char* kind) {
    }
    const char* const driver_absolute_path = absolutePath.c_str();

    // Try to load drivers from the 'sphal' namespace, if it exist. Fall back to
    // the original routine when the namespace does not exist or the load from
    // the namespace fails.
    // See /system/core/rootdir/etc/ld.config.txt for the configuration of the
    // sphal namespace.
    android_namespace_t* sphal_namespace = android_get_exported_namespace("sphal");
    if (sphal_namespace != NULL) {
        const android_dlextinfo dlextinfo = {
            .flags = ANDROID_DLEXT_USE_NAMESPACE,
            .library_namespace = sphal_namespace,
        };
        void* dso = do_android_dlopen_ext(driver_absolute_path, RTLD_LOCAL | RTLD_NOW, &dlextinfo);
        if (dso) {
            ALOGD("loaded %s from sphal namespace", driver_absolute_path);
            return dso;
        }
        else {
            ALOGW("failed to load %s from sphal namespace: %s", driver_absolute_path, dlerror());
        }
    }

    void* dso = do_dlopen(driver_absolute_path, RTLD_NOW | RTLD_LOCAL);
    if (dso == 0) {
        const char* err = dlerror();
@@ -426,11 +456,6 @@ static void* load_system_driver(const char* kind) {
    return dso;
}

static void* do_android_dlopen_ext(const char* path, int mode, const android_dlextinfo* info) {
    ATRACE_CALL();
    return android_dlopen_ext(path, mode, info);
}

static const char* HAL_SUBNAME_KEY_PROPERTIES[2] = {
    "ro.hardware.egl",
    "ro.board.platform",