diff options
Diffstat (limited to 'cmds/dumpstate/dumpstate.cpp')
| -rw-r--r-- | cmds/dumpstate/dumpstate.cpp | 119 |
1 files changed, 59 insertions, 60 deletions
diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp index c4e5cfa5ac..a0b0426fe9 100644 --- a/cmds/dumpstate/dumpstate.cpp +++ b/cmds/dumpstate/dumpstate.cpp @@ -602,7 +602,7 @@ static int dump_stat_from_fd(const char *title __unused, const char *path, int f path += sizeof(mmcblk0) - 1; } - dprintf(STDOUT_FILENO, "%s: %s\n", path, buffer); + printf("%s: %s\n", path, buffer); free(buffer); if (fields[__STAT_IO_TICKS]) { @@ -639,11 +639,10 @@ static int dump_stat_from_fd(const char *title __unused, const char *path, int f / fields[__STAT_IO_TICKS]; if (!write_perf && !write_ios) { - dprintf(STDOUT_FILENO, "%s: perf(ios) rd: %luKB/s(%lu/s) q: %u\n", path, read_perf, - read_ios, queue); + printf("%s: perf(ios) rd: %luKB/s(%lu/s) q: %u\n", path, read_perf, read_ios, queue); } else { - dprintf(STDOUT_FILENO, "%s: perf(ios) rd: %luKB/s(%lu/s) wr: %luKB/s(%lu/s) q: %u\n", - path, read_perf, read_ios, write_perf, write_ios, queue); + printf("%s: perf(ios) rd: %luKB/s(%lu/s) wr: %luKB/s(%lu/s) q: %u\n", path, read_perf, + read_ios, write_perf, write_ios, queue); } /* bugreport timeout factor adjustment */ @@ -673,27 +672,25 @@ void Dumpstate::PrintHeader() const { network = android::base::GetProperty("gsm.operator.alpha", "(unknown)"); strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S", localtime(&now_)); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== dumpstate: %s\n", date); - dprintf(STDOUT_FILENO, "========================================================\n"); + printf("========================================================\n"); + printf("== dumpstate: %s\n", date); + printf("========================================================\n"); - dprintf(STDOUT_FILENO, "\n"); - dprintf(STDOUT_FILENO, "Build: %s\n", build.c_str()); + printf("\n"); + printf("Build: %s\n", build.c_str()); // NOTE: fingerprint entry format is important for other tools. - dprintf(STDOUT_FILENO, "Build fingerprint: '%s'\n", fingerprint.c_str()); - dprintf(STDOUT_FILENO, "Bootloader: %s\n", bootloader.c_str()); - dprintf(STDOUT_FILENO, "Radio: %s\n", radio.c_str()); - dprintf(STDOUT_FILENO, "Network: %s\n", network.c_str()); + printf("Build fingerprint: '%s'\n", fingerprint.c_str()); + printf("Bootloader: %s\n", bootloader.c_str()); + printf("Radio: %s\n", radio.c_str()); + printf("Network: %s\n", network.c_str()); - dprintf(STDOUT_FILENO, "Kernel: "); - fsync(STDOUT_FILENO); + printf("Kernel: "); DumpFileToFd(STDOUT_FILENO, "", "/proc/version"); - dprintf(STDOUT_FILENO, "Command line: %s\n", strtok(cmdline_buf, "\n")); - dprintf(STDOUT_FILENO, "Bugreport format version: %s\n", version_.c_str()); - dprintf(STDOUT_FILENO, "Dumpstate info: id=%d pid=%d dry_run=%d args=%s extra_options=%s\n", - id_, pid_, PropertiesHelper::IsDryRun(), args_.c_str(), extra_options_.c_str()); - dprintf(STDOUT_FILENO, "\n"); - fsync(STDOUT_FILENO); + printf("Command line: %s\n", strtok(cmdline_buf, "\n")); + printf("Bugreport format version: %s\n", version_.c_str()); + printf("Dumpstate info: id=%d pid=%d dry_run=%d args=%s extra_options=%s\n", id_, pid_, + PropertiesHelper::IsDryRun(), args_.c_str(), extra_options_.c_str()); + printf("\n"); } // List of file extensions that can cause a zip file attachment to be rejected by some email @@ -857,13 +854,13 @@ static void AddAnrTraceFiles() { dump_traces_dir.c_str(), anr_traces_dir.c_str(), already_dumped); if (anr_traces_path.empty()) { - dprintf(STDOUT_FILENO, "*** NO VM TRACES FILE DEFINED (dalvik.vm.stack-trace-file)\n\n"); + printf("*** NO VM TRACES FILE DEFINED (dalvik.vm.stack-trace-file)\n\n"); } else { int fd = TEMP_FAILURE_RETRY( open(anr_traces_path.c_str(), O_RDONLY | O_CLOEXEC | O_NOFOLLOW | O_NONBLOCK)); if (fd < 0) { - dprintf(STDOUT_FILENO, "*** NO ANR VM TRACES FILE (%s): %s\n\n", - anr_traces_path.c_str(), strerror(errno)); + printf("*** NO ANR VM TRACES FILE (%s): %s\n\n", anr_traces_path.c_str(), + strerror(errno)); } else { if (add_to_zip) { if (!already_dumped) { @@ -1003,7 +1000,7 @@ static void dumpstate() { } } if (!dumped) { - dprintf(STDOUT_FILENO, "*** NO TOMBSTONES to dump in %s\n\n", TOMBSTONE_DIR); + printf("*** NO TOMBSTONES to dump in %s\n\n", TOMBSTONE_DIR); } DumpFile("NETWORK DEV INFO", "/proc/net/dev"); @@ -1076,18 +1073,18 @@ static void dumpstate() { RunCommand("LAST RADIO LOG", {"parse_radio_log", "/proc/last_radio_log"}); - dprintf(STDOUT_FILENO, "------ BACKLIGHTS ------\n"); - dprintf(STDOUT_FILENO, "LCD brightness="); + printf("------ BACKLIGHTS ------\n"); + printf("LCD brightness="); DumpFile("", "/sys/class/leds/lcd-backlight/brightness"); - dprintf(STDOUT_FILENO, "Button brightness="); + printf("Button brightness="); DumpFile("", "/sys/class/leds/button-backlight/brightness"); - dprintf(STDOUT_FILENO, "Keyboard brightness="); + printf("Keyboard brightness="); DumpFile("", "/sys/class/leds/keyboard-backlight/brightness"); - dprintf(STDOUT_FILENO, "ALS mode="); + printf("ALS mode="); DumpFile("", "/sys/class/leds/lcd-backlight/als"); - dprintf(STDOUT_FILENO, "LCD driver registers:\n"); + printf("LCD driver registers:\n"); DumpFile("", "/sys/class/leds/lcd-backlight/registers"); - dprintf(STDOUT_FILENO, "\n"); + printf("\n"); /* Binder state is expensive to look at as it uses a lot of memory. */ DumpFile("BINDER FAILED TRANSACTION LOG", "/sys/kernel/debug/binder/failed_transaction_log"); @@ -1112,16 +1109,16 @@ static void dumpstate() { RunCommand("DUMP VENDOR RIL LOGS", {"vril-dump"}, options.Build()); } - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== Android Framework Services\n"); - dprintf(STDOUT_FILENO, "========================================================\n"); + printf("========================================================\n"); + printf("== Android Framework Services\n"); + printf("========================================================\n"); RunDumpsys("DUMPSYS", {"--skip", "meminfo", "cpuinfo"}, CommandOptions::WithTimeout(90).Build(), 10); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== Checkins\n"); - dprintf(STDOUT_FILENO, "========================================================\n"); + printf("========================================================\n"); + printf("== Checkins\n"); + printf("========================================================\n"); RunDumpsys("CHECKIN BATTERYSTATS", {"batterystats", "-c"}); RunDumpsys("CHECKIN MEMINFO", {"meminfo", "--checkin"}); @@ -1130,21 +1127,21 @@ static void dumpstate() { RunDumpsys("CHECKIN USAGESTATS", {"usagestats", "-c"}); RunDumpsys("CHECKIN PACKAGE", {"package", "--checkin"}); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== Running Application Activities\n"); - dprintf(STDOUT_FILENO, "========================================================\n"); + printf("========================================================\n"); + printf("== Running Application Activities\n"); + printf("========================================================\n"); RunDumpsys("APP ACTIVITIES", {"activity", "all"}); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== Running Application Services\n"); - dprintf(STDOUT_FILENO, "========================================================\n"); + printf("========================================================\n"); + printf("== Running Application Services\n"); + printf("========================================================\n"); RunDumpsys("APP SERVICES", {"activity", "service", "all"}); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== Running Application Providers\n"); - dprintf(STDOUT_FILENO, "========================================================\n"); + printf("========================================================\n"); + printf("== Running Application Providers\n"); + printf("========================================================\n"); RunDumpsys("APP PROVIDERS", {"activity", "provider", "all"}); @@ -1153,20 +1150,19 @@ static void dumpstate() { // collected. DumpModemLogs(); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== Final progress (pid %d): %d/%d (estimated %d)\n", ds.pid_, - ds.progress_->Get(), ds.progress_->GetMax(), ds.progress_->GetInitialMax()); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== dumpstate: done (id %d)\n", ds.id_); - dprintf(STDOUT_FILENO, "========================================================\n"); + printf("========================================================\n"); + printf("== Final progress (pid %d): %d/%d (estimated %d)\n", ds.pid_, ds.progress_->Get(), + ds.progress_->GetMax(), ds.progress_->GetInitialMax()); + printf("========================================================\n"); + printf("== dumpstate: done (id %d)\n", ds.id_); + printf("========================================================\n"); } void Dumpstate::DumpstateBoard() { DurationReporter duration_reporter("dumpstate_board()"); - dprintf(STDOUT_FILENO, "========================================================\n"); - dprintf(STDOUT_FILENO, "== Board\n"); - dprintf(STDOUT_FILENO, "========================================================\n"); - fsync(STDOUT_FILENO); + printf("========================================================\n"); + printf("== Board\n"); + printf("========================================================\n"); android::sp<android::hardware::dumpstate::V1_0::IDumpstateDevice> dumpstate_device( android::hardware::dumpstate::V1_0::IDumpstateDevice::getService("DumpstateDevice")); @@ -1204,8 +1200,7 @@ void Dumpstate::DumpstateBoard() { dumpstate_device->dumpstateBoard(handle); AddZipEntry("dumpstate-board.txt", path); - dprintf(STDOUT_FILENO, "*** See dumpstate-board.txt entry ***\n"); - fsync(STDOUT_FILENO); + printf("*** See dumpstate-board.txt entry ***\n"); native_handle_close(handle); native_handle_delete(handle); @@ -1632,6 +1627,10 @@ int main(int argc, char *argv[]) { ds.tmp_path_.c_str(), strerror(errno)); } } + + // Don't buffer stdout + setvbuf(stdout, nullptr, _IONBF, 0); + // NOTE: there should be no stdout output until now, otherwise it would break the header. // In particular, DurationReport objects should be created passing 'title, NULL', so their // duration is logged into MYLOG instead. |