Loading init/action.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -121,7 +121,7 @@ void Action::ExecuteCommand(const Command& command) const { Timer t; Timer t; int result = command.InvokeFunc(); int result = command.InvokeFunc(); double duration_ms = t.duration() * 1000; double duration_ms = t.duration_s() * 1000; // Any action longer than 50ms will be warned to user as slow operation // Any action longer than 50ms will be warned to user as slow operation if (duration_ms > 50.0 || if (duration_ms > 50.0 || android::base::GetMinimumLogSeverity() <= android::base::DEBUG) { android::base::GetMinimumLogSeverity() <= android::base::DEBUG) { Loading init/builtins.cpp +4 −6 Original line number Original line Diff line number Diff line Loading @@ -146,8 +146,7 @@ static int wipe_data_via_recovery(const std::string& reason) { LOG(ERROR) << "failed to set bootloader message: " << err; LOG(ERROR) << "failed to set bootloader message: " << err; return -1; return -1; } } android_reboot(ANDROID_RB_RESTART2, 0, "recovery"); reboot("recovery"); while (1) { pause(); } // never reached } } static void unmount_and_fsck(const struct mntent *entry) { static void unmount_and_fsck(const struct mntent *entry) { Loading Loading @@ -727,7 +726,7 @@ static int do_powerctl(const std::vector<std::string>& args) { ServiceManager::GetInstance().ForEachService( ServiceManager::GetInstance().ForEachService( [] (Service* s) { s->Terminate(); }); [] (Service* s) { s->Terminate(); }); while (t.duration() < delay) { while (t.duration_s() < delay) { ServiceManager::GetInstance().ReapAnyOutstandingChildren(); ServiceManager::GetInstance().ReapAnyOutstandingChildren(); int service_count = 0; int service_count = 0; Loading @@ -751,11 +750,10 @@ static int do_powerctl(const std::vector<std::string>& args) { // Wait a bit before recounting the number or running services. // Wait a bit before recounting the number or running services. std::this_thread::sleep_for(50ms); std::this_thread::sleep_for(50ms); } } LOG(VERBOSE) << "Terminating running services took " << t.duration() << " seconds"; LOG(VERBOSE) << "Terminating running services took " << t; } } return android_reboot_with_callback(cmd, 0, reboot_target, return android_reboot_with_callback(cmd, 0, reboot_target, callback_on_ro_remount); callback_on_ro_remount); } } static int do_trigger(const std::vector<std::string>& args) { static int do_trigger(const std::vector<std::string>& args) { Loading init/devices.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -868,7 +868,7 @@ static void handle_firmware_event(uevent* uevent) { if (pid == 0) { if (pid == 0) { Timer t; Timer t; process_firmware_event(uevent); process_firmware_event(uevent); LOG(INFO) << "loading " << uevent->path << " took " << t.duration() << "s"; LOG(INFO) << "loading " << uevent->path << " took " << t; _exit(EXIT_SUCCESS); _exit(EXIT_SUCCESS); } else if (pid == -1) { } else if (pid == -1) { PLOG(ERROR) << "could not fork to process firmware event for " << uevent->firmware; PLOG(ERROR) << "could not fork to process firmware event for " << uevent->firmware; Loading Loading @@ -1043,7 +1043,7 @@ void device_init() { coldboot("/sys/block"); coldboot("/sys/block"); coldboot("/sys/devices"); coldboot("/sys/devices"); close(open(COLDBOOT_DONE, O_WRONLY|O_CREAT|O_CLOEXEC, 0000)); close(open(COLDBOOT_DONE, O_WRONLY|O_CREAT|O_CLOEXEC, 0000)); LOG(INFO) << "Coldboot took " << t.duration() << "s."; LOG(INFO) << "Coldboot took " << t; } } int get_device_fd() { int get_device_fd() { Loading init/init.cpp +23 −12 Original line number Original line Diff line number Diff line Loading @@ -43,7 +43,6 @@ #include <android-base/file.h> #include <android-base/file.h> #include <android-base/stringprintf.h> #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <android-base/strings.h> #include <cutils/android_reboot.h> #include <cutils/fs.h> #include <cutils/fs.h> #include <cutils/iosched_policy.h> #include <cutils/iosched_policy.h> #include <cutils/list.h> #include <cutils/list.h> Loading Loading @@ -163,14 +162,21 @@ static int wait_for_coldboot_done_action(const std::vector<std::string>& args) { Timer t; Timer t; LOG(VERBOSE) << "Waiting for " COLDBOOT_DONE "..."; LOG(VERBOSE) << "Waiting for " COLDBOOT_DONE "..."; // Any longer than 1s is an unreasonable length of time to delay booting. // If you're hitting this timeout, check that you didn't make your // Historically we had a 1s timeout here because we weren't otherwise // sepolicy regular expressions too expensive (http://b/19899875). // tracking boot time, and many OEMs made their sepolicy regular if (wait_for_file(COLDBOOT_DONE, 1s)) { // expressions too expensive (http://b/19899875). // Now we're tracking boot time, just log the time taken to a system // property. We still panic if it takes more than a minute though, // because any build that slow isn't likely to boot at all, and we'd // rather any test lab devices fail back to the bootloader. if (wait_for_file(COLDBOOT_DONE, 60s) < 0) { LOG(ERROR) << "Timed out waiting for " COLDBOOT_DONE; LOG(ERROR) << "Timed out waiting for " COLDBOOT_DONE; panic(); } } LOG(VERBOSE) << "Waiting for " COLDBOOT_DONE " took " << t.duration() << "s."; property_set("ro.boottime.init.cold_boot_wait", std::to_string(t.duration_ns()).c_str()); return 0; return 0; } } Loading Loading @@ -409,9 +415,8 @@ static int audit_callback(void *data, security_class_t /*cls*/, char *buf, size_ } } static void security_failure() { static void security_failure() { LOG(ERROR) << "Security failure; rebooting into recovery mode..."; LOG(ERROR) << "Security failure..."; android_reboot(ANDROID_RB_RESTART2, 0, "recovery"); panic(); while (true) { pause(); } // never reached } } static void selinux_initialize(bool in_kernel_domain) { static void selinux_initialize(bool in_kernel_domain) { Loading Loading @@ -443,8 +448,8 @@ static void selinux_initialize(bool in_kernel_domain) { security_failure(); security_failure(); } } LOG(INFO) << "(Initializing SELinux " << (is_enforcing ? "enforcing" : "non-enforcing") // init's first stage can't set properties, so pass the time to the second stage. << " took " << t.duration() << "s.)"; setenv("INIT_SELINUX_TOOK", std::to_string(t.duration_ns()).c_str(), 1); } else { } else { selinux_init_all_handles(); selinux_init_all_handles(); } } Loading Loading @@ -650,7 +655,13 @@ int main(int argc, char** argv) { export_kernel_boot_props(); export_kernel_boot_props(); // Make the time that init started available for bootstat to log. // Make the time that init started available for bootstat to log. property_set("init.start", getenv("INIT_STARTED_AT")); property_set("ro.boottime.init", getenv("INIT_STARTED_AT")); property_set("ro.boottime.init.selinux", getenv("INIT_SELINUX_TOOK")); // Clean up our environment. unsetenv("INIT_SECOND_STAGE"); unsetenv("INIT_STARTED_AT"); unsetenv("INIT_SELINUX_TOOK"); // Now set up SELinux for second stage. // Now set up SELinux for second stage. selinux_initialize(false); selinux_initialize(false); Loading init/init_parser.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -110,7 +110,7 @@ bool Parser::ParseConfigFile(const std::string& path) { // Nexus 9 boot time, so it's disabled by default. // Nexus 9 boot time, so it's disabled by default. if (false) DumpState(); if (false) DumpState(); LOG(VERBOSE) << "(Parsing " << path << " took " << t.duration() << "s.)"; LOG(VERBOSE) << "(Parsing " << path << " took " << t << ".)"; return true; return true; } } Loading Loading
init/action.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -121,7 +121,7 @@ void Action::ExecuteCommand(const Command& command) const { Timer t; Timer t; int result = command.InvokeFunc(); int result = command.InvokeFunc(); double duration_ms = t.duration() * 1000; double duration_ms = t.duration_s() * 1000; // Any action longer than 50ms will be warned to user as slow operation // Any action longer than 50ms will be warned to user as slow operation if (duration_ms > 50.0 || if (duration_ms > 50.0 || android::base::GetMinimumLogSeverity() <= android::base::DEBUG) { android::base::GetMinimumLogSeverity() <= android::base::DEBUG) { Loading
init/builtins.cpp +4 −6 Original line number Original line Diff line number Diff line Loading @@ -146,8 +146,7 @@ static int wipe_data_via_recovery(const std::string& reason) { LOG(ERROR) << "failed to set bootloader message: " << err; LOG(ERROR) << "failed to set bootloader message: " << err; return -1; return -1; } } android_reboot(ANDROID_RB_RESTART2, 0, "recovery"); reboot("recovery"); while (1) { pause(); } // never reached } } static void unmount_and_fsck(const struct mntent *entry) { static void unmount_and_fsck(const struct mntent *entry) { Loading Loading @@ -727,7 +726,7 @@ static int do_powerctl(const std::vector<std::string>& args) { ServiceManager::GetInstance().ForEachService( ServiceManager::GetInstance().ForEachService( [] (Service* s) { s->Terminate(); }); [] (Service* s) { s->Terminate(); }); while (t.duration() < delay) { while (t.duration_s() < delay) { ServiceManager::GetInstance().ReapAnyOutstandingChildren(); ServiceManager::GetInstance().ReapAnyOutstandingChildren(); int service_count = 0; int service_count = 0; Loading @@ -751,11 +750,10 @@ static int do_powerctl(const std::vector<std::string>& args) { // Wait a bit before recounting the number or running services. // Wait a bit before recounting the number or running services. std::this_thread::sleep_for(50ms); std::this_thread::sleep_for(50ms); } } LOG(VERBOSE) << "Terminating running services took " << t.duration() << " seconds"; LOG(VERBOSE) << "Terminating running services took " << t; } } return android_reboot_with_callback(cmd, 0, reboot_target, return android_reboot_with_callback(cmd, 0, reboot_target, callback_on_ro_remount); callback_on_ro_remount); } } static int do_trigger(const std::vector<std::string>& args) { static int do_trigger(const std::vector<std::string>& args) { Loading
init/devices.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -868,7 +868,7 @@ static void handle_firmware_event(uevent* uevent) { if (pid == 0) { if (pid == 0) { Timer t; Timer t; process_firmware_event(uevent); process_firmware_event(uevent); LOG(INFO) << "loading " << uevent->path << " took " << t.duration() << "s"; LOG(INFO) << "loading " << uevent->path << " took " << t; _exit(EXIT_SUCCESS); _exit(EXIT_SUCCESS); } else if (pid == -1) { } else if (pid == -1) { PLOG(ERROR) << "could not fork to process firmware event for " << uevent->firmware; PLOG(ERROR) << "could not fork to process firmware event for " << uevent->firmware; Loading Loading @@ -1043,7 +1043,7 @@ void device_init() { coldboot("/sys/block"); coldboot("/sys/block"); coldboot("/sys/devices"); coldboot("/sys/devices"); close(open(COLDBOOT_DONE, O_WRONLY|O_CREAT|O_CLOEXEC, 0000)); close(open(COLDBOOT_DONE, O_WRONLY|O_CREAT|O_CLOEXEC, 0000)); LOG(INFO) << "Coldboot took " << t.duration() << "s."; LOG(INFO) << "Coldboot took " << t; } } int get_device_fd() { int get_device_fd() { Loading
init/init.cpp +23 −12 Original line number Original line Diff line number Diff line Loading @@ -43,7 +43,6 @@ #include <android-base/file.h> #include <android-base/file.h> #include <android-base/stringprintf.h> #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <android-base/strings.h> #include <cutils/android_reboot.h> #include <cutils/fs.h> #include <cutils/fs.h> #include <cutils/iosched_policy.h> #include <cutils/iosched_policy.h> #include <cutils/list.h> #include <cutils/list.h> Loading Loading @@ -163,14 +162,21 @@ static int wait_for_coldboot_done_action(const std::vector<std::string>& args) { Timer t; Timer t; LOG(VERBOSE) << "Waiting for " COLDBOOT_DONE "..."; LOG(VERBOSE) << "Waiting for " COLDBOOT_DONE "..."; // Any longer than 1s is an unreasonable length of time to delay booting. // If you're hitting this timeout, check that you didn't make your // Historically we had a 1s timeout here because we weren't otherwise // sepolicy regular expressions too expensive (http://b/19899875). // tracking boot time, and many OEMs made their sepolicy regular if (wait_for_file(COLDBOOT_DONE, 1s)) { // expressions too expensive (http://b/19899875). // Now we're tracking boot time, just log the time taken to a system // property. We still panic if it takes more than a minute though, // because any build that slow isn't likely to boot at all, and we'd // rather any test lab devices fail back to the bootloader. if (wait_for_file(COLDBOOT_DONE, 60s) < 0) { LOG(ERROR) << "Timed out waiting for " COLDBOOT_DONE; LOG(ERROR) << "Timed out waiting for " COLDBOOT_DONE; panic(); } } LOG(VERBOSE) << "Waiting for " COLDBOOT_DONE " took " << t.duration() << "s."; property_set("ro.boottime.init.cold_boot_wait", std::to_string(t.duration_ns()).c_str()); return 0; return 0; } } Loading Loading @@ -409,9 +415,8 @@ static int audit_callback(void *data, security_class_t /*cls*/, char *buf, size_ } } static void security_failure() { static void security_failure() { LOG(ERROR) << "Security failure; rebooting into recovery mode..."; LOG(ERROR) << "Security failure..."; android_reboot(ANDROID_RB_RESTART2, 0, "recovery"); panic(); while (true) { pause(); } // never reached } } static void selinux_initialize(bool in_kernel_domain) { static void selinux_initialize(bool in_kernel_domain) { Loading Loading @@ -443,8 +448,8 @@ static void selinux_initialize(bool in_kernel_domain) { security_failure(); security_failure(); } } LOG(INFO) << "(Initializing SELinux " << (is_enforcing ? "enforcing" : "non-enforcing") // init's first stage can't set properties, so pass the time to the second stage. << " took " << t.duration() << "s.)"; setenv("INIT_SELINUX_TOOK", std::to_string(t.duration_ns()).c_str(), 1); } else { } else { selinux_init_all_handles(); selinux_init_all_handles(); } } Loading Loading @@ -650,7 +655,13 @@ int main(int argc, char** argv) { export_kernel_boot_props(); export_kernel_boot_props(); // Make the time that init started available for bootstat to log. // Make the time that init started available for bootstat to log. property_set("init.start", getenv("INIT_STARTED_AT")); property_set("ro.boottime.init", getenv("INIT_STARTED_AT")); property_set("ro.boottime.init.selinux", getenv("INIT_SELINUX_TOOK")); // Clean up our environment. unsetenv("INIT_SECOND_STAGE"); unsetenv("INIT_STARTED_AT"); unsetenv("INIT_SELINUX_TOOK"); // Now set up SELinux for second stage. // Now set up SELinux for second stage. selinux_initialize(false); selinux_initialize(false); Loading
init/init_parser.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -110,7 +110,7 @@ bool Parser::ParseConfigFile(const std::string& path) { // Nexus 9 boot time, so it's disabled by default. // Nexus 9 boot time, so it's disabled by default. if (false) DumpState(); if (false) DumpState(); LOG(VERBOSE) << "(Parsing " << path << " took " << t.duration() << "s.)"; LOG(VERBOSE) << "(Parsing " << path << " took " << t << ".)"; return true; return true; } } Loading