| Index: base/debug/trace_event_unittest.cc
|
| diff --git a/base/debug/trace_event_unittest.cc b/base/debug/trace_event_unittest.cc
|
| index 7217b1dee839010667d3580ff752ad0ad99ff1e9..3fbc777203e7fbfc56c9abefc56fd7a4de0b5617 100644
|
| --- a/base/debug/trace_event_unittest.cc
|
| +++ b/base/debug/trace_event_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/command_line.h"
|
| #include "base/json/json_reader.h"
|
| #include "base/json/json_writer.h"
|
| +#include "base/memory/ref_counted_memory.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/process_util.h"
|
| #include "base/stringprintf.h"
|
| @@ -462,6 +463,59 @@ TEST_F(TraceEventTestFixture, DataCapturedThreshold) {
|
| EXPECT_NOT_FIND_BE_("4thresholdlong2");
|
| }
|
|
|
| +// Test that static strings are not copied.
|
| +TEST_F(TraceEventTestFixture, StaticStringVsString) {
|
| + ManualTestSetUp();
|
| + TraceLog* tracer = TraceLog::GetInstance();
|
| + // Make sure old events are flushed:
|
| + tracer->SetEnabled(false);
|
| + EXPECT_EQ(0u, tracer->GetEventsSize());
|
| +
|
| + {
|
| + tracer->SetEnabled(true);
|
| + // Test that string arguments are copied.
|
| + TRACE_EVENT2("cat", "name1",
|
| + "arg1", std::string("argval"), "arg2", std::string("argval"));
|
| + // Test that static TRACE_STR_COPY string arguments are copied.
|
| + TRACE_EVENT2("cat", "name2",
|
| + "arg1", TRACE_STR_COPY("argval"),
|
| + "arg2", TRACE_STR_COPY("argval"));
|
| + size_t num_events = tracer->GetEventsSize();
|
| + EXPECT_GT(num_events, 1u);
|
| + const TraceEvent& event1 = tracer->GetEventAt(num_events - 2);
|
| + const TraceEvent& event2 = tracer->GetEventAt(num_events - 1);
|
| + EXPECT_STREQ("name1", event1.name());
|
| + EXPECT_STREQ("name2", event2.name());
|
| + EXPECT_TRUE(event1.parameter_copy_storage() != NULL);
|
| + EXPECT_TRUE(event2.parameter_copy_storage() != NULL);
|
| + EXPECT_GT(event1.parameter_copy_storage()->size(), 0u);
|
| + EXPECT_GT(event2.parameter_copy_storage()->size(), 0u);
|
| + tracer->SetEnabled(false);
|
| + }
|
| +
|
| + {
|
| + tracer->SetEnabled(true);
|
| + // Test that static literal string arguments are not copied.
|
| + TRACE_EVENT2("cat", "name1",
|
| + "arg1", "argval", "arg2", "argval");
|
| + // Test that static TRACE_STR_COPY NULL string arguments are not copied.
|
| + const char* str1 = NULL;
|
| + const char* str2 = NULL;
|
| + TRACE_EVENT2("cat", "name2",
|
| + "arg1", TRACE_STR_COPY(str1),
|
| + "arg2", TRACE_STR_COPY(str2));
|
| + size_t num_events = tracer->GetEventsSize();
|
| + EXPECT_GT(num_events, 1u);
|
| + const TraceEvent& event1 = tracer->GetEventAt(num_events - 2);
|
| + const TraceEvent& event2 = tracer->GetEventAt(num_events - 1);
|
| + EXPECT_STREQ("name1", event1.name());
|
| + EXPECT_STREQ("name2", event2.name());
|
| + EXPECT_TRUE(event1.parameter_copy_storage() == NULL);
|
| + EXPECT_TRUE(event2.parameter_copy_storage() == NULL);
|
| + tracer->SetEnabled(false);
|
| + }
|
| +}
|
| +
|
| // Test that data sent from other threads is gathered
|
| TEST_F(TraceEventTestFixture, DataCapturedOnThread) {
|
| ManualTestSetUp();
|
| @@ -684,8 +738,8 @@ TEST_F(TraceEventTestFixture, DeepCopy) {
|
| TRACE_EVENT_COPY_BEGIN1("category", name2.c_str(),
|
| arg1.c_str(), 5);
|
| TRACE_EVENT_COPY_END2("category", name3.c_str(),
|
| - arg1.c_str(), val1.c_str(),
|
| - arg2.c_str(), val2.c_str());
|
| + arg1.c_str(), val1,
|
| + arg2.c_str(), val2);
|
|
|
| // As per NormallyNoDeepCopy, modify the strings in place.
|
| name1[0] = name2[0] = name3[0] = arg1[0] = arg2[0] = val1[0] = val2[0] = '@';
|
|
|