Make TraceMeEncode compile with C++14
PiperOrigin-RevId: 314223547 Change-Id: Iecc44c509c27787127200b3b5c92d3a9f6faad9c
This commit is contained in:
parent
00868972a8
commit
24580ebdd9
@ -1,5 +1,5 @@
|
|||||||
load("//tensorflow/core/platform:build_config_root.bzl", "if_static")
|
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")
|
load("//tensorflow:tensorflow.bzl", "tf_pybind_cc_library_wrapper")
|
||||||
|
|
||||||
package(
|
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(
|
cc_library(
|
||||||
name = "annotated_traceme",
|
name = "annotated_traceme",
|
||||||
hdrs = ["annotated_traceme.h"],
|
hdrs = ["annotated_traceme.h"],
|
||||||
|
@ -19,6 +19,7 @@ limitations under the License.
|
|||||||
|
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "absl/strings/str_cat.h"
|
#include "absl/strings/str_cat.h"
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
@ -27,19 +28,6 @@ limitations under the License.
|
|||||||
|
|
||||||
namespace tensorflow {
|
namespace tensorflow {
|
||||||
namespace profiler {
|
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 {
|
namespace traceme_internal {
|
||||||
|
|
||||||
// Copies the contents of str to the address pointed by out.
|
// 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.
|
// Appends args encoded as TraceMe metadata to name.
|
||||||
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string AppendArgs(
|
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)) {
|
if (TF_PREDICT_TRUE(args.size() > 0)) {
|
||||||
const auto old_size = name.size();
|
const auto old_size = name.size();
|
||||||
auto new_size = old_size + args.size() * 2 + 1;
|
auto new_size = old_size + args.size() * 2 + 1;
|
||||||
for (const auto& arg : args) {
|
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);
|
name.resize(new_size);
|
||||||
char* const begin = &name[0];
|
char* const begin = &name[0];
|
||||||
char* out = begin + old_size;
|
char* out = begin + old_size;
|
||||||
*out++ = '#';
|
*out++ = '#';
|
||||||
for (const auto& arg : args) {
|
for (const auto& arg : args) {
|
||||||
out = Append(out, arg.key);
|
out = Append(out, arg.first);
|
||||||
*out++ = '=';
|
*out++ = '=';
|
||||||
out = Append(out, arg.value.Piece());
|
out = Append(out, arg.second.Piece());
|
||||||
*out++ = ',';
|
*out++ = ',';
|
||||||
}
|
}
|
||||||
*(out - 1) = '#';
|
*(out - 1) = '#';
|
||||||
@ -102,16 +92,19 @@ TF_ATTRIBUTE_ALWAYS_INLINE inline void AppendMetadata(
|
|||||||
// TraceMe trace_me([value1]() {
|
// TraceMe trace_me([value1]() {
|
||||||
// return TraceMeEncode("my_trace", {{"key1", value1}, {"key2", 42}});
|
// return TraceMeEncode("my_trace", {{"key1", value1}, {"key2", 42}});
|
||||||
// });
|
// });
|
||||||
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
|
inline std::string TraceMeEncode(
|
||||||
std::string name, std::initializer_list<TraceMeArg> args) {
|
std::string name,
|
||||||
|
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
|
||||||
return traceme_internal::AppendArgs(std::move(name), args);
|
return traceme_internal::AppendArgs(std::move(name), args);
|
||||||
}
|
}
|
||||||
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
|
inline std::string TraceMeEncode(
|
||||||
absl::string_view name, std::initializer_list<TraceMeArg> args) {
|
absl::string_view name,
|
||||||
|
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
|
||||||
return traceme_internal::AppendArgs(std::string(name), args);
|
return traceme_internal::AppendArgs(std::string(name), args);
|
||||||
}
|
}
|
||||||
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
|
inline std::string TraceMeEncode(
|
||||||
const char* name, std::initializer_list<TraceMeArg> args) {
|
const char* name,
|
||||||
|
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
|
||||||
return traceme_internal::AppendArgs(std::string(name), 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]() {
|
// trace_me.AppendMetadata([value1]() {
|
||||||
// return TraceMeEncode({{"key1", value1}, {"key2", 42}});
|
// return TraceMeEncode({{"key1", value1}, {"key2", 42}});
|
||||||
// });
|
// });
|
||||||
TF_ATTRIBUTE_ALWAYS_INLINE inline std::string TraceMeEncode(
|
inline std::string TraceMeEncode(
|
||||||
std::initializer_list<TraceMeArg> args) {
|
std::initializer_list<std::pair<absl::string_view, absl::AlphaNum>> args) {
|
||||||
return traceme_internal::AppendArgs(std::string(), args);
|
return traceme_internal::AppendArgs(std::string(), args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
|
Loading…
x
Reference in New Issue
Block a user