Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d62f7e66 authored by Andy Hung's avatar Andy Hung
Browse files

dumpstate: Fix missing Java anr traces in bugreport

Missing /data/anr/trace_dd files that are generated
for example by the finalizer watchdog are now packaged
in the bugreport zip file.

Test: create Java anr trace and trigger bugreport
Bug: 319729079
Change-Id: I3f23381c57e185540a47805f73795dac2c895eea
parent a8d0a4e0
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -198,6 +198,7 @@ static const std::string TOMBSTONE_DIR = "/data/tombstones/";
static const std::string TOMBSTONE_FILE_PREFIX = "tombstone_";
static const std::string TOMBSTONE_FILE_PREFIX = "tombstone_";
static const std::string ANR_DIR = "/data/anr/";
static const std::string ANR_DIR = "/data/anr/";
static const std::string ANR_FILE_PREFIX = "anr_";
static const std::string ANR_FILE_PREFIX = "anr_";
static const std::string ANR_TRACE_FILE_PREFIX = "trace_";
static const std::string SHUTDOWN_CHECKPOINTS_DIR = "/data/system/shutdown-checkpoints/";
static const std::string SHUTDOWN_CHECKPOINTS_DIR = "/data/system/shutdown-checkpoints/";
static const std::string SHUTDOWN_CHECKPOINTS_FILE_PREFIX = "checkpoints-";
static const std::string SHUTDOWN_CHECKPOINTS_FILE_PREFIX = "checkpoints-";


@@ -1179,6 +1180,10 @@ static void AddAnrTraceDir(const std::string& anr_traces_dir) {
    } else {
    } else {
        printf("*** NO ANRs to dump in %s\n\n", ANR_DIR.c_str());
        printf("*** NO ANRs to dump in %s\n\n", ANR_DIR.c_str());
    }
    }

    // Add Java anr traces (such as generated by the Finalizer Watchdog).
    AddDumps(ds.anr_trace_data_.begin(), ds.anr_trace_data_.end(), "JAVA ANR TRACES",
             true /* add_to_zip */);
}
}


static void AddAnrTraceFiles() {
static void AddAnrTraceFiles() {
@@ -1905,6 +1910,7 @@ Dumpstate::RunStatus Dumpstate::DumpstateDefaultAfterCritical() {
    if (!PropertiesHelper::IsDryRun()) {
    if (!PropertiesHelper::IsDryRun()) {
        ds.tombstone_data_ = GetDumpFds(TOMBSTONE_DIR, TOMBSTONE_FILE_PREFIX);
        ds.tombstone_data_ = GetDumpFds(TOMBSTONE_DIR, TOMBSTONE_FILE_PREFIX);
        ds.anr_data_ = GetDumpFds(ANR_DIR, ANR_FILE_PREFIX);
        ds.anr_data_ = GetDumpFds(ANR_DIR, ANR_FILE_PREFIX);
        ds.anr_trace_data_ = GetDumpFds(ANR_DIR, ANR_TRACE_FILE_PREFIX);
        ds.shutdown_checkpoints_ = GetDumpFds(
        ds.shutdown_checkpoints_ = GetDumpFds(
            SHUTDOWN_CHECKPOINTS_DIR, SHUTDOWN_CHECKPOINTS_FILE_PREFIX);
            SHUTDOWN_CHECKPOINTS_DIR, SHUTDOWN_CHECKPOINTS_FILE_PREFIX);
    }
    }
@@ -3046,6 +3052,7 @@ void Dumpstate::Cancel() {
    }
    }
    tombstone_data_.clear();
    tombstone_data_.clear();
    anr_data_.clear();
    anr_data_.clear();
    anr_trace_data_.clear();
    shutdown_checkpoints_.clear();
    shutdown_checkpoints_.clear();


    // Instead of shutdown the pool, we delete temporary files directly since
    // Instead of shutdown the pool, we delete temporary files directly since
@@ -3341,6 +3348,7 @@ Dumpstate::RunStatus Dumpstate::RunInternal(int32_t calling_uid,


    tombstone_data_.clear();
    tombstone_data_.clear();
    anr_data_.clear();
    anr_data_.clear();
    anr_trace_data_.clear();
    shutdown_checkpoints_.clear();
    shutdown_checkpoints_.clear();


    return (consent_callback_ != nullptr &&
    return (consent_callback_ != nullptr &&
+3 −0
Original line number Original line Diff line number Diff line
@@ -526,6 +526,9 @@ class Dumpstate {
    // List of open ANR dump files.
    // List of open ANR dump files.
    std::vector<DumpData> anr_data_;
    std::vector<DumpData> anr_data_;


    // List of open Java traces files in the anr directory.
    std::vector<DumpData> anr_trace_data_;

    // List of open shutdown checkpoint files.
    // List of open shutdown checkpoint files.
    std::vector<DumpData> shutdown_checkpoints_;
    std::vector<DumpData> shutdown_checkpoints_;