Commit 3af396a9 authored by Sami Kyostila's avatar Sami Kyostila Committed by Chromium LUCI CQ

base/trace_event: Remove flags/scope parameter from typed trace points

Perfetto doesn't use a flags or scope parameter with typed trace points,
so remove these parameters from the compatibility shim in Chrome too.

Bug: 1006541
Change-Id: I7b184de3a0cacba975446da6be8b4ea5316496b7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2633994
Commit-Queue: Sami Kyöstilä <skyostil@chromium.org>
Auto-Submit: Sami Kyöstilä <skyostil@chromium.org>
Reviewed-by: default avatarEric Seckler <eseckler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845172}
parent 2dfbe185
...@@ -31,18 +31,16 @@ ...@@ -31,18 +31,16 @@
// Implementation detail: internal macro to trace a log message, with the source // Implementation detail: internal macro to trace a log message, with the source
// location of the log statement. // location of the log statement.
#define INTERNAL_TRACE_LOG_MESSAGE(file, message, line) \ #define INTERNAL_TRACE_LOG_MESSAGE(file, message, line) \
TRACE_EVENT_INSTANT( \ TRACE_EVENT_INSTANT("log", "LogMessage", [&](perfetto::EventContext ctx) { \
"log", "LogMessage", TRACE_EVENT_SCOPE_THREAD, \ perfetto::protos::pbzero::LogMessage* log = \
[&](perfetto::EventContext ctx) { \ ctx.event()->set_log_message(); \
perfetto::protos::pbzero::LogMessage* log = \ log->set_source_location_iid( \
ctx.event()->set_log_message(); \ base::trace_event::InternedSourceLocation::Get( \
log->set_source_location_iid( \ &ctx, base::trace_event::TraceSourceLocation( \
base::trace_event::InternedSourceLocation::Get( \ /*function_name=*/nullptr, file, line))); \
&ctx, base::trace_event::TraceSourceLocation( \ log->set_body_iid(base::trace_event::InternedLogMessage::Get( \
/*function_name=*/nullptr, file, line))); \ &ctx, message.as_string())); \
log->set_body_iid(base::trace_event::InternedLogMessage::Get( \ });
&ctx, message.as_string())); \
});
#endif // BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_ #endif // BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_
...@@ -69,8 +69,8 @@ struct IgnoredValue { ...@@ -69,8 +69,8 @@ struct IgnoredValue {
INTERNAL_TRACE_IGNORE(category, name) INTERNAL_TRACE_IGNORE(category, name)
#define TRACE_EVENT_END(category, ...) INTERNAL_TRACE_IGNORE(category) #define TRACE_EVENT_END(category, ...) INTERNAL_TRACE_IGNORE(category)
#define TRACE_EVENT(category, name, ...) INTERNAL_TRACE_IGNORE(category, name) #define TRACE_EVENT(category, name, ...) INTERNAL_TRACE_IGNORE(category, name)
#define TRACE_EVENT_INSTANT(category, name, scope, ...) \ #define TRACE_EVENT_INSTANT(category, name, ...) \
INTERNAL_TRACE_IGNORE(category, name, scope) INTERNAL_TRACE_IGNORE(category, name)
namespace base { namespace base {
namespace trace_event { namespace trace_event {
......
...@@ -45,13 +45,13 @@ ...@@ -45,13 +45,13 @@
// }); // });
#define TRACE_EVENT_BEGIN(category, name, ...) \ #define TRACE_EVENT_BEGIN(category, name, ...) \
TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_BEGIN, category, name, \ TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_BEGIN, category, name, \
TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__) ##__VA_ARGS__)
// End a thread-scoped slice under |category|. // End a thread-scoped slice under |category|.
#define TRACE_EVENT_END(category, ...) \ #define TRACE_EVENT_END(category, ...) \
TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_END, category, \ TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_END, category, \
trace_event_internal::kTraceEventEndName, \ trace_event_internal::kTraceEventEndName, \
TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__) ##__VA_ARGS__)
// Begin a thread-scoped slice which gets automatically closed when going out // Begin a thread-scoped slice which gets automatically closed when going out
// of scope. // of scope.
...@@ -67,8 +67,8 @@ ...@@ -67,8 +67,8 @@
TRACING_INTERNAL_SCOPED_ADD_TRACE_EVENT(category, name, ##__VA_ARGS__) TRACING_INTERNAL_SCOPED_ADD_TRACE_EVENT(category, name, ##__VA_ARGS__)
// Emit a single event called "name" immediately, with zero duration. // Emit a single event called "name" immediately, with zero duration.
#define TRACE_EVENT_INSTANT(category, name, scope, ...) \ #define TRACE_EVENT_INSTANT(category, name, ...) \
TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_INSTANT, category, name, \ TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_INSTANT, category, name, \
scope, ##__VA_ARGS__) ##__VA_ARGS__)
#endif // BASE_TRACE_EVENT_TYPED_MACROS_H_ #endif // BASE_TRACE_EVENT_TYPED_MACROS_H_
...@@ -115,9 +115,9 @@ base::trace_event::TrackEventHandle CreateTrackEvent( ...@@ -115,9 +115,9 @@ base::trace_event::TrackEventHandle CreateTrackEvent(
char phase, char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name,
unsigned int flags,
base::TimeTicks ts, base::TimeTicks ts,
uint64_t track_uuid) { uint64_t track_uuid,
bool explicit_track) {
DCHECK(phase == TRACE_EVENT_PHASE_BEGIN || phase == TRACE_EVENT_PHASE_END || DCHECK(phase == TRACE_EVENT_PHASE_BEGIN || phase == TRACE_EVENT_PHASE_END ||
phase == TRACE_EVENT_PHASE_INSTANT); phase == TRACE_EVENT_PHASE_INSTANT);
DCHECK(category_group_enabled); DCHECK(category_group_enabled);
...@@ -132,7 +132,6 @@ base::trace_event::TrackEventHandle CreateTrackEvent( ...@@ -132,7 +132,6 @@ base::trace_event::TrackEventHandle CreateTrackEvent(
// Provide events emitted onto different tracks as NESTABLE_ASYNC events to // Provide events emitted onto different tracks as NESTABLE_ASYNC events to
// TraceLog, so that e.g. ETW export is aware of them not being a sync event // TraceLog, so that e.g. ETW export is aware of them not being a sync event
// for the current thread. // for the current thread.
bool explicit_track = track_uuid != perfetto::Track().uuid;
auto phase_and_id_for_trace_log = auto phase_and_id_for_trace_log =
GetPhaseAndIdForTraceLog(explicit_track, track_uuid, phase); GetPhaseAndIdForTraceLog(explicit_track, track_uuid, phase);
...@@ -142,12 +141,17 @@ base::trace_event::TrackEventHandle CreateTrackEvent( ...@@ -142,12 +141,17 @@ base::trace_event::TrackEventHandle CreateTrackEvent(
return base::trace_event::TrackEventHandle(); return base::trace_event::TrackEventHandle();
} }
unsigned int flags = TRACE_EVENT_FLAG_NONE;
if (ts.is_null()) { if (ts.is_null()) {
ts = TRACE_TIME_TICKS_NOW(); ts = TRACE_TIME_TICKS_NOW();
} else { } else {
flags |= TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP; flags |= TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP;
} }
if (phase == TRACE_EVENT_PHASE_INSTANT && !explicit_track) {
flags |= TRACE_EVENT_SCOPE_THREAD;
}
// Only emit thread time / instruction count for events on the default track // Only emit thread time / instruction count for events on the default track
// without explicit timestamp. // without explicit timestamp.
base::ThreadTicks thread_now; base::ThreadTicks thread_now;
......
...@@ -23,14 +23,14 @@ ...@@ -23,14 +23,14 @@
#define TRACING_INTERNAL_CONCAT(a, b) TRACING_INTERNAL_CONCAT2(a, b) #define TRACING_INTERNAL_CONCAT(a, b) TRACING_INTERNAL_CONCAT2(a, b)
#define TRACING_INTERNAL_UID(prefix) TRACING_INTERNAL_CONCAT(prefix, __LINE__) #define TRACING_INTERNAL_UID(prefix) TRACING_INTERNAL_CONCAT(prefix, __LINE__)
#define TRACING_INTERNAL_ADD_TRACE_EVENT(phase, category, name, flags, ...) \ #define TRACING_INTERNAL_ADD_TRACE_EVENT(phase, category, name, ...) \
do { \ do { \
INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED()) { \ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED()) { \
trace_event_internal::AddTraceEvent( \ trace_event_internal::AddTraceEvent( \
phase, INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \ phase, INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \
flags, ##__VA_ARGS__); \ ##__VA_ARGS__); \
} \ } \
} while (false) } while (false)
#define TRACING_INTERNAL_SCOPED_ADD_TRACE_EVENT(category, name, ...) \ #define TRACING_INTERNAL_SCOPED_ADD_TRACE_EVENT(category, name, ...) \
...@@ -48,18 +48,19 @@ ...@@ -48,18 +48,19 @@
/* field. As described in macros.h we shouldn't need it in our */ \ /* field. As described in macros.h we shouldn't need it in our */ \
/* end state. */ \ /* end state. */ \
TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_END, category, "", \ TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_END, category, "", \
TRACE_EVENT_FLAG_NONE, \
[](perfetto::EventContext) {}); \ [](perfetto::EventContext) {}); \
} \ } \
} event; \ } event; \
} TRACING_INTERNAL_UID(scoped_event){[&]() { \ } TRACING_INTERNAL_UID(scoped_event){[&]() { \
TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_BEGIN, category, name, \ TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_BEGIN, category, name, \
TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ ##__VA_ARGS__); \
return 0; \ return 0; \
}()}; }()};
namespace trace_event_internal { namespace trace_event_internal {
static constexpr perfetto::Track kDefaultTrack{};
// Copy of function with the same name from Perfetto client library. // Copy of function with the same name from Perfetto client library.
template <typename T> template <typename T>
constexpr bool IsValidTraceLambdaImpl( constexpr bool IsValidTraceLambdaImpl(
...@@ -89,9 +90,9 @@ base::trace_event::TrackEventHandle BASE_EXPORT ...@@ -89,9 +90,9 @@ base::trace_event::TrackEventHandle BASE_EXPORT
CreateTrackEvent(char phase, CreateTrackEvent(char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name,
unsigned int flags,
base::TimeTicks timestamp, base::TimeTicks timestamp,
uint64_t track_uuid); uint64_t track_uuid,
bool explicit_track);
base::trace_event::TracePacketHandle BASE_EXPORT CreateTracePacket(); base::trace_event::TracePacketHandle BASE_EXPORT CreateTracePacket();
...@@ -115,18 +116,19 @@ template < ...@@ -115,18 +116,19 @@ template <
inline void AddTraceEvent(char phase, inline void AddTraceEvent(char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name,
unsigned int flags,
const perfetto::Track& track, const perfetto::Track& track,
base::TimeTicks timestamp, base::TimeTicks timestamp,
TrackEventArgumentFunction argument_func) { TrackEventArgumentFunction argument_func) {
bool emit_track_descriptor = false; bool emit_track_descriptor = false;
{ {
base::trace_event::TrackEventHandle track_event = CreateTrackEvent( bool explicit_track = &track != &kDefaultTrack;
phase, category_group_enabled, name, flags, timestamp, track.uuid); base::trace_event::TrackEventHandle track_event =
CreateTrackEvent(phase, category_group_enabled, name, timestamp,
track.uuid, explicit_track);
if (!track_event) if (!track_event)
return; return;
if (track) { if (explicit_track) {
track_event->set_track_uuid(track.uuid); track_event->set_track_uuid(track.uuid);
emit_track_descriptor = ShouldEmitTrackDescriptor( emit_track_descriptor = ShouldEmitTrackDescriptor(
track.uuid, track_event.incremental_state()); track.uuid, track_event.incremental_state());
...@@ -150,11 +152,10 @@ template < ...@@ -150,11 +152,10 @@ template <
inline void AddTraceEvent(char phase, inline void AddTraceEvent(char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name,
unsigned int flags,
const TrackType& track, const TrackType& track,
TrackEventArgumentFunction argument_func) { TrackEventArgumentFunction argument_func) {
AddTraceEvent(phase, category_group_enabled, name, flags, track, AddTraceEvent(phase, category_group_enabled, name, track, base::TimeTicks(),
base::TimeTicks(), argument_func); argument_func);
} }
template < template <
...@@ -164,17 +165,15 @@ template < ...@@ -164,17 +165,15 @@ template <
inline void AddTraceEvent(char phase, inline void AddTraceEvent(char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name,
unsigned int flags,
TrackEventArgumentFunction argument_func) { TrackEventArgumentFunction argument_func) {
AddTraceEvent(phase, category_group_enabled, name, flags, perfetto::Track(), AddTraceEvent(phase, category_group_enabled, name, kDefaultTrack,
base::TimeTicks(), argument_func); base::TimeTicks(), argument_func);
} }
inline void AddTraceEvent(char phase, inline void AddTraceEvent(char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name) {
unsigned int flags) { AddTraceEvent(phase, category_group_enabled, name, kDefaultTrack,
AddTraceEvent(phase, category_group_enabled, name, flags, perfetto::Track(),
base::TimeTicks(), [](perfetto::EventContext ctx) {}); base::TimeTicks(), [](perfetto::EventContext ctx) {});
} }
...@@ -184,10 +183,9 @@ template <typename TrackType, ...@@ -184,10 +183,9 @@ template <typename TrackType,
inline void AddTraceEvent(char phase, inline void AddTraceEvent(char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name,
unsigned int flags,
const TrackType& track) { const TrackType& track) {
AddTraceEvent(phase, category_group_enabled, name, flags, track, AddTraceEvent(phase, category_group_enabled, name, track, base::TimeTicks(),
base::TimeTicks(), [](perfetto::EventContext ctx) {}); [](perfetto::EventContext ctx) {});
} }
template <typename TrackType, template <typename TrackType,
...@@ -196,10 +194,9 @@ template <typename TrackType, ...@@ -196,10 +194,9 @@ template <typename TrackType,
inline void AddTraceEvent(char phase, inline void AddTraceEvent(char phase,
const unsigned char* category_group_enabled, const unsigned char* category_group_enabled,
const char* name, const char* name,
unsigned int flags,
const TrackType& track, const TrackType& track,
base::TimeTicks timestamp) { base::TimeTicks timestamp) {
AddTraceEvent(phase, category_group_enabled, name, flags, track, timestamp, AddTraceEvent(phase, category_group_enabled, name, track, timestamp,
[](perfetto::EventContext ctx) {}); [](perfetto::EventContext ctx) {});
} }
......
...@@ -113,6 +113,14 @@ class TypedTraceEventTest : public testing::Test { ...@@ -113,6 +113,14 @@ class TypedTraceEventTest : public testing::Test {
~TypedTraceEventTest() override { ResetTypedTraceEventsForTesting(); } ~TypedTraceEventTest() override { ResetTypedTraceEventsForTesting(); }
perfetto::protos::TrackEvent ParseTrackEvent() {
auto serialized_data = event_.event.SerializeAsArray();
perfetto::protos::TrackEvent track_event;
EXPECT_TRUE(track_event.ParseFromArray(serialized_data.data(),
serialized_data.size()));
return track_event;
}
protected: protected:
TestTrackEvent event_; TestTrackEvent event_;
TestTracePacket packet_; TestTracePacket packet_;
...@@ -221,5 +229,43 @@ TEST_F(TypedTraceEventTest, InternedData) { ...@@ -221,5 +229,43 @@ TEST_F(TypedTraceEventTest, InternedData) {
CancelTrace(); CancelTrace();
} }
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());
}
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);
}
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);
}
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);
}
} // namespace trace_event } // namespace trace_event
} // namespace base } // namespace base
...@@ -1165,7 +1165,7 @@ void TraceEventDataSource::OnMetricsSampleCallback( ...@@ -1165,7 +1165,7 @@ void TraceEventDataSource::OnMetricsSampleCallback(
base::HistogramBase::Sample sample) { base::HistogramBase::Sample sample) {
TRACE_EVENT_INSTANT( TRACE_EVENT_INSTANT(
TRACE_DISABLED_BY_DEFAULT("histogram_samples"), "HistogramSample", TRACE_DISABLED_BY_DEFAULT("histogram_samples"), "HistogramSample",
TRACE_EVENT_SCOPE_THREAD, [&](perfetto::EventContext ctx) { [&](perfetto::EventContext ctx) {
bool privacy_filtering_enabled = bool privacy_filtering_enabled =
TraceEventDataSource::GetInstance()->IsPrivacyFilteringEnabled(); TraceEventDataSource::GetInstance()->IsPrivacyFilteringEnabled();
perfetto::protos::pbzero::ChromeHistogramSample* new_sample = perfetto::protos::pbzero::ChromeHistogramSample* new_sample =
...@@ -1182,9 +1182,11 @@ void TraceEventDataSource::OnMetricsSampleCallback( ...@@ -1182,9 +1182,11 @@ void TraceEventDataSource::OnMetricsSampleCallback(
void TraceEventDataSource::OnUserActionSampleCallback( void TraceEventDataSource::OnUserActionSampleCallback(
const std::string& action, const std::string& action,
base::TimeTicks action_time) { base::TimeTicks action_time) {
constexpr uint64_t kGlobalInstantTrackId = 0;
TRACE_EVENT_INSTANT( TRACE_EVENT_INSTANT(
TRACE_DISABLED_BY_DEFAULT("user_action_samples"), "UserAction", TRACE_DISABLED_BY_DEFAULT("user_action_samples"), "UserAction",
TRACE_EVENT_SCOPE_GLOBAL, [&](perfetto::EventContext ctx) { perfetto::Track::Global(kGlobalInstantTrackId),
[&](perfetto::EventContext ctx) {
bool privacy_filtering_enabled = bool privacy_filtering_enabled =
TraceEventDataSource::GetInstance()->IsPrivacyFilteringEnabled(); TraceEventDataSource::GetInstance()->IsPrivacyFilteringEnabled();
perfetto::protos::pbzero::ChromeUserEvent* new_sample = perfetto::protos::pbzero::ChromeUserEvent* new_sample =
......
...@@ -1789,10 +1789,9 @@ TEST_F(TraceEventDataSourceTest, TypedArgumentsTracingOnBeginAndEnd) { ...@@ -1789,10 +1789,9 @@ TEST_F(TraceEventDataSourceTest, TypedArgumentsTracingOnBeginAndEnd) {
TEST_F(TraceEventDataSourceTest, TypedArgumentsTracingOnInstant) { TEST_F(TraceEventDataSourceTest, TypedArgumentsTracingOnInstant) {
StartTraceEventDataSource(); StartTraceEventDataSource();
TRACE_EVENT_INSTANT("browser", "bar", TRACE_EVENT_SCOPE_THREAD, TRACE_EVENT_INSTANT("browser", "bar", [&](perfetto::EventContext ctx) {
[&](perfetto::EventContext ctx) { ctx.event()->set_log_message()->set_body_iid(42);
ctx.event()->set_log_message()->set_body_iid(42); });
});
size_t packet_index = ExpectStandardPreamble(); size_t packet_index = ExpectStandardPreamble();
......
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