From 7464ac9bd7fe89061e47617e4b6004b88c91d636 Mon Sep 17 00:00:00 2001 From: Ed Coyne Date: Thu, 8 Jun 2017 12:26:48 -0700 Subject: Allow IO During boot process, BootActions. NOTE: this is only compiled into products with PRODUCT_IOT=true. Introduce BootActions that a developer can provide to manipulate IO before the android framework comes up on boot. We will look for a configuration file at /oem/app/etc/boot_action.conf and expect it to tell us the name of a shared library. We will then fetch this library from /oem/app/lib/${arch}/ and load it. We expect it to export boot_action_init(), boot_action_shutdown(), and optionally boot_action_start_part(int partNumber, int playNumber). We will then call boot_action_init() during boot after PeripheralManager is up and call boot_action_shutdown() when the android framework is up and we are going to start loading APKs. We will also call boot_action_start_part(*) when each part of the boot animation is started, use this if you want to synchronize the boot action and the boot animation. Boot actions run in a restricted environment and in general can only make calls to PeripheralManager. Bug: 37992717 Test: Pushed to local imx7d to test boot actions, pushed to bullhead test that animation+sound still works. Change-Id: I9e53a17567f8028ea84486d637e1d231ee1125e1 --- cmds/bootanimation/BootAnimationUtil.cpp | 61 ++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 cmds/bootanimation/BootAnimationUtil.cpp (limited to 'cmds/bootanimation/BootAnimationUtil.cpp') diff --git a/cmds/bootanimation/BootAnimationUtil.cpp b/cmds/bootanimation/BootAnimationUtil.cpp new file mode 100644 index 000000000000..377d6ce372f2 --- /dev/null +++ b/cmds/bootanimation/BootAnimationUtil.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2017 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 "BootAnimationUtil.h" + +#include + +#include +#include +#include +#include + +namespace android { + +bool bootAnimationDisabled() { + char value[PROPERTY_VALUE_MAX]; + property_get("debug.sf.nobootanimation", value, "0"); + if (atoi(value) > 0) { + return false; + } + + property_get("ro.boot.quiescent", value, "0"); + return atoi(value) > 0; +} + +void waitForSurfaceFlinger() { + // TODO: replace this with better waiting logic in future, b/35253872 + int64_t waitStartTime = elapsedRealtime(); + sp sm = defaultServiceManager(); + const String16 name("SurfaceFlinger"); + const int SERVICE_WAIT_SLEEP_MS = 100; + const int LOG_PER_RETRIES = 10; + int retry = 0; + while (sm->checkService(name) == nullptr) { + retry++; + if ((retry % LOG_PER_RETRIES) == 0) { + ALOGW("Waiting for SurfaceFlinger, waited for %" PRId64 " ms", + elapsedRealtime() - waitStartTime); + } + usleep(SERVICE_WAIT_SLEEP_MS * 1000); + }; + int64_t totalWaited = elapsedRealtime() - waitStartTime; + if (totalWaited > SERVICE_WAIT_SLEEP_MS) { + ALOGI("Waiting for SurfaceFlinger took %" PRId64 " ms", totalWaited); + } +} + +} // namespace android -- cgit v1.2.3-59-g8ed1b From 88efa56e1b7993e5ea32028c962ecd517c15ed3d Mon Sep 17 00:00:00 2001 From: Kalle Raita Date: Fri, 14 Jul 2017 16:18:16 -0700 Subject: Fix nobootanimation toggle The sf.debug.nobootanimation was apparently broken in a recent refactoring. Flipping the boolean in the utils fixes the issue. Left some additional logging behind. Test: marlin-eng boots Test: my test can prevent the boot animation Test: shell stop start shows boot animation Change-Id: I815708a2f16a3a8688cf1a53695e5a8d43194575 --- cmds/bootanimation/BootAnimationUtil.cpp | 2 +- cmds/bootanimation/bootanimation_main.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'cmds/bootanimation/BootAnimationUtil.cpp') diff --git a/cmds/bootanimation/BootAnimationUtil.cpp b/cmds/bootanimation/BootAnimationUtil.cpp index 377d6ce372f2..7718daf61d81 100644 --- a/cmds/bootanimation/BootAnimationUtil.cpp +++ b/cmds/bootanimation/BootAnimationUtil.cpp @@ -29,7 +29,7 @@ bool bootAnimationDisabled() { char value[PROPERTY_VALUE_MAX]; property_get("debug.sf.nobootanimation", value, "0"); if (atoi(value) > 0) { - return false; + return true; } property_get("ro.boot.quiescent", value, "0"); diff --git a/cmds/bootanimation/bootanimation_main.cpp b/cmds/bootanimation/bootanimation_main.cpp index daac5887a500..8501982d071c 100644 --- a/cmds/bootanimation/bootanimation_main.cpp +++ b/cmds/bootanimation/bootanimation_main.cpp @@ -157,8 +157,10 @@ int main() // create the boot animation object sp boot = new BootAnimation(new AudioAnimationCallbacks()); + ALOGV("Boot animation set up. Joining pool."); IPCThreadState::self()->joinThreadPool(); } + ALOGV("Boot animation exit"); return 0; } -- cgit v1.2.3-59-g8ed1b