@@ -23,7 +23,9 @@ limitations under the License.
23
23
#include < type_traits>
24
24
#include < utility>
25
25
26
+ #include " absl/strings/str_cat.h"
26
27
#include " absl/strings/string_view.h"
28
+ #include " absl/types/source_location.h"
27
29
#include " xla/tsl/platform/logging.h"
28
30
#include " xla/tsl/platform/macros.h"
29
31
#include " xla/tsl/profiler/utils/no_init.h"
@@ -94,13 +96,20 @@ class TraceMe {
94
96
// - Can be a value in enum TraceMeLevel.
95
97
// Users are welcome to use level > 3 in their code, if they wish to filter
96
98
// out their host traces based on verbosity.
97
- explicit TraceMe (absl::string_view name, int level = 1 ,
98
- uint64_t filter_mask = kTraceMeDefaultFilterMask ) {
99
+ explicit TraceMe (
100
+ absl::string_view name, int level = 1 ,
101
+ uint64_t filter_mask = kTraceMeDefaultFilterMask ,
102
+ absl::SourceLocation source_location = absl::SourceLocation::current()) {
99
103
DCHECK_GE (level, 1 );
100
104
#if !defined(IS_MOBILE_PLATFORM)
101
105
if (TF_PREDICT_FALSE (TraceMeRecorder::Active (level) &&
102
106
TraceMeRecorder::CheckFilter (filter_mask))) {
103
107
name_.Emplace (std::string (name));
108
+ traceme_internal::AppendMetadata (
109
+ &name_.value ,
110
+ TraceMeEncode ({{" source_location" ,
111
+ absl::StrCat (source_location.file_name (), " :" ,
112
+ source_location.line ())}}));
104
113
start_time_ = GetCurrentTimeNanos ();
105
114
}
106
115
#endif
@@ -123,9 +132,11 @@ class TraceMe {
123
132
124
133
// This overload is necessary to make TraceMe's with string literals work.
125
134
// Otherwise, the name_generator template would be used.
126
- explicit TraceMe (const char * raw, int level = 1 ,
127
- uint64_t filter_mask = kTraceMeDefaultFilterMask )
128
- : TraceMe(absl::string_view(raw), level, filter_mask) {}
135
+ explicit TraceMe (
136
+ const char * raw, int level = 1 ,
137
+ uint64_t filter_mask = kTraceMeDefaultFilterMask ,
138
+ absl::SourceLocation source_location = absl::SourceLocation::current())
139
+ : TraceMe(absl::string_view(raw), level, filter_mask, source_location) {}
129
140
130
141
// This overload only generates the name (and possibly metadata) if tracing is
131
142
// enabled. Useful for avoiding expensive operations (e.g., string
@@ -146,13 +157,19 @@ class TraceMe {
146
157
// });
147
158
template <typename NameGeneratorT,
148
159
std::enable_if_t <std::is_invocable_v<NameGeneratorT>, bool > = true >
149
- explicit TraceMe (NameGeneratorT&& name_generator, int level = 1 ,
150
- uint64_t filter_mask = kTraceMeDefaultFilterMask ) {
160
+ explicit TraceMe (
161
+ NameGeneratorT&& name_generator, int level = 1 ,
162
+ uint64_t filter_mask = kTraceMeDefaultFilterMask ,
163
+ absl::SourceLocation source_location = absl::SourceLocation::current()) {
151
164
DCHECK_GE (level, 1 );
152
165
#if !defined(IS_MOBILE_PLATFORM)
153
166
if (TF_PREDICT_FALSE (TraceMeRecorder::Active (level) &&
154
167
TraceMeRecorder::CheckFilter (filter_mask))) {
155
168
name_.Emplace (std::forward<NameGeneratorT>(name_generator)());
169
+ AppendMetadata ([&]() {
170
+ return TraceMeEncode (
171
+ {{" source_location" , source_location.file_name ()}});
172
+ });
156
173
start_time_ = GetCurrentTimeNanos ();
157
174
}
158
175
#endif
0 commit comments