xref: /aosp_15_r20/external/minigbm/cros_gralloc/aidl/Main.cpp (revision d95af8df99a05bcb8679a54dc3ab8e5cd312b38e)
1*d95af8dfSAndroid Build Coastguard Worker /*
2*d95af8dfSAndroid Build Coastguard Worker  * Copyright 2022 The Chromium OS Authors. All rights reserved.
3*d95af8dfSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
4*d95af8dfSAndroid Build Coastguard Worker  * found in the LICENSE file.
5*d95af8dfSAndroid Build Coastguard Worker  */
6*d95af8dfSAndroid Build Coastguard Worker 
7*d95af8dfSAndroid Build Coastguard Worker #include "Allocator.h"
8*d95af8dfSAndroid Build Coastguard Worker 
9*d95af8dfSAndroid Build Coastguard Worker #include <android-base/logging.h>
10*d95af8dfSAndroid Build Coastguard Worker #include <android/binder_manager.h>
11*d95af8dfSAndroid Build Coastguard Worker #include <android/binder_process.h>
12*d95af8dfSAndroid Build Coastguard Worker #include <log/log.h>
13*d95af8dfSAndroid Build Coastguard Worker 
14*d95af8dfSAndroid Build Coastguard Worker using aidl::android::hardware::graphics::allocator::impl::Allocator;
15*d95af8dfSAndroid Build Coastguard Worker 
main(int,char **)16*d95af8dfSAndroid Build Coastguard Worker int main(int /*argc*/, char** /*argv*/) {
17*d95af8dfSAndroid Build Coastguard Worker     ALOGI("Minigbm AIDL allocator starting up...");
18*d95af8dfSAndroid Build Coastguard Worker 
19*d95af8dfSAndroid Build Coastguard Worker     // same as SF main thread
20*d95af8dfSAndroid Build Coastguard Worker     struct sched_param param = {0};
21*d95af8dfSAndroid Build Coastguard Worker     param.sched_priority = 2;
22*d95af8dfSAndroid Build Coastguard Worker     if (sched_setscheduler(0, SCHED_FIFO | SCHED_RESET_ON_FORK, &param) != 0) {
23*d95af8dfSAndroid Build Coastguard Worker         ALOGI("%s: failed to set priority: %s", __FUNCTION__, strerror(errno));
24*d95af8dfSAndroid Build Coastguard Worker     }
25*d95af8dfSAndroid Build Coastguard Worker 
26*d95af8dfSAndroid Build Coastguard Worker     auto allocator = ndk::SharedRefBase::make<Allocator>();
27*d95af8dfSAndroid Build Coastguard Worker     CHECK(allocator != nullptr);
28*d95af8dfSAndroid Build Coastguard Worker 
29*d95af8dfSAndroid Build Coastguard Worker     if (!allocator->init()) {
30*d95af8dfSAndroid Build Coastguard Worker         ALOGE("Failed to initialize Minigbm AIDL allocator.");
31*d95af8dfSAndroid Build Coastguard Worker         return EXIT_FAILURE;
32*d95af8dfSAndroid Build Coastguard Worker     }
33*d95af8dfSAndroid Build Coastguard Worker 
34*d95af8dfSAndroid Build Coastguard Worker     const std::string instance = std::string() + Allocator::descriptor + "/default";
35*d95af8dfSAndroid Build Coastguard Worker     binder_status_t status =
36*d95af8dfSAndroid Build Coastguard Worker             AServiceManager_addService(allocator->asBinder().get(), instance.c_str());
37*d95af8dfSAndroid Build Coastguard Worker     CHECK_EQ(status, STATUS_OK);
38*d95af8dfSAndroid Build Coastguard Worker 
39*d95af8dfSAndroid Build Coastguard Worker     ABinderProcess_setThreadPoolMaxThreadCount(4);
40*d95af8dfSAndroid Build Coastguard Worker     ABinderProcess_startThreadPool();
41*d95af8dfSAndroid Build Coastguard Worker     ABinderProcess_joinThreadPool();
42*d95af8dfSAndroid Build Coastguard Worker 
43*d95af8dfSAndroid Build Coastguard Worker     return EXIT_FAILURE;
44*d95af8dfSAndroid Build Coastguard Worker }