Commit 3621de83 authored by Eric Seckler's avatar Eric Seckler Committed by Chromium LUCI CQ

tracing: Fix track_uuid association for typed events.

crrev.com/c/2633994 introduced a bug which caused some events to be
emitted on an incorrect track. It's caused by the incorrect assumption
that a constexpr symbol (kDefaultTrack) only receives a single address
within a translation unit, even across different inlined functions.

This patch fixes this by making kDefaultTrack a const symbol instead.

Change-Id: I3f8a1d569d50839bb2188a037f88b9d6d3d7253b
Bug: 1168791
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2644798
Commit-Queue: Eric Seckler <eseckler@chromium.org>
Commit-Queue: Sami Kyöstilä <skyostil@chromium.org>
Reviewed-by: default avatarSami Kyöstilä <skyostil@chromium.org>
Auto-Submit: Eric Seckler <eseckler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846112}
parent 2ff93a54
......@@ -59,7 +59,7 @@
namespace trace_event_internal {
static constexpr perfetto::Track kDefaultTrack{};
static const perfetto::Track kDefaultTrack{};
// Copy of function with the same name from Perfetto client library.
template <typename T>
......
......@@ -232,39 +232,73 @@ TEST_F(TypedTraceEventTest, InternedData) {
TEST_F(TypedTraceEventTest, InstantThreadEvent) {
TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
TraceLog::RECORDING_MODE);
TRACE_EVENT_INSTANT("cat", "ThreadEvent", [](perfetto::EventContext) {});
auto track_event = ParseTrackEvent();
EXPECT_FALSE(track_event.has_track_uuid());
CancelTrace();
}
TEST_F(TypedTraceEventTest, InstantProcessEvent) {
TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
TraceLog::RECORDING_MODE);
TRACE_EVENT_INSTANT("cat", "ProcessEvent", perfetto::ProcessTrack::Current(),
[](perfetto::EventContext) {});
auto track_event = ParseTrackEvent();
EXPECT_TRUE(track_event.has_track_uuid());
EXPECT_EQ(track_event.track_uuid(), perfetto::ProcessTrack::Current().uuid);
CancelTrace();
}
TEST_F(TypedTraceEventTest, InstantGlobalEvent) {
TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
TraceLog::RECORDING_MODE);
TRACE_EVENT_INSTANT("cat", "GlobalEvent", perfetto::Track::Global(1234),
[](perfetto::EventContext) {});
auto track_event = ParseTrackEvent();
EXPECT_TRUE(track_event.has_track_uuid());
EXPECT_EQ(track_event.track_uuid(), perfetto::Track::Global(1234).uuid);
CancelTrace();
}
TEST_F(TypedTraceEventTest, InstantGlobalDefaultEvent) {
TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
TraceLog::RECORDING_MODE);
TRACE_EVENT_INSTANT("cat", "GlobalDefaultEvent", perfetto::Track::Global(0),
[](perfetto::EventContext) {});
auto track_event = ParseTrackEvent();
EXPECT_TRUE(track_event.has_track_uuid());
EXPECT_EQ(track_event.track_uuid(), perfetto::Track::Global(0).uuid);
CancelTrace();
}
TEST_F(TypedTraceEventTest, BeginEventOnDefaultTrackDoesNotWriteTrackUuid) {
TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
TraceLog::RECORDING_MODE);
TRACE_EVENT_BEGIN("cat", "Name");
auto begin_event = ParseTrackEvent();
EXPECT_FALSE(begin_event.has_track_uuid());
CancelTrace();
}
TEST_F(TypedTraceEventTest, EndEventOnDefaultTrackDoesNotWriteTrackUuid) {
TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
TraceLog::RECORDING_MODE);
TRACE_EVENT_END("cat");
auto end_event = ParseTrackEvent();
EXPECT_FALSE(end_event.has_track_uuid());
CancelTrace();
}
} // namespace trace_event
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment