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

Commit d8724695 authored by Jesse Hall's avatar Jesse Hall Committed by android-build-merger
Browse files

Merge "Load the gralloc module at library load" into oc-dr1-dev

am: 96a81c33

Change-Id: I31604be377e61becdbbb72c4ab2a556491c2de90
parents e7362178 96a81c33
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -293,20 +293,31 @@ Return<void> GrallocMapper::unlock(void* buffer, unlock_cb hidl_cb) {
    return Void();
}

IMapper* HIDL_FETCH_IMapper(const char* /* name */) {
    const hw_module_t* module = nullptr;
namespace {
// Load the gralloc module when this shared library is loaded, rather than
// waiting until HIDL_FETCH_IMapper is called. This allows it (and its
// dependencies) to be loaded by Zygote, reducing app startup time and sharing
// pages dirtied during library load between all apps.
struct GrallocModule {
    const hw_module_t* module;
    GrallocModule() : module(nullptr) {
        int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
    if (err) {
        ALOGE("failed to get gralloc module");
        return nullptr;
        ALOGE_IF(err, "failed to get gralloc module: %s (%d)", strerror(-err),
                 err);
    }
};
GrallocModule gGralloc;
}  // namespace

IMapper* HIDL_FETCH_IMapper(const char* /* name */) {
    if (!gGralloc.module) return nullptr;

    uint8_t major = (module->module_api_version >> 8) & 0xff;
    uint8_t major = (gGralloc.module->module_api_version >> 8) & 0xff;
    switch (major) {
        case 1:
            return new Gralloc1Mapper(module);
            return new Gralloc1Mapper(gGralloc.module);
        case 0:
            return new Gralloc0Mapper(module);
            return new Gralloc0Mapper(gGralloc.module);
        default:
            ALOGE("unknown gralloc module major version %d", major);
            return nullptr;