diff --git a/tensorflow/core/profiler/utils/xplane_builder.cc b/tensorflow/core/profiler/utils/xplane_builder.cc index 480b6b7a9ef..20408966504 100644 --- a/tensorflow/core/profiler/utils/xplane_builder.cc +++ b/tensorflow/core/profiler/utils/xplane_builder.cc @@ -29,15 +29,21 @@ namespace profiler { XPlaneBuilder::XPlaneBuilder(XPlane* plane) : XStatsBuilder(plane, this), plane_(plane) { - for (auto& iter : *plane->mutable_event_metadata()) { + for (auto& id_and_metadata : *plane->mutable_event_metadata()) { + auto& metadata = id_and_metadata.second; last_event_metadata_id_ = - std::max(last_event_metadata_id_, iter.second.id()); - event_metadata_by_name_.try_emplace(iter.second.name(), &iter.second); + std::max(last_event_metadata_id_, metadata.id()); + if (!metadata.name().empty()) { + event_metadata_by_name_.try_emplace(metadata.name(), &metadata); + } } - for (auto& iter : *plane->mutable_stat_metadata()) { + for (auto& id_and_metadata : *plane->mutable_stat_metadata()) { + auto& metadata = id_and_metadata.second; last_stat_metadata_id_ = - std::max(last_stat_metadata_id_, iter.second.id()); - stat_metadata_by_name_.try_emplace(iter.second.name(), &iter.second); + std::max(last_stat_metadata_id_, metadata.id()); + if (!metadata.name().empty()) { + stat_metadata_by_name_.try_emplace(metadata.name(), &metadata); + } } for (XLine& line : *plane->mutable_lines()) { lines_by_id_.try_emplace(line.id(), &line); @@ -50,11 +56,15 @@ XEventMetadata* XPlaneBuilder::GetOrCreateEventMetadata(int64 metadata_id) { return &metadata; } +XEventMetadata* XPlaneBuilder::CreateEventMetadata() { + return GetOrCreateEventMetadata(++last_event_metadata_id_); +} + XEventMetadata* XPlaneBuilder::GetOrCreateEventMetadata( absl::string_view name) { XEventMetadata*& metadata = event_metadata_by_name_[name]; if (metadata == nullptr) { - metadata = GetOrCreateEventMetadata(++last_event_metadata_id_); + metadata = CreateEventMetadata(); metadata->set_name(std::string(name)); } return metadata; @@ -63,7 +73,7 @@ XEventMetadata* XPlaneBuilder::GetOrCreateEventMetadata( XEventMetadata* XPlaneBuilder::GetOrCreateEventMetadata(std::string&& name) { XEventMetadata*& metadata = event_metadata_by_name_[name]; if (metadata == nullptr) { - metadata = GetOrCreateEventMetadata(++last_event_metadata_id_); + metadata = CreateEventMetadata(); metadata->set_name(std::move(name)); } return metadata; @@ -75,10 +85,14 @@ XStatMetadata* XPlaneBuilder::GetOrCreateStatMetadata(int64 metadata_id) { return &metadata; } +XStatMetadata* XPlaneBuilder::CreateStatMetadata() { + return GetOrCreateStatMetadata(++last_stat_metadata_id_); +} + XStatMetadata* XPlaneBuilder::GetOrCreateStatMetadata(absl::string_view name) { XStatMetadata*& metadata = stat_metadata_by_name_[name]; if (metadata == nullptr) { - metadata = GetOrCreateStatMetadata(++last_stat_metadata_id_); + metadata = CreateStatMetadata(); metadata->set_name(std::string(name)); } return metadata; @@ -87,7 +101,7 @@ XStatMetadata* XPlaneBuilder::GetOrCreateStatMetadata(absl::string_view name) { XStatMetadata* XPlaneBuilder::GetOrCreateStatMetadata(std::string&& name) { XStatMetadata*& metadata = stat_metadata_by_name_[name]; if (metadata == nullptr) { - metadata = GetOrCreateStatMetadata(++last_stat_metadata_id_); + metadata = CreateStatMetadata(); metadata->set_name(std::move(name)); } return metadata; diff --git a/tensorflow/core/profiler/utils/xplane_builder.h b/tensorflow/core/profiler/utils/xplane_builder.h index df4c3023df0..505340e445a 100644 --- a/tensorflow/core/profiler/utils/xplane_builder.h +++ b/tensorflow/core/profiler/utils/xplane_builder.h @@ -279,6 +279,10 @@ class XPlaneBuilder : public XStatsBuilder { // id was unused, otherwise the builder will add events to an existing line. XLineBuilder GetOrCreateLine(int64 line_id); + // Returns a new event metadata with an automatically generated metadata_id. + // WARNING: If calling this function, don't call GetOrCreateEventMetadata. + XEventMetadata* CreateEventMetadata(); + // Returns event metadata with the given id. Creates a new metadata if the id // was unused. // WARNING: If calling this function, don't call the string overloads below @@ -296,6 +300,10 @@ class XPlaneBuilder : public XStatsBuilder { return GetOrCreateEventMetadata(absl::string_view(name)); } + // Returns a new stat metadata with an automatically generated metadata_id. + // WARNING: If calling this function, don't call GetOrCreateEventMetadata. + XStatMetadata* CreateStatMetadata(); + // Returns stat metadata with the given id. Creates a new metadata if the id // was unused. // WARNING: If calling this function, don't call the string overloads below