Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: base/debug/trace_event_unittest.cc

Issue 7767014: Added support to trace_event for passing static string arguments without copy (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« base/debug/trace_event.cc ('K') | « base/debug/trace_event.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/debug/trace_event.h" 5 #include "base/debug/trace_event.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
11 #include "base/memory/ref_counted_memory.h"
11 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
12 #include "base/process_util.h" 13 #include "base/process_util.h"
13 #include "base/stringprintf.h" 14 #include "base/stringprintf.h"
14 #include "base/synchronization/waitable_event.h" 15 #include "base/synchronization/waitable_event.h"
15 #include "base/threading/thread.h" 16 #include "base/threading/thread.h"
16 #include "base/values.h" 17 #include "base/values.h"
17 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 20
20 namespace base { 21 namespace base {
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 EXPECT_NOT_FIND_BE_("3thresholdlong2"); 456 EXPECT_NOT_FIND_BE_("3thresholdlong2");
456 457
457 EXPECT_FIND_BE_("nonthreshold4"); 458 EXPECT_FIND_BE_("nonthreshold4");
458 EXPECT_FIND_BE_("4threshold100"); 459 EXPECT_FIND_BE_("4threshold100");
459 EXPECT_FIND_BE_("4threshold1000"); 460 EXPECT_FIND_BE_("4threshold1000");
460 EXPECT_FIND_BE_("4threshold10000"); 461 EXPECT_FIND_BE_("4threshold10000");
461 EXPECT_NOT_FIND_BE_("4thresholdlong1"); 462 EXPECT_NOT_FIND_BE_("4thresholdlong1");
462 EXPECT_NOT_FIND_BE_("4thresholdlong2"); 463 EXPECT_NOT_FIND_BE_("4thresholdlong2");
463 } 464 }
464 465
466 // Test that static strings are not copied.
467 TEST_F(TraceEventTestFixture, StaticStringVsString) {
468 ManualTestSetUp();
469 TraceLog* tracer = TraceLog::GetInstance();
470 // Make sure old events are flushed:
471 tracer->SetEnabled(false);
472 EXPECT_EQ(0u, tracer->GetEventsSize());
473
474 {
475 tracer->SetEnabled(true);
476 // Test that string arguments are copied.
477 TRACE_EVENT2("cat", "name1",
478 "arg1", std::string("argval"), "arg2", std::string("argval"));
479 // Test that static TRACE_STR_COPY string arguments are copied.
480 TRACE_EVENT2("cat", "name2",
481 "arg1", TRACE_STR_COPY("argval"),
482 "arg2", TRACE_STR_COPY("argval"));
483 size_t num_events = tracer->GetEventsSize();
484 EXPECT_GT(num_events, 1u);
485 const TraceEvent& event1 = tracer->GetEventAt(num_events - 2);
486 const TraceEvent& event2 = tracer->GetEventAt(num_events - 1);
487 EXPECT_STREQ("name1", event1.name());
488 EXPECT_STREQ("name2", event2.name());
489 EXPECT_TRUE(event1.parameter_copy_storage() != NULL);
490 EXPECT_TRUE(event2.parameter_copy_storage() != NULL);
491 EXPECT_GT(event1.parameter_copy_storage()->size(), 0u);
492 EXPECT_GT(event2.parameter_copy_storage()->size(), 0u);
493 tracer->SetEnabled(false);
494 }
495
496 {
497 tracer->SetEnabled(true);
498 // Test that static literal string arguments are not copied.
499 TRACE_EVENT2("cat", "name1",
500 "arg1", "argval", "arg2", "argval");
501 // Test that static TRACE_STR_COPY NULL string arguments are not copied.
502 const char* str1 = NULL;
503 const char* str2 = NULL;
504 TRACE_EVENT2("cat", "name2",
505 "arg1", TRACE_STR_COPY(str1),
506 "arg2", TRACE_STR_COPY(str2));
507 size_t num_events = tracer->GetEventsSize();
508 EXPECT_GT(num_events, 1u);
509 const TraceEvent& event1 = tracer->GetEventAt(num_events - 2);
510 const TraceEvent& event2 = tracer->GetEventAt(num_events - 1);
511 EXPECT_STREQ("name1", event1.name());
512 EXPECT_STREQ("name2", event2.name());
513 EXPECT_TRUE(event1.parameter_copy_storage() == NULL);
514 EXPECT_TRUE(event2.parameter_copy_storage() == NULL);
515 tracer->SetEnabled(false);
516 }
517 }
518
465 // Test that data sent from other threads is gathered 519 // Test that data sent from other threads is gathered
466 TEST_F(TraceEventTestFixture, DataCapturedOnThread) { 520 TEST_F(TraceEventTestFixture, DataCapturedOnThread) {
467 ManualTestSetUp(); 521 ManualTestSetUp();
468 TraceLog::GetInstance()->SetEnabled(true); 522 TraceLog::GetInstance()->SetEnabled(true);
469 523
470 Thread thread("1"); 524 Thread thread("1");
471 WaitableEvent task_complete_event(false, false); 525 WaitableEvent task_complete_event(false, false);
472 thread.Start(); 526 thread.Start();
473 527
474 thread.message_loop()->PostTask( 528 thread.message_loop()->PostTask(
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 std::string arg1("arg1"); 731 std::string arg1("arg1");
678 std::string arg2("arg2"); 732 std::string arg2("arg2");
679 std::string val1("val1"); 733 std::string val1("val1");
680 std::string val2("val2"); 734 std::string val2("val2");
681 735
682 TraceLog::GetInstance()->SetEnabled(true); 736 TraceLog::GetInstance()->SetEnabled(true);
683 TRACE_EVENT_COPY_INSTANT0("category", name1.c_str()); 737 TRACE_EVENT_COPY_INSTANT0("category", name1.c_str());
684 TRACE_EVENT_COPY_BEGIN1("category", name2.c_str(), 738 TRACE_EVENT_COPY_BEGIN1("category", name2.c_str(),
685 arg1.c_str(), 5); 739 arg1.c_str(), 5);
686 TRACE_EVENT_COPY_END2("category", name3.c_str(), 740 TRACE_EVENT_COPY_END2("category", name3.c_str(),
687 arg1.c_str(), val1.c_str(), 741 arg1.c_str(), val1,
688 arg2.c_str(), val2.c_str()); 742 arg2.c_str(), val2);
689 743
690 // As per NormallyNoDeepCopy, modify the strings in place. 744 // As per NormallyNoDeepCopy, modify the strings in place.
691 name1[0] = name2[0] = name3[0] = arg1[0] = arg2[0] = val1[0] = val2[0] = '@'; 745 name1[0] = name2[0] = name3[0] = arg1[0] = arg2[0] = val1[0] = val2[0] = '@';
692 746
693 TraceLog::GetInstance()->SetEnabled(false); 747 TraceLog::GetInstance()->SetEnabled(false);
694 748
695 EXPECT_FALSE(FindTraceEntry(trace_parsed_, name1.c_str())); 749 EXPECT_FALSE(FindTraceEntry(trace_parsed_, name1.c_str()));
696 EXPECT_FALSE(FindTraceEntry(trace_parsed_, name2.c_str())); 750 EXPECT_FALSE(FindTraceEntry(trace_parsed_, name2.c_str()));
697 EXPECT_FALSE(FindTraceEntry(trace_parsed_, name3.c_str())); 751 EXPECT_FALSE(FindTraceEntry(trace_parsed_, name3.c_str()));
698 752
(...skipping 11 matching lines...) Expand all
710 764
711 std::string s; 765 std::string s;
712 EXPECT_TRUE(entry3->GetString("args.arg1", &s)); 766 EXPECT_TRUE(entry3->GetString("args.arg1", &s));
713 EXPECT_EQ("val1", s); 767 EXPECT_EQ("val1", s);
714 EXPECT_TRUE(entry3->GetString("args.arg2", &s)); 768 EXPECT_TRUE(entry3->GetString("args.arg2", &s));
715 EXPECT_EQ("val2", s); 769 EXPECT_EQ("val2", s);
716 } 770 }
717 771
718 } // namespace debug 772 } // namespace debug
719 } // namespace base 773 } // namespace base
OLDNEW
« base/debug/trace_event.cc ('K') | « base/debug/trace_event.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698