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

Commit 7233539c authored by Chia-I Wu's avatar Chia-I Wu Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'graphics-service'

* changes:
  graphics: add IComposer service daemon
  graphics: fix leaks in IComposer default impl
  graphics: add IAllocator service daemon
parents 5bcecaf0 b0b5a4de
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -15,6 +15,21 @@ cc_library_shared {
    ],
    ],
}
}


cc_binary {
    name: "android.hardware.graphics.allocator@2.0-service",
    relative_install_path: "hw",
    srcs: ["service.cpp"],
    init_rc: ["android.hardware.graphics.allocator@2.0-service.rc"],

    shared_libs: [
        "android.hardware.graphics.allocator@2.0",
        "libhidl",
        "libhwbinder",
        "liblog",
        "libutils",
    ],
}

cc_library_static {
cc_library_static {
    name: "libgralloc1-adapter",
    name: "libgralloc1-adapter",
    srcs: ["gralloc1-adapter.c"],
    srcs: ["gralloc1-adapter.c"],
+5 −0
Original line number Original line Diff line number Diff line
service gralloc-2-0 /system/bin/hw/android.hardware.graphics.allocator@2.0-service
    class hal
    user system
    group graphics drmrpc readproc
    onrestart restart surfaceflinger
+51 −0
Original line number Original line 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 "GrallocService"

#include <android/hardware/graphics/allocator/2.0/IAllocator.h>
#include <hwbinder/IPCThreadState.h>
#include <hwbinder/ProcessState.h>
#include <utils/StrongPointer.h>

using android::sp;
using android::hardware::IPCThreadState;
using android::hardware::ProcessState;
using android::hardware::graphics::allocator::V2_0::IAllocator;

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

    ALOGI("Service is starting.");

    sp<IAllocator> service = IAllocator::getService(instance,
            true /* getStub */);
    if (service == nullptr) {
        ALOGI("getService returned NULL");
        return -1;
    }

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

    service->registerAsService(instance);

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

    return 0;
}
+21 −0
Original line number Original line Diff line number Diff line
@@ -14,3 +14,24 @@ cc_library_shared {
        "libutils",
        "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",
    ],
}
+8 −0
Original line number Original line Diff line number Diff line
@@ -698,6 +698,14 @@ Return<void> HwcHal::createLayer(Display display, createLayer_cb hidl_cb)
Return<Error> HwcHal::destroyLayer(Display display, Layer layer)
Return<Error> HwcHal::destroyLayer(Display display, Layer layer)
{
{
    auto error = mDispatch.destroyLayer(mDevice, display, layer);
    auto error = mDispatch.destroyLayer(mDevice, display, layer);
    if (error == HWC2_ERROR_NONE) {
        std::lock_guard<std::mutex> lock(mDisplayMutex);

        auto dpy = mDisplays.find(display);
        dpy->second.LayerBuffers.erase(layer);
        dpy->second.LayerSidebandStreams.erase(layer);
    }

    return static_cast<Error>(error);
    return static_cast<Error>(error);
}
}


Loading