init: support wait timeout with more precision
A one second timeout is so coarse and can affect boot time when the possibility that the file does not exist. Switch to accepting a floating point number for seconds for the wait for file command. Signed-off-by: Mark Salyzyn <salyzyn@google.com> Bug: 151950334 Test: wait_for_file sleep 0.05 reports an appropriate delay Change-Id: I8d8ed386519ab54270b05ce91663d0add30f12e7
This commit is contained in:
parent
fa8bf5be4e
commit
ffa52e9c6f
|
@ -644,7 +644,8 @@ provides the `aidl_lazy_test_1` interface.
|
|||
`wait <path> [ <timeout> ]`
|
||||
> Poll for the existence of the given file and return when found,
|
||||
or the timeout has been reached. If timeout is not specified it
|
||||
currently defaults to five seconds.
|
||||
currently defaults to five seconds. The timeout value can be
|
||||
fractional seconds, specified in floating point notation.
|
||||
|
||||
`wait_for_prop <name> <value>`
|
||||
> Wait for system property _name_ to be _value_. Properties are expanded
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include <android-base/chrono_utils.h>
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/parsedouble.h>
|
||||
#include <android-base/parseint.h>
|
||||
#include <android-base/properties.h>
|
||||
#include <android-base/stringprintf.h>
|
||||
|
@ -1065,11 +1066,12 @@ static Result<void> do_load_system_props(const BuiltinArguments& args) {
|
|||
static Result<void> do_wait(const BuiltinArguments& args) {
|
||||
auto timeout = kCommandRetryTimeout;
|
||||
if (args.size() == 3) {
|
||||
int timeout_int;
|
||||
if (!android::base::ParseInt(args[2], &timeout_int)) {
|
||||
double timeout_double;
|
||||
if (!android::base::ParseDouble(args[2], &timeout_double, 0)) {
|
||||
return Error() << "failed to parse timeout";
|
||||
}
|
||||
timeout = std::chrono::seconds(timeout_int);
|
||||
timeout = std::chrono::duration_cast<std::chrono::nanoseconds>(
|
||||
std::chrono::duration<double>(timeout_double));
|
||||
}
|
||||
|
||||
if (wait_for_file(args[1].c_str(), timeout) != 0) {
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <sys/time.h>
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/parsedouble.h>
|
||||
#include <android-base/parseint.h>
|
||||
#include <android-base/strings.h>
|
||||
|
||||
|
@ -205,8 +206,8 @@ Result<void> check_sysclktz(const BuiltinArguments& args) {
|
|||
|
||||
Result<void> check_wait(const BuiltinArguments& args) {
|
||||
if (args.size() == 3 && !args[2].empty()) {
|
||||
int timeout_int;
|
||||
if (!android::base::ParseInt(args[2], &timeout_int)) {
|
||||
double timeout_double;
|
||||
if (!android::base::ParseDouble(args[2], &timeout_double, 0)) {
|
||||
return Error() << "failed to parse timeout";
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue