Skip to content

Commit 94f5ab1

Browse files
ddiproiettocdamus
authored andcommitted
track_event_parser: Support priority for log messages
Reported-at: google#507 Change-Id: I624f4afdd83d3bc6bbef72726c0acbc65cc703f4
1 parent e2d9d73 commit 94f5ab1

File tree

5 files changed

+115
-4
lines changed

5 files changed

+115
-4
lines changed

protos/perfetto/trace/perfetto_trace.proto

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9099,6 +9099,17 @@ message LogMessage {
90999099
optional uint64 source_location_iid = 1;
91009100
// interned LogMessageBody.
91019101
optional uint64 body_iid = 2;
9102+
enum Priority {
9103+
PRIO_UNSPECIFIED = 0;
9104+
PRIO_UNUSED = 1;
9105+
PRIO_VERBOSE = 2;
9106+
PRIO_DEBUG = 3;
9107+
PRIO_INFO = 4;
9108+
PRIO_WARN = 5;
9109+
PRIO_ERROR = 6;
9110+
PRIO_FATAL = 7;
9111+
}
9112+
optional Priority prio = 3;
91029113
}
91039114

91049115
// --------------------
@@ -9109,6 +9120,7 @@ message LogMessageBody {
91099120
optional uint64 iid = 1;
91109121
optional string body = 2;
91119122
}
9123+
91129124
// End of protos/perfetto/trace/track_event/log_message.proto
91139125

91149126
// Begin of protos/perfetto/trace/track_event/source_location.proto

protos/perfetto/trace/track_event/log_message.proto

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,17 @@ message LogMessage {
2323
optional uint64 source_location_iid = 1;
2424
// interned LogMessageBody.
2525
optional uint64 body_iid = 2;
26+
enum Priority {
27+
PRIO_UNSPECIFIED = 0;
28+
PRIO_UNUSED = 1;
29+
PRIO_VERBOSE = 2;
30+
PRIO_DEBUG = 3;
31+
PRIO_INFO = 4;
32+
PRIO_WARN = 5;
33+
PRIO_ERROR = 6;
34+
PRIO_FATAL = 7;
35+
}
36+
optional Priority prio = 3;
2637
}
2738

2839
// --------------------
@@ -32,4 +43,4 @@ message LogMessage {
3243
message LogMessageBody {
3344
optional uint64 iid = 1;
3445
optional string body = 2;
35-
}
46+
}

src/trace_processor/importers/proto/track_event_parser.cc

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,29 @@ std::optional<base::Status> MaybeParseSourceLocation(
230230
return base::OkStatus();
231231
}
232232

233+
protos::pbzero::AndroidLogPriority ToAndroidLogPriority(
234+
protos::pbzero::LogMessage::Priority prio) {
235+
switch (prio) {
236+
case protos::pbzero::LogMessage::Priority::PRIO_UNSPECIFIED:
237+
return protos::pbzero::AndroidLogPriority::PRIO_UNSPECIFIED;
238+
case protos::pbzero::LogMessage::Priority::PRIO_UNUSED:
239+
return protos::pbzero::AndroidLogPriority::PRIO_UNUSED;
240+
case protos::pbzero::LogMessage::Priority::PRIO_VERBOSE:
241+
return protos::pbzero::AndroidLogPriority::PRIO_VERBOSE;
242+
case protos::pbzero::LogMessage::Priority::PRIO_DEBUG:
243+
return protos::pbzero::AndroidLogPriority::PRIO_DEBUG;
244+
case protos::pbzero::LogMessage::Priority::PRIO_INFO:
245+
return protos::pbzero::AndroidLogPriority::PRIO_INFO;
246+
case protos::pbzero::LogMessage::Priority::PRIO_WARN:
247+
return protos::pbzero::AndroidLogPriority::PRIO_WARN;
248+
case protos::pbzero::LogMessage::Priority::PRIO_ERROR:
249+
return protos::pbzero::AndroidLogPriority::PRIO_ERROR;
250+
case protos::pbzero::LogMessage::Priority::PRIO_FATAL:
251+
return protos::pbzero::AndroidLogPriority::PRIO_FATAL;
252+
}
253+
return protos::pbzero::AndroidLogPriority::PRIO_UNSPECIFIED;
254+
}
255+
233256
} // namespace
234257

235258
class TrackEventParser::EventImporter {
@@ -1331,11 +1354,17 @@ class TrackEventParser::EventImporter {
13311354
// The track event log message doesn't specify any priority. UI never
13321355
// displays priorities < 2 (VERBOSE in android). Let's make all the track
13331356
// event logs show up as INFO.
1334-
constexpr uint32_t kPriority =
1335-
protos::pbzero::AndroidLogPriority::PRIO_INFO;
1357+
int32_t priority = protos::pbzero::AndroidLogPriority::PRIO_INFO;
1358+
if (message.has_prio()) {
1359+
priority = ToAndroidLogPriority(
1360+
static_cast<protos::pbzero::LogMessage::Priority>(message.prio()));
1361+
inserter->AddArg(parser_->log_message_priority_id_,
1362+
Variadic::Integer(priority));
1363+
}
1364+
13361365
storage_->mutable_android_log_table()->Insert(
13371366
{ts_, *utid_,
1338-
/*priority*/ kPriority,
1367+
/*priority*/ static_cast<uint32_t>(priority),
13391368
/*tag_id*/ source_location_id, log_message_id});
13401369

13411370
return util::OkStatus();
@@ -1432,6 +1461,8 @@ TrackEventParser::TrackEventParser(TraceProcessorContext* context,
14321461
log_message_source_location_line_number_key_id_(
14331462
context->storage->InternString(
14341463
"track_event.log_message.line_number")),
1464+
log_message_priority_id_(
1465+
context->storage->InternString("track_event.priority")),
14351466
source_location_function_name_key_id_(
14361467
context->storage->InternString("source.function_name")),
14371468
source_location_file_name_key_id_(

src/trace_processor/importers/proto/track_event_parser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class TrackEventParser {
9292
const StringId log_message_source_location_function_name_key_id_;
9393
const StringId log_message_source_location_file_name_key_id_;
9494
const StringId log_message_source_location_line_number_key_id_;
95+
const StringId log_message_priority_id_;
9596
const StringId source_location_function_name_key_id_;
9697
const StringId source_location_file_name_key_id_;
9798
const StringId source_location_line_number_key_id_;

test/trace_processor/diff_tests/chrome/tests.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,62 @@ def test_chrome_log_message(self):
370370
1,"foo.cc:123","log message",4
371371
"""))
372372

373+
def test_chrome_log_message_priority(self):
374+
return DiffTestBlueprint(
375+
trace=TextProto(r"""
376+
packet {
377+
timestamp: 0
378+
incremental_state_cleared: true
379+
trusted_packet_sequence_id: 1
380+
track_descriptor {
381+
uuid: 12345
382+
thread {
383+
pid: 123
384+
tid: 345
385+
}
386+
parent_uuid: 0
387+
chrome_thread {
388+
thread_type: THREAD_POOL_FG_WORKER
389+
}
390+
}
391+
}
392+
393+
packet {
394+
trusted_packet_sequence_id: 1
395+
timestamp: 10
396+
track_event {
397+
track_uuid: 12345
398+
categories: "cat1"
399+
type: TYPE_INSTANT
400+
name: "slice1"
401+
log_message {
402+
body_iid: 1
403+
source_location_iid: 3
404+
prio: PRIO_WARN
405+
}
406+
}
407+
interned_data {
408+
log_message_body {
409+
iid: 1
410+
body: "log message"
411+
}
412+
source_locations {
413+
iid: 3
414+
function_name: "func"
415+
file_name: "foo.cc"
416+
line_number: 123
417+
}
418+
}
419+
}
420+
"""),
421+
query="""
422+
SELECT utid, tag, msg, prio FROM android_logs;
423+
""",
424+
out=Csv("""
425+
"utid","tag","msg","prio"
426+
1,"foo.cc:123","log message",5
427+
"""))
428+
373429
def test_chrome_log_message_args(self):
374430
return DiffTestBlueprint(
375431
trace=TextProto(r"""

0 commit comments

Comments
 (0)