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

Commit cc7d9973 authored by Ryan Savitski's avatar Ryan Savitski
Browse files

userdebug: support perfetto traces as a section in incident reports

This set of patches adds a way for the perfetto command line client to
save a trace to a hardcoded location,
/data/misc/perfetto-traces/incident-trace, and call into incidentd to
start a report, which will include said trace in a new section.

This is not a long-term solution, and is structured to minimize changes
to perfetto and incidentd. The latter is currently architected in a way
where it can only pull pre-defined information out of the system, so
we're resorting to persisting the intermediate results in a hardcoded
location.

This will introduce at most two more linked files at the same time.

Bug: 130543265
Tested: manually on crosshatch-userdebug
Merged-In: Iaaa312d2d9da73ca329807211227a8c7a049102c
Change-Id: Iaaa312d2d9da73ca329807211227a8c7a049102c
(cherry picked from commit 09a84790)
parent d4d9b233
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -72,6 +72,8 @@ static TextParserBase* selectParser(int section) {
            return new PsParser();
            return new PsParser();
        case 2006:
        case 2006:
            return new BatteryTypeParser();
            return new BatteryTypeParser();
        case 3026: // system_trace is already a serialized protobuf
            return new NoopParser();
        default:
        default:
            // Return no op parser when no specific ones are implemented.
            // Return no op parser when no specific ones are implemented.
            return new NoopParser();
            return new NoopParser();
+2 −0
Original line number Original line Diff line number Diff line
@@ -67,6 +67,8 @@ bool section_requires_specific_mention(int sectionId) {
    switch (sectionId) {
    switch (sectionId) {
        case 3025: // restricted_images
        case 3025: // restricted_images
            return true;
            return true;
        case 3026: // system_trace
            return true;
        default:
        default:
            return false;
            return false;
    }
    }
+8 −0
Original line number Original line Diff line number Diff line
@@ -321,6 +321,14 @@ message IncidentProto {
        (section).args = "incidentcompanion --restricted_image"
        (section).args = "incidentcompanion --restricted_image"
    ];
    ];


    // System trace as a serialized protobuf.
    optional bytes system_trace = 3026 [
        (section).type = SECTION_FILE,
        (section).args = "/data/misc/perfetto-traces/incident-trace",
        (privacy).dest = DEST_AUTOMATIC,
        (section).userdebug_and_eng_only = true
    ];

    // Reserved for OEMs.
    // Reserved for OEMs.
    extensions 50000 to 100000;
    extensions 50000 to 100000;
}
}
+4 −3
Original line number Original line Diff line number Diff line
@@ -408,8 +408,9 @@ static bool generateSectionListCpp(Descriptor const* descriptor) {
    for (int i=0; i<descriptor->field_count(); i++) {
    for (int i=0; i<descriptor->field_count(); i++) {
        const FieldDescriptor* field = descriptor->field(i);
        const FieldDescriptor* field = descriptor->field(i);


        if (field->type() != FieldDescriptor::TYPE_MESSAGE
        if (field->type() != FieldDescriptor::TYPE_MESSAGE &&
                && field->type() != FieldDescriptor::TYPE_STRING) {
            field->type() != FieldDescriptor::TYPE_STRING &&
            field->type() != FieldDescriptor::TYPE_BYTES) {
          continue;
          continue;
        }
        }