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

Commit b0b5a4de authored by Chia-I Wu's avatar Chia-I Wu
Browse files

graphics: add IComposer service daemon

Since HALs might run binder services, we need to start thread pool for
both binder and hwbinder.

Bug: 32021609
Test: builds and boots
Change-Id: I9779e86b1e611a180b1984af36c417dafc3329bc
parent 0c6b7f42
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -14,3 +14,24 @@ cc_library_shared {
        "libutils",
    ],
}

cc_binary {
    name: "android.hardware.graphics.composer@2.1-service",
    relative_install_path: "hw",
    srcs: ["service.cpp", "Hwc.cpp"],
    cppflags: ["-DBINDERIZED"],
    init_rc: ["android.hardware.graphics.composer@2.1-service.rc"],

    shared_libs: [
        "android.hardware.graphics.allocator@2.0",
        "android.hardware.graphics.composer@2.1",
        "libbase",
        "libbinder",
        "libcutils",
        "libhardware",
        "libhidl",
        "libhwbinder",
        "liblog",
        "libutils",
    ],
}
+5 −0
Original line number Diff line number Diff line
service hwcomposer-2-1 /system/bin/hw/android.hardware.graphics.composer@2.1-service
    class hal
    user system
    group graphics drmrpc readproc
    onrestart restart surfaceflinger
+56 −0
Original line number Diff line number Diff line
/*
 * Copyright 2016 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 "HWComposerService"

#include <binder/ProcessState.h>
#include <hwbinder/IPCThreadState.h>
#include <hwbinder/ProcessState.h>
#include <utils/StrongPointer.h>
#include "Hwc.h"

using android::sp;
using android::hardware::IPCThreadState;
using android::hardware::ProcessState;
using android::hardware::graphics::composer::V2_1::IComposer;
using android::hardware::graphics::composer::V2_1::implementation::HIDL_FETCH_IComposer;

int main()
{
    const char instance[] = "hwcomposer";

    ALOGI("Service is starting.");

    sp<IComposer> service = HIDL_FETCH_IComposer(instance);
    if (service == nullptr) {
        ALOGI("getService returned NULL");
        return -1;
    }

    LOG_FATAL_IF(service->isRemote(), "Service is REMOTE!");

    service->registerAsService(instance);

    // the conventional HAL might start binder services
    android::ProcessState::self()->setThreadPoolMaxThreadCount(4);
    android::ProcessState::self()->startThreadPool();

    ProcessState::self()->setThreadPoolMaxThreadCount(0);
    ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();

    return 0;
}