diff options
author | Chia-I Wu <olv@google.com> | 2016-10-17 14:56:15 +0800 |
---|---|---|
committer | Chia-I Wu <olv@google.com> | 2016-10-19 12:04:51 +0800 |
commit | b0b5a4de76f9d59591554edf62f2ae95aadb0fd4 (patch) | |
tree | 9354c9fdea5424d304b6c3e9fb4b2a19b5395ba3 /graphics | |
parent | 0c6b7f42a6f893ad978a039e1be711b77af5ea6b (diff) | |
download | platform_hardware_interfaces-b0b5a4de76f9d59591554edf62f2ae95aadb0fd4.tar.gz platform_hardware_interfaces-b0b5a4de76f9d59591554edf62f2ae95aadb0fd4.tar.bz2 platform_hardware_interfaces-b0b5a4de76f9d59591554edf62f2ae95aadb0fd4.zip |
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
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/composer/2.1/default/Android.bp | 21 | ||||
-rw-r--r-- | graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc | 5 | ||||
-rw-r--r-- | graphics/composer/2.1/default/service.cpp | 56 |
3 files changed, 82 insertions, 0 deletions
diff --git a/graphics/composer/2.1/default/Android.bp b/graphics/composer/2.1/default/Android.bp index f91c9a264d..6936347edf 100644 --- a/graphics/composer/2.1/default/Android.bp +++ b/graphics/composer/2.1/default/Android.bp @@ -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", + ], +} diff --git a/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc new file mode 100644 index 0000000000..fc21d59e1f --- /dev/null +++ b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc @@ -0,0 +1,5 @@ +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 diff --git a/graphics/composer/2.1/default/service.cpp b/graphics/composer/2.1/default/service.cpp new file mode 100644 index 0000000000..0384a5310c --- /dev/null +++ b/graphics/composer/2.1/default/service.cpp @@ -0,0 +1,56 @@ +/* + * 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; +} |