From 1368c2921334b951bcbf09f945ad5930cc35f434 Mon Sep 17 00:00:00 2001 From: Ady Abraham Date: Fri, 25 Sep 2020 14:28:36 -0700 Subject: [PATCH] composer: hold a sp from the service itself IComposerClient assumes that IComposer will outlive its life cycle and holds a simple pointer to HwcHal. This change is taking the same approach of newer composer versions (2.2, 2.3, and 2.4) to make sure that IComposer would outlive IComposerClient. Test: coral booting with this change Fixes: 155769496 Change-Id: I3962ede51ce823368c62c4e4e5fb30f7a5680bdf Merged-In: I3962ede51ce823368c62c4e4e5fb30f7a5680bdf (cherry picked from commit 43e42ff6ec685038921bc375bd660c245e4bc4e7) --- graphics/composer/2.1/default/Android.bp | 38 +++++-------------- graphics/composer/2.1/default/passthrough.cpp | 25 ------------ graphics/composer/2.1/default/service.cpp | 19 +++++++++- 3 files changed, 27 insertions(+), 55 deletions(-) delete mode 100644 graphics/composer/2.1/default/passthrough.cpp diff --git a/graphics/composer/2.1/default/Android.bp b/graphics/composer/2.1/default/Android.bp index 533687bb7d..a367457ae9 100644 --- a/graphics/composer/2.1/default/Android.bp +++ b/graphics/composer/2.1/default/Android.bp @@ -1,31 +1,3 @@ -cc_library_shared { - name: "android.hardware.graphics.composer@2.1-impl", - defaults: ["hidl_defaults"], - vendor: true, - relative_install_path: "hw", - srcs: ["passthrough.cpp"], - header_libs: [ - "android.hardware.graphics.composer@2.1-passthrough", - ], - shared_libs: [ - "android.hardware.graphics.composer@2.1", - "android.hardware.graphics.composer@2.1-resources", - "libbase", - "libcutils", - "libfmq", - "libhardware", - "libhidlbase", - "liblog", - "libsync", - "libutils", - "libhwc2on1adapter", - "libhwc2onfbadapter", - ], - cflags: [ - "-DLOG_TAG=\"ComposerHal\"" - ], -} - cc_binary { name: "android.hardware.graphics.composer@2.1-service", defaults: ["hidl_defaults"], @@ -33,10 +5,20 @@ cc_binary { relative_install_path: "hw", srcs: ["service.cpp"], init_rc: ["android.hardware.graphics.composer@2.1-service.rc"], + header_libs: [ + "android.hardware.graphics.composer@2.1-passthrough", + ], shared_libs: [ "android.hardware.graphics.composer@2.1", + "android.hardware.graphics.composer@2.1-resources", + "libbase", "libbinder", + "libcutils", + "libfmq", + "libhardware", "libhidlbase", + "libhwc2on1adapter", + "libhwc2onfbadapter", "liblog", "libsync", "libutils", diff --git a/graphics/composer/2.1/default/passthrough.cpp b/graphics/composer/2.1/default/passthrough.cpp deleted file mode 100644 index ef7ed7c87a..0000000000 --- a/graphics/composer/2.1/default/passthrough.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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. - */ - -#include -#include - -using android::hardware::graphics::composer::V2_1::IComposer; -using android::hardware::graphics::composer::V2_1::passthrough::HwcLoader; - -extern "C" IComposer* HIDL_FETCH_IComposer(const char* /* name */) { - return HwcLoader::load(); -} diff --git a/graphics/composer/2.1/default/service.cpp b/graphics/composer/2.1/default/service.cpp index 82a33f6a4e..1276d2df7e 100644 --- a/graphics/composer/2.1/default/service.cpp +++ b/graphics/composer/2.1/default/service.cpp @@ -21,10 +21,11 @@ #include #include +#include #include using android::hardware::graphics::composer::V2_1::IComposer; -using android::hardware::defaultPassthroughServiceImplementation; +using android::hardware::graphics::composer::V2_1::passthrough::HwcLoader; int main() { // the conventional HAL might start binder services @@ -40,5 +41,19 @@ int main() { ALOGE("Couldn't set SCHED_FIFO: %d", errno); } - return defaultPassthroughServiceImplementation(4); + android::hardware::configureRpcThreadpool(4, true /* will join */); + + android::sp composer = HwcLoader::load(); + if (composer == nullptr) { + return 1; + } + if (composer->registerAsService() != android::NO_ERROR) { + ALOGE("failed to register service"); + return 1; + } + + android::hardware::joinRpcThreadpool(); + + ALOGE("service is terminating"); + return 1; }