diff options
Diffstat (limited to 'bootstat')
-rw-r--r-- | bootstat/Android.bp | 1 | ||||
-rw-r--r-- | bootstat/boot_event_record_store.cpp | 9 | ||||
-rw-r--r-- | bootstat/boot_event_record_store_test.cpp | 15 | ||||
-rw-r--r-- | bootstat/bootstat.cpp | 16 | ||||
-rw-r--r-- | bootstat/uptime_parser.cpp | 38 | ||||
-rw-r--r-- | bootstat/uptime_parser.h | 29 |
6 files changed, 80 insertions, 28 deletions
diff --git a/bootstat/Android.bp b/bootstat/Android.bp index 95c9af50e..f744ad128 100644 --- a/bootstat/Android.bp +++ b/bootstat/Android.bp @@ -16,6 +16,7 @@ bootstat_lib_src_files = [ "boot_event_record_store.cpp", + "uptime_parser.cpp", ] cc_defaults { diff --git a/bootstat/boot_event_record_store.cpp b/bootstat/boot_event_record_store.cpp index 3243676f8..26485942d 100644 --- a/bootstat/boot_event_record_store.cpp +++ b/bootstat/boot_event_record_store.cpp @@ -20,16 +20,13 @@ #include <fcntl.h> #include <sys/stat.h> #include <utime.h> - -#include <chrono> #include <cstdlib> #include <string> #include <utility> - -#include <android-base/chrono_utils.h> #include <android-base/file.h> #include <android-base/logging.h> #include <android-base/parseint.h> +#include "uptime_parser.h" namespace { @@ -58,9 +55,7 @@ BootEventRecordStore::BootEventRecordStore() { } void BootEventRecordStore::AddBootEvent(const std::string& event) { - auto uptime = std::chrono::duration_cast<std::chrono::seconds>( - android::base::boot_clock::now().time_since_epoch()); - AddBootEventWithValue(event, uptime.count()); + AddBootEventWithValue(event, bootstat::ParseUptime()); } // The implementation of AddBootEventValue makes use of the mtime file diff --git a/bootstat/boot_event_record_store_test.cpp b/bootstat/boot_event_record_store_test.cpp index 0df67061f..90f6513e4 100644 --- a/bootstat/boot_event_record_store_test.cpp +++ b/bootstat/boot_event_record_store_test.cpp @@ -21,18 +21,15 @@ #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> - -#include <chrono> #include <cstdint> #include <cstdlib> - -#include <android-base/chrono_utils.h> #include <android-base/file.h> #include <android-base/logging.h> #include <android-base/test_utils.h> #include <android-base/unique_fd.h> #include <gtest/gtest.h> #include <gmock/gmock.h> +#include "uptime_parser.h" using testing::UnorderedElementsAreArray; @@ -92,12 +89,6 @@ void DeleteDirectory(const std::string& path) { rmdir(path.c_str()); } -// Returns the time in seconds since boot. -time_t GetUptimeSeconds() { - return std::chrono::duration_cast<std::chrono::seconds>( - android::base::boot_clock::now().time_since_epoch()).count(); -} - class BootEventRecordStoreTest : public ::testing::Test { public: BootEventRecordStoreTest() { @@ -135,7 +126,7 @@ TEST_F(BootEventRecordStoreTest, AddSingleBootEvent) { BootEventRecordStore store; store.SetStorePath(GetStorePathForTesting()); - time_t uptime = GetUptimeSeconds(); + time_t uptime = bootstat::ParseUptime(); ASSERT_NE(-1, uptime); store.AddBootEvent("cenozoic"); @@ -150,7 +141,7 @@ TEST_F(BootEventRecordStoreTest, AddMultipleBootEvents) { BootEventRecordStore store; store.SetStorePath(GetStorePathForTesting()); - time_t uptime = GetUptimeSeconds(); + time_t uptime = bootstat::ParseUptime(); ASSERT_NE(-1, uptime); store.AddBootEvent("cretaceous"); diff --git a/bootstat/bootstat.cpp b/bootstat/bootstat.cpp index d594cdb7c..a7354a7d3 100644 --- a/bootstat/bootstat.cpp +++ b/bootstat/bootstat.cpp @@ -21,7 +21,6 @@ #include <getopt.h> #include <unistd.h> -#include <chrono> #include <cmath> #include <cstddef> #include <cstdio> @@ -32,7 +31,6 @@ #include <vector> #include <android/log.h> -#include <android-base/chrono_utils.h> #include <android-base/logging.h> #include <android-base/parseint.h> #include <android-base/strings.h> @@ -40,6 +38,7 @@ #include <metricslogger/metrics_logger.h> #include "boot_event_record_store.h" +#include "uptime_parser.h" namespace { @@ -248,8 +247,7 @@ void RecordBootComplete() { BootEventRecordStore boot_event_store; BootEventRecordStore::BootEventRecord record; - auto uptime = std::chrono::duration_cast<std::chrono::seconds>( - android::base::boot_clock::now().time_since_epoch()); + time_t uptime = bootstat::ParseUptime(); time_t current_time_utc = time(nullptr); if (boot_event_store.GetBootEvent("last_boot_time_utc", &record)) { @@ -276,22 +274,22 @@ void RecordBootComplete() { // Log the amount of time elapsed until the device is decrypted, which // includes the variable amount of time the user takes to enter the // decryption password. - boot_event_store.AddBootEventWithValue("boot_decryption_complete", uptime.count()); + boot_event_store.AddBootEventWithValue("boot_decryption_complete", uptime); // Subtract the decryption time to normalize the boot cycle timing. - std::chrono::seconds boot_complete = std::chrono::seconds(uptime.count() - record.second); + time_t boot_complete = uptime - record.second; boot_event_store.AddBootEventWithValue(boot_complete_prefix + "_post_decrypt", - boot_complete.count()); + boot_complete); } else { boot_event_store.AddBootEventWithValue(boot_complete_prefix + "_no_encryption", - uptime.count()); + uptime); } // Record the total time from device startup to boot complete, regardless of // encryption state. - boot_event_store.AddBootEventWithValue(boot_complete_prefix, uptime.count()); + boot_event_store.AddBootEventWithValue(boot_complete_prefix, uptime); RecordInitBootTimeProp(&boot_event_store, "ro.boottime.init"); RecordInitBootTimeProp(&boot_event_store, "ro.boottime.init.selinux"); diff --git a/bootstat/uptime_parser.cpp b/bootstat/uptime_parser.cpp new file mode 100644 index 000000000..7c2034c3d --- /dev/null +++ b/bootstat/uptime_parser.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 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 "uptime_parser.h" + +#include <time.h> +#include <cstdlib> +#include <string> +#include <android-base/file.h> +#include <android-base/logging.h> + +namespace bootstat { + +time_t ParseUptime() { + std::string uptime_str; + if (!android::base::ReadFileToString("/proc/uptime", &uptime_str)) { + PLOG(ERROR) << "Failed to read /proc/uptime"; + return -1; + } + + // Cast intentionally rounds down. + return static_cast<time_t>(strtod(uptime_str.c_str(), NULL)); +} + +} // namespace bootstat
\ No newline at end of file diff --git a/bootstat/uptime_parser.h b/bootstat/uptime_parser.h new file mode 100644 index 000000000..756ae9b7c --- /dev/null +++ b/bootstat/uptime_parser.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 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. + */ + +#ifndef UPTIME_PARSER_H_ +#define UPTIME_PARSER_H_ + +#include <time.h> + +namespace bootstat { + +// Returns the number of seconds the system has been on since reboot. +time_t ParseUptime(); + +} // namespace bootstat + +#endif // UPTIME_PARSER_H_
\ No newline at end of file |