Commit 23652c5f authored by Eugene Ostroukhov's avatar Eugene Ostroukhov Committed by Commit Bot

[tracing] Custom tag for the traceEvents array

This API will be used by Node.js to provide output compatible with
Chrome devtools.

Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng
Change-Id: I265495f8af39bfc78d7fdbe43ac308f0920e817d
Reviewed-on: https://chromium-review.googlesource.com/1044491Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Commit-Queue: Eugene Ostroukhov <eostroukhov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53041}
parent 713e10c6
...@@ -112,6 +112,8 @@ class V8_PLATFORM_EXPORT TraceWriter { ...@@ -112,6 +112,8 @@ class V8_PLATFORM_EXPORT TraceWriter {
virtual void Flush() = 0; virtual void Flush() = 0;
static TraceWriter* CreateJSONTraceWriter(std::ostream& stream); static TraceWriter* CreateJSONTraceWriter(std::ostream& stream);
static TraceWriter* CreateJSONTraceWriter(std::ostream& stream,
const std::string& tag);
private: private:
// Disallow copy and assign // Disallow copy and assign
......
...@@ -119,8 +119,12 @@ void JSONTraceWriter::AppendArgValue(ConvertableToTraceFormat* value) { ...@@ -119,8 +119,12 @@ void JSONTraceWriter::AppendArgValue(ConvertableToTraceFormat* value) {
stream_ << arg_stringified; stream_ << arg_stringified;
} }
JSONTraceWriter::JSONTraceWriter(std::ostream& stream) : stream_(stream) { JSONTraceWriter::JSONTraceWriter(std::ostream& stream)
stream_ << "{\"traceEvents\":["; : JSONTraceWriter(stream, "traceEvents") {}
JSONTraceWriter::JSONTraceWriter(std::ostream& stream, const std::string& tag)
: stream_(stream) {
stream_ << "{\"" << tag << "\":[";
} }
JSONTraceWriter::~JSONTraceWriter() { stream_ << "]}"; } JSONTraceWriter::~JSONTraceWriter() { stream_ << "]}"; }
...@@ -171,6 +175,11 @@ TraceWriter* TraceWriter::CreateJSONTraceWriter(std::ostream& stream) { ...@@ -171,6 +175,11 @@ TraceWriter* TraceWriter::CreateJSONTraceWriter(std::ostream& stream) {
return new JSONTraceWriter(stream); return new JSONTraceWriter(stream);
} }
TraceWriter* TraceWriter::CreateJSONTraceWriter(std::ostream& stream,
const std::string& tag) {
return new JSONTraceWriter(stream, tag);
}
} // namespace tracing } // namespace tracing
} // namespace platform } // namespace platform
} // namespace v8 } // namespace v8
...@@ -14,6 +14,7 @@ namespace tracing { ...@@ -14,6 +14,7 @@ namespace tracing {
class JSONTraceWriter : public TraceWriter { class JSONTraceWriter : public TraceWriter {
public: public:
explicit JSONTraceWriter(std::ostream& stream); explicit JSONTraceWriter(std::ostream& stream);
JSONTraceWriter(std::ostream& stream, const std::string& tag);
~JSONTraceWriter(); ~JSONTraceWriter();
void AppendTraceEvent(TraceObject* trace_event) override; void AppendTraceEvent(TraceObject* trace_event) override;
void Flush() override; void Flush() override;
......
...@@ -128,21 +128,15 @@ TEST(TestTraceBufferRingBuffer) { ...@@ -128,21 +128,15 @@ TEST(TestTraceBufferRingBuffer) {
delete ring_buffer; delete ring_buffer;
} }
TEST(TestJSONTraceWriter) { void PopulateJSONWriter(TraceWriter* writer) {
std::ostringstream stream;
// Create a scope for the tracing controller to terminate the trace writer.
{
v8::Platform* old_platform = i::V8::GetCurrentPlatform(); v8::Platform* old_platform = i::V8::GetCurrentPlatform();
std::unique_ptr<v8::Platform> default_platform( std::unique_ptr<v8::Platform> default_platform(
v8::platform::NewDefaultPlatform()); v8::platform::NewDefaultPlatform());
i::V8::SetPlatformForTesting(default_platform.get()); i::V8::SetPlatformForTesting(default_platform.get());
auto tracing = auto tracing = base::make_unique<v8::platform::tracing::TracingController>();
base::make_unique<v8::platform::tracing::TracingController>(); v8::platform::tracing::TracingController* tracing_controller = tracing.get();
v8::platform::tracing::TracingController* tracing_controller =
tracing.get();
static_cast<v8::platform::DefaultPlatform*>(default_platform.get()) static_cast<v8::platform::DefaultPlatform*>(default_platform.get())
->SetTracingController(std::move(tracing)); ->SetTracingController(std::move(tracing));
TraceWriter* writer = TraceWriter::CreateJSONTraceWriter(stream);
TraceBuffer* ring_buffer = TraceBuffer* ring_buffer =
TraceBuffer::CreateTraceBufferRingBuffer(1, writer); TraceBuffer::CreateTraceBufferRingBuffer(1, writer);
...@@ -164,8 +158,12 @@ TEST(TestJSONTraceWriter) { ...@@ -164,8 +158,12 @@ TEST(TestJSONTraceWriter) {
writer->AppendTraceEvent(&trace_object); writer->AppendTraceEvent(&trace_object);
tracing_controller->StopTracing(); tracing_controller->StopTracing();
i::V8::SetPlatformForTesting(old_platform); i::V8::SetPlatformForTesting(old_platform);
} }
TEST(TestJSONTraceWriter) {
std::ostringstream stream;
TraceWriter* writer = TraceWriter::CreateJSONTraceWriter(stream);
PopulateJSONWriter(writer);
std::string trace_str = stream.str(); std::string trace_str = stream.str();
std::string expected_trace_str = std::string expected_trace_str =
"{\"traceEvents\":[{\"pid\":11,\"tid\":22,\"ts\":100,\"tts\":50," "{\"traceEvents\":[{\"pid\":11,\"tid\":22,\"ts\":100,\"tts\":50,"
...@@ -177,6 +175,21 @@ TEST(TestJSONTraceWriter) { ...@@ -177,6 +175,21 @@ TEST(TestJSONTraceWriter) {
CHECK_EQ(expected_trace_str, trace_str); CHECK_EQ(expected_trace_str, trace_str);
} }
TEST(TestJSONTraceWriterWithCustomtag) {
std::ostringstream stream;
TraceWriter* writer = TraceWriter::CreateJSONTraceWriter(stream, "customTag");
PopulateJSONWriter(writer);
std::string trace_str = stream.str();
std::string expected_trace_str =
"{\"customTag\":[{\"pid\":11,\"tid\":22,\"ts\":100,\"tts\":50,"
"\"ph\":\"X\",\"cat\":\"v8-cat\",\"name\":\"Test0\",\"dur\":33,"
"\"tdur\":44,\"id\":\"0x2a\",\"args\":{}},{\"pid\":55,\"tid\":66,"
"\"ts\":110,\"tts\":55,\"ph\":\"Y\",\"cat\":\"v8-cat\",\"name\":"
"\"Test1\",\"dur\":77,\"tdur\":88,\"args\":{}}]}";
CHECK_EQ(expected_trace_str, trace_str);
}
TEST(TestTracingController) { TEST(TestTracingController) {
v8::Platform* old_platform = i::V8::GetCurrentPlatform(); v8::Platform* old_platform = i::V8::GetCurrentPlatform();
std::unique_ptr<v8::Platform> default_platform( std::unique_ptr<v8::Platform> default_platform(
......
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