diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-03-14 21:13:17 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-03-14 21:13:18 +0000 |
commit | e9af468cde8936ee4640092e0027ab76cecfda0a (patch) | |
tree | 180a9721d958655d442057cfc4d94fc11cd87403 | |
parent | b3f516b9b5af73c85d33d85176e6eba3675ed56c (diff) | |
parent | 4bcc8b65268851ac012a16bf2633a09dd0005cb7 (diff) | |
download | system_core-e9af468cde8936ee4640092e0027ab76cecfda0a.tar.gz system_core-e9af468cde8936ee4640092e0027ab76cecfda0a.tar.bz2 system_core-e9af468cde8936ee4640092e0027ab76cecfda0a.zip |
Merge changes I459078c4,I36be1b49
* changes:
storaged: clean up output format
storaged: replace string functions that can throw exception
-rw-r--r-- | storaged/storaged_service.cpp | 31 | ||||
-rw-r--r-- | storaged/storaged_uid_monitor.cpp | 36 | ||||
-rw-r--r-- | storaged/storaged_utils.cpp | 18 |
3 files changed, 39 insertions, 46 deletions
diff --git a/storaged/storaged_service.cpp b/storaged/storaged_service.cpp index f968ed75f..33e85e3bc 100644 --- a/storaged/storaged_service.cpp +++ b/storaged/storaged_service.cpp @@ -18,6 +18,8 @@ #include <vector> +#include <android-base/parseint.h> +#include <android-base/parsedouble.h> #include <binder/IBinder.h> #include <binder/IInterface.h> @@ -29,6 +31,8 @@ #include <storaged.h> #include <storaged_service.h> +using namespace android::base; + extern storaged_t storaged; std::vector<struct uid_info> BpStoraged::dump_uids(const char* /*option*/) { @@ -97,19 +101,22 @@ status_t Storaged::dump(int fd, const Vector<String16>& args) { if (arg == String16("--hours")) { if (++i >= args.size()) break; - hours = std::stod(String8(args[i]).string()); + if(!ParseDouble(String8(args[i]).c_str(), &hours)) + return BAD_VALUE; continue; } if (arg == String16("--time_window")) { if (++i >= args.size()) break; - time_window = std::stoi(String8(args[i]).string()); + if(!ParseInt(String8(args[i]).c_str(), &time_window)) + return BAD_VALUE; continue; } if (arg == String16("--threshold")) { if (++i >= args.size()) break; - threshold = std::stoll(String8(args[i]).string()); + if(!ParseUint(String8(args[i]).c_str(), &threshold)) + return BAD_VALUE; continue; } if (arg == String16("--force")) { @@ -129,16 +136,16 @@ status_t Storaged::dump(int fd, const Vector<String16>& args) { last_ts = it.first; for (const auto& record : it.second.entries) { - dprintf(fd, "%s %llu %llu %llu %llu %llu %llu %llu %llu\n", + dprintf(fd, "%s %ju %ju %ju %ju %ju %ju %ju %ju\n", record.name.c_str(), - (unsigned long long)record.ios.bytes[READ][FOREGROUND][CHARGER_OFF], - (unsigned long long)record.ios.bytes[WRITE][FOREGROUND][CHARGER_OFF], - (unsigned long long)record.ios.bytes[READ][BACKGROUND][CHARGER_OFF], - (unsigned long long)record.ios.bytes[WRITE][BACKGROUND][CHARGER_OFF], - (unsigned long long)record.ios.bytes[READ][FOREGROUND][CHARGER_ON], - (unsigned long long)record.ios.bytes[WRITE][FOREGROUND][CHARGER_ON], - (unsigned long long)record.ios.bytes[READ][BACKGROUND][CHARGER_ON], - (unsigned long long)record.ios.bytes[WRITE][BACKGROUND][CHARGER_ON]); + record.ios.bytes[READ][FOREGROUND][CHARGER_OFF], + record.ios.bytes[WRITE][FOREGROUND][CHARGER_OFF], + record.ios.bytes[READ][BACKGROUND][CHARGER_OFF], + record.ios.bytes[WRITE][BACKGROUND][CHARGER_OFF], + record.ios.bytes[READ][FOREGROUND][CHARGER_ON], + record.ios.bytes[WRITE][FOREGROUND][CHARGER_ON], + record.ios.bytes[READ][BACKGROUND][CHARGER_ON], + record.ios.bytes[WRITE][BACKGROUND][CHARGER_ON]); } } diff --git a/storaged/storaged_uid_monitor.cpp b/storaged/storaged_uid_monitor.cpp index 8bb6bf30b..5bb98e1e8 100644 --- a/storaged/storaged_uid_monitor.cpp +++ b/storaged/storaged_uid_monitor.cpp @@ -25,6 +25,7 @@ #include <android-base/file.h> #include <android-base/logging.h> #include <android-base/macros.h> +#include <android-base/parseint.h> #include <android-base/strings.h> #include <android-base/stringprintf.h> #include <log/log_event_list.h> @@ -59,12 +60,12 @@ std::unordered_map<uint32_t, struct uid_info> uid_monitor::get_uid_io_stats_lock { std::unordered_map<uint32_t, struct uid_info> uid_io_stats; std::string buffer; - if (!android::base::ReadFileToString(UID_IO_STATS_PATH, &buffer)) { + if (!ReadFileToString(UID_IO_STATS_PATH, &buffer)) { PLOG_TO(SYSTEM, ERROR) << UID_IO_STATS_PATH << ": ReadFileToString failed"; return uid_io_stats; } - std::vector<std::string> io_stats = android::base::Split(buffer, "\n"); + std::vector<std::string> io_stats = Split(buffer, "\n"); struct uid_info u; bool refresh_uid = false; @@ -72,26 +73,23 @@ std::unordered_map<uint32_t, struct uid_info> uid_monitor::get_uid_io_stats_lock if (io_stats[i].empty()) { continue; } - std::vector<std::string> fields = android::base::Split(io_stats[i], " "); - if (fields.size() < 9) { - LOG_TO(SYSTEM, WARNING) << "Invalid io stats: \"" + std::vector<std::string> fields = Split(io_stats[i], " "); + if (fields.size() < 11 || + !ParseUint(fields[0], &u.uid) || + !ParseUint(fields[1], &u.io[FOREGROUND].rchar) || + !ParseUint(fields[2], &u.io[FOREGROUND].wchar) || + !ParseUint(fields[3], &u.io[FOREGROUND].read_bytes) || + !ParseUint(fields[4], &u.io[FOREGROUND].write_bytes) || + !ParseUint(fields[5], &u.io[BACKGROUND].rchar) || + !ParseUint(fields[6], &u.io[BACKGROUND].wchar) || + !ParseUint(fields[7], &u.io[BACKGROUND].read_bytes) || + !ParseUint(fields[8], &u.io[BACKGROUND].write_bytes) || + !ParseUint(fields[9], &u.io[FOREGROUND].fsync) || + !ParseUint(fields[10], &u.io[BACKGROUND].fsync)) { + LOG_TO(SYSTEM, WARNING) << "Invalid I/O stats: \"" << io_stats[i] << "\""; continue; } - u.uid = stoul(fields[0]); - u.io[FOREGROUND].rchar = stoull(fields[1]); - u.io[FOREGROUND].wchar = stoull(fields[2]); - u.io[FOREGROUND].read_bytes = stoull(fields[3]); - u.io[FOREGROUND].write_bytes = stoull(fields[4]); - u.io[BACKGROUND].rchar = stoull(fields[5]); - u.io[BACKGROUND].wchar = stoull(fields[6]); - u.io[BACKGROUND].read_bytes = stoull(fields[7]); - u.io[BACKGROUND].write_bytes = stoull(fields[8]); - - if (fields.size() == 11) { - u.io[FOREGROUND].fsync = stoull(fields[9]); - u.io[BACKGROUND].fsync = stoull(fields[10]); - } if (last_uid_io_stats.find(u.uid) == last_uid_io_stats.end()) { refresh_uid = true; diff --git a/storaged/storaged_utils.cpp b/storaged/storaged_utils.cpp index 5df018581..9fcf1fa8a 100644 --- a/storaged/storaged_utils.cpp +++ b/storaged/storaged_utils.cpp @@ -270,23 +270,11 @@ void sort_running_uids_info(std::vector<struct uid_info> &uids) { // Logging functions void log_console_running_uids_info(std::vector<struct uid_info> uids) { -// Sample Output: -// Application FG Read FG Write FG Read FG Write BG Read BG Write BG Read BG Write -// NAME/UID Characters Characters Bytes Bytes Characters Characters Bytes Bytes -// ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -// com.google.android.gsf.login 0 0 0 0 57195097 5137089 176386048 6512640 -// com.google.android.googlequicksearchbox 0 0 0 0 4196821 12123468 34295808 13225984 -// 1037 4572 537 0 0 131352 5145643 34263040 5144576 -// com.google.android.youtube 2182 70 0 0 63969383 482939 38731776 466944 - - // Title - printf("Per-UID I/O stats\n"); - printf(" Application FG Read FG Write FG Read FG Write BG Read BG Write BG Read BG Write FG fsync BG fsync\n" - " NAME/UID Characters Characters Bytes Bytes Characters Characters Bytes Bytes \n" - " ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------\n"); + printf("name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes " + "bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync\n"); for (const auto& uid : uids) { - printf("%50s%15ju%15ju%15ju%15ju%15ju%15ju%15ju%15ju%15ju%15ju\n", uid.name.c_str(), + printf("%s %ju %ju %ju %ju %ju %ju %ju %ju %ju %ju\n", uid.name.c_str(), uid.io[0].rchar, uid.io[0].wchar, uid.io[0].read_bytes, uid.io[0].write_bytes, uid.io[1].rchar, uid.io[1].wchar, uid.io[1].read_bytes, uid.io[1].write_bytes, uid.io[0].fsync, uid.io[1].fsync); |