Minor improvements in the bugreport progress workflow:
- Allow users to rename the suffix in the bugreport files by setting the
dumpstate.pid.name system property. For example, instead of
bugreport-2015-12-02-15-23-46, it could be bugreport-My-App-Crashed.
- Dynamically adjust the max weight if the current progress overflows
the previous max (and set the dumpstate.pid.max system property
accordingly, so UI can be updated as well).
- Strip .txt from the name sent on BUGREPORT_STARTED.
BUG: 25794470
Change-Id: I7634ddd2975bcf93d6612d16c09da1cd7b4e1d91
diff --git a/cmds/dumpstate/utils.cpp b/cmds/dumpstate/utils.cpp
index 8683155..a7637d8 100644
--- a/cmds/dumpstate/utils.cpp
+++ b/cmds/dumpstate/utils.cpp
@@ -553,7 +553,7 @@
void send_broadcast(const std::string& action, const std::vector<std::string>& args) {
if (args.size() > 1000) {
- fprintf(stderr, "send_broadcast: too many arguments (%d)\n", args.size());
+ fprintf(stderr, "send_broadcast: too many arguments (%d)\n", (int) args.size());
return;
}
const char *am_args[1024] = { "/system/bin/am", "broadcast", "--user", "0",
@@ -841,6 +841,7 @@
/* overall progress */
int progress = 0;
int do_update_progress = 0; // Set by dumpstate.cpp
+int weight_total = WEIGHT_TOTAL;
// TODO: make this function thread safe if sections are generated in parallel.
void update_progress(int delta) {
@@ -850,12 +851,27 @@
char key[PROPERTY_KEY_MAX];
char value[PROPERTY_VALUE_MAX];
+
+ // adjusts max on the fly
+ if (progress > weight_total) {
+ int new_total = weight_total * 1.2;
+ fprintf(stderr, "Adjusting total weight from %d to %d\n", weight_total, new_total);
+ weight_total = new_total;
+ sprintf(key, "dumpstate.%d.max", getpid());
+ sprintf(value, "%d", weight_total);
+ int status = property_set(key, value);
+ if (status) {
+ ALOGW("Could not update max weight by setting system property %s to %s: %d\n",
+ key, value, status);
+ }
+ }
+
sprintf(key, "dumpstate.%d.progress", getpid());
sprintf(value, "%d", progress);
// stderr is ignored on normal invocations, but useful when calling /system/bin/dumpstate
// directly for debuggging.
- fprintf(stderr, "Setting progress (%s): %s/%d\n", key, value, WEIGHT_TOTAL);
+ fprintf(stderr, "Setting progress (%s): %s/%d\n", key, value, weight_total);
int status = property_set(key, value);
if (status) {