diff --git a/cmds/incident_helper/src/main.cpp b/cmds/incident_helper/src/main.cpp index 809a77163fb4c..ff5fd86cf11ee 100644 --- a/cmds/incident_helper/src/main.cpp +++ b/cmds/incident_helper/src/main.cpp @@ -72,6 +72,8 @@ static TextParserBase* selectParser(int section) { return new PsParser(); case 2006: return new BatteryTypeParser(); + case 3026: // system_trace is already a serialized protobuf + return new NoopParser(); default: // Return no op parser when no specific ones are implemented. return new NoopParser(); diff --git a/cmds/incidentd/src/Section.cpp b/cmds/incidentd/src/Section.cpp index 85c5a20174c3d..1572114c639f7 100644 --- a/cmds/incidentd/src/Section.cpp +++ b/cmds/incidentd/src/Section.cpp @@ -67,6 +67,8 @@ bool section_requires_specific_mention(int sectionId) { switch (sectionId) { case 3025: // restricted_images return true; + case 3026: // system_trace + return true; default: return false; } diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto index 9a9c9d14154b9..7d0629ee6fba4 100644 --- a/core/proto/android/os/incident.proto +++ b/core/proto/android/os/incident.proto @@ -321,6 +321,14 @@ message IncidentProto { (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. extensions 50000 to 100000; } diff --git a/tools/incident_section_gen/main.cpp b/tools/incident_section_gen/main.cpp index c9c0edc595859..91f875ed99186 100644 --- a/tools/incident_section_gen/main.cpp +++ b/tools/incident_section_gen/main.cpp @@ -408,9 +408,10 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { for (int i=0; ifield_count(); i++) { const FieldDescriptor* field = descriptor->field(i); - if (field->type() != FieldDescriptor::TYPE_MESSAGE - && field->type() != FieldDescriptor::TYPE_STRING) { - continue; + if (field->type() != FieldDescriptor::TYPE_MESSAGE && + field->type() != FieldDescriptor::TYPE_STRING && + field->type() != FieldDescriptor::TYPE_BYTES) { + continue; } const SectionFlags s = getSectionFlags(field);