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 09a847902f)
This commit is contained in:
Ryan Savitski
2019-06-03 23:57:09 +01:00
parent d4d9b233b2
commit cc7d9973c6
4 changed files with 16 additions and 3 deletions

View File

@@ -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();

View File

@@ -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;
} }

View File

@@ -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;
} }

View File

@@ -408,9 +408,10 @@ 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 &&
continue; field->type() != FieldDescriptor::TYPE_BYTES) {
continue;
} }
const SectionFlags s = getSectionFlags(field); const SectionFlags s = getSectionFlags(field);