Make TraceMeEncode compile with C++14

PiperOrigin-RevId: 314223547
Change-Id: Iecc44c509c27787127200b3b5c92d3a9f6faad9c
This commit is contained in:
Zhenyu Tan 2020-06-01 16:14:25 -07:00 committed by TensorFlower Gardener
parent 00868972a8
commit 24580ebdd9
3 changed files with 19 additions and 97 deletions

View File

@ -1,5 +1,5 @@
load("//tensorflow/core/platform:build_config_root.bzl", "if_static")
load("//tensorflow:tensorflow.bzl", "if_not_android", "tf_cc_test", "tf_cuda_library")
load("//tensorflow:tensorflow.bzl", "if_not_android", "tf_cuda_library")
load("//tensorflow:tensorflow.bzl", "tf_pybind_cc_library_wrapper")
package(
@ -113,17 +113,6 @@ cc_library(
],
)
tf_cc_test(
name = "traceme_encode_test",
srcs = ["traceme_encode_test.cc"],
deps = [
":traceme_encode",
"//tensorflow/core:test",
"//tensorflow/core:test_main",
"@com_google_absl//absl/strings",
],
)
cc_library(
name = "annotated_traceme",
hdrs = ["annotated_traceme.h"],

View File

@ -19,6 +19,7 @@ limitations under the License.
#include <initializer_list>
#include <string>
#include <utility>
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
@ -27,19 +28,6 @@ limitations under the License.
namespace tensorflow {
namespace profiler {
// An argument passed to TraceMeEncode.
struct TraceMeArg {
// This constructor is required because absl::AlphaNum is non-copyable.
template <typename Value>
TraceMeArg(absl::string_view k, Value v) : key(k), value(v) {}
TF_DISALLOW_COPY_AND_ASSIGN(TraceMeArg);
absl::string_view key;
absl::AlphaNum value;
};
namespace traceme_internal {
// Copies the contents of str to the address pointed by out.
@ -57,21 +45,23 @@ TF_ATTRIBUTE_ALWAYS_INLINE inline char* Append(char* out,
// Appends args encoded as TraceMe metadata to name.
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string AppendArgs(
std::string name, std::initializer_list<TraceMeArg> args) {
std::string name,
const std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>>&
args) {
if (TF_PREDICT_TRUE(args.size() > 0)) {
const auto old_size = name.size();
auto new_size = old_size + args.size() * 2 + 1;
for (const auto& arg : args) {
new_size += arg.key.size() + arg.value.size();
new_size += arg.first.size() + arg.second.size();
}
name.resize(new_size);
char* const begin = &name[0];
char* out = begin + old_size;
*out++ = '#';
for (const auto& arg : args) {
out = Append(out, arg.key);
out = Append(out, arg.first);
*out++ = '=';
out = Append(out, arg.value.Piece());
out = Append(out, arg.second.Piece());
*out++ = ',';
}
*(out - 1) = '#';
@ -102,16 +92,19 @@ TF_ATTRIBUTE_ALWAYS_INLINE inline void AppendMetadata(
// TraceMe trace_me([value1]() {
// return TraceMeEncode("my_trace", {{"key1", value1}, {"key2", 42}});
// });
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
std::string name, std::initializer_list<TraceMeArg> args) {
inline std::string TraceMeEncode(
std::string name,
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
return traceme_internal::AppendArgs(std::move(name), args);
}
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
absl::string_view name, std::initializer_list<TraceMeArg> args) {
inline std::string TraceMeEncode(
absl::string_view name,
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
return traceme_internal::AppendArgs(std::string(name), args);
}
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
const char* name, std::initializer_list<TraceMeArg> args) {
inline std::string TraceMeEncode(
const char* name,
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
return traceme_internal::AppendArgs(std::string(name), args);
}
@ -123,8 +116,8 @@ TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
// trace_me.AppendMetadata([value1]() {
// return TraceMeEncode({{"key1", value1}, {"key2", 42}});
// });
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
std::initializer_list<TraceMeArg> args) {
inline std::string TraceMeEncode(
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
return traceme_internal::AppendArgs(std::string(), args);
}

View File

@ -1,60 +0,0 @@
/* Copyright 2020 The TensorFlow Authors All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==============================================================================*/
#include "tensorflow/core/profiler/lib/traceme_encode.h"
#include <string>
#include "absl/strings/str_cat.h"
#include "tensorflow/core/platform/test.h"
namespace tensorflow {
namespace profiler {
namespace {
TEST(TraceMeEncodeTest, NoArgTest) {
EXPECT_EQ(TraceMeEncode("Hello!", {}), "Hello!");
}
TEST(TraceMeEncodeTest, OneArgTest) {
EXPECT_EQ(TraceMeEncode("Hello", {{"context", "World"}}),
"Hello#context=World#");
}
TEST(TraceMeEncodeTest, TwoArgsTest) {
EXPECT_EQ(TraceMeEncode("Hello", {{"context", "World"}, {"request_id", 42}}),
"Hello#context=World,request_id=42#");
}
TEST(TraceMeEncodeTest, ThreeArgsTest) {
EXPECT_EQ(TraceMeEncode("Hello", {{"context", "World"},
{"request_id", 42},
{"addr", absl::Hex(0xdeadbeef)}}),
"Hello#context=World,request_id=42,addr=deadbeef#");
}
TEST(TraceMeEncodeTest, TemporaryStringTest) {
EXPECT_EQ(TraceMeEncode("Hello", {{std::string("context"),
absl::StrCat("World:", 2020)}}),
"Hello#context=World:2020#");
}
TEST(TraceMeEncodeTest, NoNameTest) {
EXPECT_EQ(TraceMeEncode({{"context", "World"}, {"request_id", 42}}),
"#context=World,request_id=42#");
}
} // namespace
} // namespace profiler
} // namespace tensorflow