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 blueline-userdebug Change-Id: Iaaa312d2d9da73ca329807211227a8c7a049102c
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -408,9 +408,10 @@ static bool generateSectionListCpp(Descriptor const* descriptor) {
|
||||
for (int i=0; i<descriptor->field_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);
|
||||
|
||||
Reference in New Issue
Block a user