Loading cmds/dumpstate/dumpstate.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -52,8 +52,6 @@ using android::base::StringPrintf; static char cmdline_buf[16384] = "(unknown)"; static const char *dump_traces_path = NULL; static std::string screenshot_path; #define PSTORE_LAST_KMSG "/sys/fs/pstore/console-ramoops" #define RAFT_DIR "/data/misc/raft/" Loading Loading @@ -272,7 +270,7 @@ static unsigned long logcat_timeout(const char *name) { /* End copy from system/core/logd/LogBuffer.cpp */ /* dumps the current system state to stdout */ static void dumpstate() { static void dumpstate(std::string screenshot_path) { unsigned long timeout; time_t now = time(NULL); char build[PROPERTY_VALUE_MAX], fingerprint[PROPERTY_VALUE_MAX]; Loading Loading @@ -333,9 +331,8 @@ static void dumpstate() { for_each_tid(show_wchan, "BLOCKED PROCESS WAIT-CHANNELS"); if (!screenshot_path.empty()) { ALOGI("taking screenshot\n"); const char *args[] = { "/system/bin/screencap", "-p", screenshot_path.c_str(), NULL }; run_command_always(NULL, 10, args); ALOGI("taking late screenshot\n"); take_screenshot(screenshot_path); ALOGI("wrote screenshot: %s\n", screenshot_path.c_str()); } Loading Loading @@ -688,6 +685,7 @@ int main(int argc, char *argv[]) { int use_socket = 0; int do_fb = 0; int do_broadcast = 0; int do_early_screenshot = 0; if (getuid() != 0) { // Old versions of the adb client would call the Loading Loading @@ -743,6 +741,8 @@ int main(int argc, char *argv[]) { exit(1); } do_early_screenshot = do_update_progress; // If we are going to use a socket, do it as early as possible // to avoid timeouts from bugreport. if (use_socket) { Loading @@ -755,6 +755,9 @@ int main(int argc, char *argv[]) { /* full path of the temporary file containing the bug report */ std::string tmp_path; /* full path of the temporary file containing the screenshot (when requested) */ std::string screenshot_path; /* base name (without suffix or extensions) of the bug report files */ std::string base_name; Loading Loading @@ -812,6 +815,16 @@ int main(int argc, char *argv[]) { } } if (!screenshot_path.empty() && do_early_screenshot) { ALOGI("taking early screenshot\n"); take_screenshot(screenshot_path); ALOGI("wrote screenshot: %s\n", screenshot_path.c_str()); if (chown(screenshot_path.c_str(), AID_SHELL, AID_SHELL)) { ALOGE("Unable to change ownership of screenshot file %s: %s\n", screenshot_path.c_str(), strerror(errno)); } } /* read /proc/cmdline before dropping root */ FILE *cmdline = fopen("/proc/cmdline", "re"); if (cmdline) { Loading Loading @@ -871,7 +884,7 @@ int main(int argc, char *argv[]) { redirect_to_file(stdout, const_cast<char*>(tmp_path.c_str())); } dumpstate(); dumpstate(do_early_screenshot ? NULL : screenshot_path); /* done */ if (vibrator) { Loading Loading @@ -960,6 +973,7 @@ int main(int argc, char *argv[]) { } } ALOGD("Final progress: %d/%d (originally %d)\n", progress, weight_total, WEIGHT_TOTAL); ALOGI("done\n"); return 0; Loading cmds/dumpstate/dumpstate.h +4 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ static const int WEIGHT_FILE = 5; * It would be better to take advantage of the C++ migration and encapsulate the state in an object, * but that will be better handled in a major C++ refactoring, which would also get rid of other C * idioms (like using std::string instead of char*, removing varargs, etc...) */ extern int do_update_progress; extern int do_update_progress, progress, weight_total; /* prints the contents of a file */ int dump_file(const char *title, const char *path); Loading Loading @@ -139,6 +139,9 @@ void play_sound(const char *path); /* Implemented by libdumpstate_board to dump board-specific info */ void dumpstate_board(); /* Takes a screenshot and save it to the given file */ void take_screenshot(std::string path); #ifdef __cplusplus } #endif Loading cmds/dumpstate/utils.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -879,3 +879,8 @@ void update_progress(int delta) { key, value, status); } } void take_screenshot(std::string path) { const char *args[] = { "/system/bin/screencap", "-p", path.c_str(), NULL }; run_command_always(NULL, 10, args); } Loading
cmds/dumpstate/dumpstate.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -52,8 +52,6 @@ using android::base::StringPrintf; static char cmdline_buf[16384] = "(unknown)"; static const char *dump_traces_path = NULL; static std::string screenshot_path; #define PSTORE_LAST_KMSG "/sys/fs/pstore/console-ramoops" #define RAFT_DIR "/data/misc/raft/" Loading Loading @@ -272,7 +270,7 @@ static unsigned long logcat_timeout(const char *name) { /* End copy from system/core/logd/LogBuffer.cpp */ /* dumps the current system state to stdout */ static void dumpstate() { static void dumpstate(std::string screenshot_path) { unsigned long timeout; time_t now = time(NULL); char build[PROPERTY_VALUE_MAX], fingerprint[PROPERTY_VALUE_MAX]; Loading Loading @@ -333,9 +331,8 @@ static void dumpstate() { for_each_tid(show_wchan, "BLOCKED PROCESS WAIT-CHANNELS"); if (!screenshot_path.empty()) { ALOGI("taking screenshot\n"); const char *args[] = { "/system/bin/screencap", "-p", screenshot_path.c_str(), NULL }; run_command_always(NULL, 10, args); ALOGI("taking late screenshot\n"); take_screenshot(screenshot_path); ALOGI("wrote screenshot: %s\n", screenshot_path.c_str()); } Loading Loading @@ -688,6 +685,7 @@ int main(int argc, char *argv[]) { int use_socket = 0; int do_fb = 0; int do_broadcast = 0; int do_early_screenshot = 0; if (getuid() != 0) { // Old versions of the adb client would call the Loading Loading @@ -743,6 +741,8 @@ int main(int argc, char *argv[]) { exit(1); } do_early_screenshot = do_update_progress; // If we are going to use a socket, do it as early as possible // to avoid timeouts from bugreport. if (use_socket) { Loading @@ -755,6 +755,9 @@ int main(int argc, char *argv[]) { /* full path of the temporary file containing the bug report */ std::string tmp_path; /* full path of the temporary file containing the screenshot (when requested) */ std::string screenshot_path; /* base name (without suffix or extensions) of the bug report files */ std::string base_name; Loading Loading @@ -812,6 +815,16 @@ int main(int argc, char *argv[]) { } } if (!screenshot_path.empty() && do_early_screenshot) { ALOGI("taking early screenshot\n"); take_screenshot(screenshot_path); ALOGI("wrote screenshot: %s\n", screenshot_path.c_str()); if (chown(screenshot_path.c_str(), AID_SHELL, AID_SHELL)) { ALOGE("Unable to change ownership of screenshot file %s: %s\n", screenshot_path.c_str(), strerror(errno)); } } /* read /proc/cmdline before dropping root */ FILE *cmdline = fopen("/proc/cmdline", "re"); if (cmdline) { Loading Loading @@ -871,7 +884,7 @@ int main(int argc, char *argv[]) { redirect_to_file(stdout, const_cast<char*>(tmp_path.c_str())); } dumpstate(); dumpstate(do_early_screenshot ? NULL : screenshot_path); /* done */ if (vibrator) { Loading Loading @@ -960,6 +973,7 @@ int main(int argc, char *argv[]) { } } ALOGD("Final progress: %d/%d (originally %d)\n", progress, weight_total, WEIGHT_TOTAL); ALOGI("done\n"); return 0; Loading
cmds/dumpstate/dumpstate.h +4 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ static const int WEIGHT_FILE = 5; * It would be better to take advantage of the C++ migration and encapsulate the state in an object, * but that will be better handled in a major C++ refactoring, which would also get rid of other C * idioms (like using std::string instead of char*, removing varargs, etc...) */ extern int do_update_progress; extern int do_update_progress, progress, weight_total; /* prints the contents of a file */ int dump_file(const char *title, const char *path); Loading Loading @@ -139,6 +139,9 @@ void play_sound(const char *path); /* Implemented by libdumpstate_board to dump board-specific info */ void dumpstate_board(); /* Takes a screenshot and save it to the given file */ void take_screenshot(std::string path); #ifdef __cplusplus } #endif Loading
cmds/dumpstate/utils.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -879,3 +879,8 @@ void update_progress(int delta) { key, value, status); } } void take_screenshot(std::string path) { const char *args[] = { "/system/bin/screencap", "-p", path.c_str(), NULL }; run_command_always(NULL, 10, args); }