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

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

Issue 1416693002: WIP NOCOMMIT: New trace event macros proposal Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « no previous file | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <math.h> 5 #include <math.h>
6 #include <cstdlib> 6 #include <cstdlib>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 private: 175 private:
176 // We want our singleton torn down after each test. 176 // We want our singleton torn down after each test.
177 ShadowingAtExitManager at_exit_manager_; 177 ShadowingAtExitManager at_exit_manager_;
178 Lock lock_; 178 Lock lock_;
179 }; 179 };
180 180
181 void TraceEventTestFixture::OnTraceDataCollected( 181 void TraceEventTestFixture::OnTraceDataCollected(
182 WaitableEvent* flush_complete_event, 182 WaitableEvent* flush_complete_event,
183 const scoped_refptr<base::RefCountedString>& events_str, 183 const scoped_refptr<base::RefCountedString>& events_str,
184 bool has_more_events) { 184 bool has_more_events) {
185 // LOG(ERROR) << events_str->data();
185 num_flush_callbacks_++; 186 num_flush_callbacks_++;
186 if (num_flush_callbacks_ > 1) { 187 if (num_flush_callbacks_ > 1) {
187 EXPECT_FALSE(events_str->data().empty()); 188 EXPECT_FALSE(events_str->data().empty());
188 } 189 }
189 AutoLock lock(lock_); 190 AutoLock lock(lock_);
190 json_output_.json_output.clear(); 191 json_output_.json_output.clear();
191 trace_buffer_.Start(); 192 trace_buffer_.Start();
192 trace_buffer_.AddFragment(events_str->data()); 193 trace_buffer_.AddFragment(events_str->data());
193 trace_buffer_.Finish(); 194 trace_buffer_.Finish();
194 195
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 if (!value || value->GetType() != Value::TYPE_DICTIONARY) 393 if (!value || value->GetType() != Value::TYPE_DICTIONARY)
393 continue; 394 continue;
394 const DictionaryValue* dict = static_cast<const DictionaryValue*>(value); 395 const DictionaryValue* dict = static_cast<const DictionaryValue*>(value);
395 396
396 if (IsStringInDict(string_to_match, dict)) 397 if (IsStringInDict(string_to_match, dict))
397 hits.push_back(dict); 398 hits.push_back(dict);
398 } 399 }
399 return hits; 400 return hits;
400 } 401 }
401 402
403 #define INTERNAL_NEW_TRACE_EVENT_ADD(phase, category_group, name, flags, ...) \
404 do { \
405 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \
406 if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \
407 NewAddTraceEvent(phase, \
408 INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \
409 flags, ##__VA_ARGS__); \
410 } \
411 } while (0)
412
413 // Implementation detail: internal macro to create static category and add begin
414 // event if the category is enabled. Also adds the end event when the scope
415 // ends.
416 #define INTERNAL_NEW_TRACE_EVENT_ADD_SCOPED(category_group, name, ...) \
417 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \
418 trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \
419 if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \
420 base::trace_event::TraceEventHandle h = \
421 NewAddTraceEvent(TRACE_EVENT_PHASE_COMPLETE, \
422 INTERNAL_TRACE_EVENT_UID(category_group_enabled), \
423 name, TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \
424 INTERNAL_TRACE_EVENT_UID(tracer) \
425 .Initialize(INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \
426 h); \
427 }
428
429 #define TRACE_EVENT(category_group, name, ...) \
430 INTERNAL_NEW_TRACE_EVENT_ADD_SCOPED(category_group, name, ##__VA_ARGS__)
431
432 #define TRACE_EVENT_BEGIN(category_group, name, ...) \
433 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \
434 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__)
435
436 #define TRACE_EVENT_END(category_group, name, ...) \
437 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \
438 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__)
439
440 #define TRACE_EVENT_INSTANT(category_group, name, scope, ...) \
441 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, category_group, \
442 name, TRACE_EVENT_FLAG_NONE | scope, \
443 ##__VA_ARGS__)
444
445 #define TRACE_EVENT_ASYNC_BEGIN(category_group, name, id, ...) \
446 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_ASYNC_BEGIN, category_group, \
447 name, TRACE_EVENT_FLAG_NONE, TraceEventID(id), \
448 ##__VA_ARGS__)
449
450 #define TRACE_EVENT_ASYNC_END(category_group, name, id, ...) \
451 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_ASYNC_END, category_group, \
452 name, TRACE_EVENT_FLAG_NONE, TraceEventID(id), \
453 ##__VA_ARGS__)
454
455 #define TRACE_EVENT_ASYNC_STEP_INTO(category_group, name, id, step, ...) \
456 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_ASYNC_STEP_INTO, \
457 category_group, name, TRACE_EVENT_FLAG_NONE, \
458 TraceEventID(id), TraceEventArg("step", step), \
459 ##__VA_ARGS__)
460
461 #define TRACE_EVENT_FLOW_BEGIN(category_group, name, id, ...) \
462 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_FLOW_BEGIN, category_group, \
463 name, TRACE_EVENT_FLAG_NONE, TraceEventID(id), \
464 ##__VA_ARGS__)
465
466 #define TRACE_EVENT_FLOW_STEP(category_group, name, id, step, ...) \
467 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_FLOW_STEP, category_group, \
468 name, TRACE_EVENT_FLAG_NONE, TraceEventID(id), \
469 TraceEventArg("step", step), ##__VA_ARGS__)
470
471 #define TRACE_EVENT_FLOW_END_BIND_TO_ENCLOSING(category_group, name, id, ...) \
472 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_FLOW_END, category_group, \
473 name, TRACE_EVENT_FLAG_BIND_TO_ENCLOSING, \
474 TraceEventID(id), ##__VA_ARGS__)
475
476 #define TRACE_COUNTER(category_group, name, ...) \
477 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, category_group, \
478 name, TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__)
479
480 #define TRACE_COUNTER_ID(category_group, name, id, ...) \
481 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, category_group, \
482 name, TRACE_EVENT_FLAG_NONE, TraceEventID(id), \
483 ##__VA_ARGS__)
484
485 #define TRACE_EVENT_COPY_BEGIN(category_group, name, ...) \
486 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, category_group, name, \
487 TRACE_EVENT_FLAG_COPY, ##__VA_ARGS__)
488
489 #define TRACE_EVENT_COPY_END(category_group, name, ...) \
490 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, category_group, name, \
491 TRACE_EVENT_FLAG_COPY, ##__VA_ARGS__)
492
493 #define TRACE_EVENT_ASYNC_STEP_PAST(category_group, name, id, step, ...) \
494 INTERNAL_NEW_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_ASYNC_STEP_PAST, \
495 category_group, name, TRACE_EVENT_FLAG_NONE, \
496 TraceEventID(id), TraceEventArg("step", step), \
497 ##__VA_ARGS__)
498
499 namespace {
500
501 struct TraceParams {
502 TraceParams(unsigned int flags)
503 : id_(trace_event_internal::kNoId),
504 context_id_(trace_event_internal::kNoId),
505 bind_id_(trace_event_internal::kNoId),
506 thread_id_(static_cast<int>(base::PlatformThread::CurrentId())),
507 timestamp_(base::TimeTicks::Now()),
508 num_args_(0),
509 convertable_values_(NULL),
510 flags_(flags) {}
511
512 base::trace_event::TraceEventHandle Finalize(
513 char phase,
514 const unsigned char* category_group_enabled,
515 const char* name) {
516 return TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP(
517 phase, category_group_enabled, name, id_, context_id_, bind_id_,
518 thread_id_, timestamp_, num_args_, arg_names_, arg_types_, arg_values_,
519 &convertable_values_, flags_);
520 }
521
522 unsigned long long id_;
523 unsigned long long context_id_;
524 unsigned long long bind_id_;
525 int thread_id_;
526 TimeTicks timestamp_;
527 int num_args_;
528 const char* arg_names_[2];
529 unsigned char arg_types_[2];
530 unsigned long long arg_values_[2];
531 scoped_refptr<ConvertableToTraceFormat> convertable_values_;
532 unsigned int flags_;
533 };
534
535 base::trace_event::TraceEventHandle NewAddTraceEvent(
536 char phase,
537 const unsigned char* category_group_enabled,
538 const char* name,
539 unsigned int flags) {
540 TraceParams trace_params(flags);
541 return trace_params.Finalize(phase, category_group_enabled, name);
542 }
543
544 template <typename PARAM1_TYPE>
545 base::trace_event::TraceEventHandle NewAddTraceEvent(
546 char phase,
547 const unsigned char* category_group_enabled,
548 const char* name,
549 unsigned int flags,
550 const PARAM1_TYPE& param1) {
551 TraceParams trace_params(flags);
552
553 param1.Fill(&trace_params);
554 return trace_params.Finalize(phase, category_group_enabled, name);
555 }
556
557 template <typename PARAM1_TYPE, typename PARAM2_TYPE>
558 base::trace_event::TraceEventHandle NewAddTraceEvent(
559 char phase,
560 const unsigned char* category_group_enabled,
561 const char* name,
562 unsigned int flags,
563 const PARAM1_TYPE& param1,
564 const PARAM2_TYPE& param2) {
565 TraceParams trace_params(flags);
566
567 param1.Fill(&trace_params);
568 param2.Fill(&trace_params);
569 return trace_params.Finalize(phase, category_group_enabled, name);
570 }
571
572 template <typename PARAM1_TYPE, typename PARAM2_TYPE, typename PARAM3_TYPE>
573 base::trace_event::TraceEventHandle NewAddTraceEvent(
574 char phase,
575 const unsigned char* category_group_enabled,
576 const char* name,
577 unsigned int flags,
578 const PARAM1_TYPE& param1,
579 const PARAM2_TYPE& param2,
580 const PARAM3_TYPE& param3) {
581 TraceParams trace_params(flags);
582
583 param1.Fill(&trace_params);
584 param2.Fill(&trace_params);
585 param3.Fill(&trace_params);
586 return trace_params.Finalize(phase, category_group_enabled, name);
587 }
588
589 template <typename PARAM1_TYPE,
590 typename PARAM2_TYPE,
591 typename PARAM3_TYPE,
592 typename PARAM4_TYPE>
593 base::trace_event::TraceEventHandle NewAddTraceEvent(
594 char phase,
595 const unsigned char* category_group_enabled,
596 const char* name,
597 unsigned int flags,
598 const PARAM1_TYPE& param1,
599 const PARAM2_TYPE& param2,
600 const PARAM3_TYPE& param3,
601 const PARAM4_TYPE& param4) {
602 TraceParams trace_params(flags);
603
604 param1.Fill(&trace_params);
605 param2.Fill(&trace_params);
606 param3.Fill(&trace_params);
607 param4.Fill(&trace_params);
608 return trace_params.Finalize(phase, category_group_enabled, name);
609 }
610
611 struct TraceEventBindID {
612 TraceEventBindID(const unsigned long long& bind_id) : bind_id_(bind_id) {}
613
614 void Fill(TraceParams* trace_params) const {
615 trace_event_internal::TraceID trace_event_bind_id(bind_id_,
616 &trace_params->flags_);
617 trace_params->bind_id_ = trace_event_bind_id.data();
618 }
619
620 const unsigned long long& bind_id_;
621 };
622
623 struct TraceEventID {
624 TraceEventID(const unsigned long long& id) : id_(id) {}
625
626 void Fill(TraceParams* trace_params) const {
627 trace_params->flags_ |= TRACE_EVENT_FLAG_HAS_ID;
628 trace_event_internal::TraceID trace_event_id(id_, &trace_params->flags_);
629 trace_params->id_ = trace_event_id.data();
630 }
631
632 const unsigned long long& id_;
633 };
634
635 struct TraceEventThreadID {
636 TraceEventThreadID(const unsigned long long& thread_id)
637 : thread_id_(thread_id) {}
638
639 void Fill(TraceParams* trace_params) const {
640 trace_params->thread_id_ = thread_id_;
641 }
642
643 const unsigned long long& thread_id_;
644 };
645
646 struct TraceEventTimestamp {
647 TraceEventTimestamp(const unsigned long long& timestamp)
648 : timestamp_(timestamp) {}
649
650 void Fill(TraceParams* trace_params) const {
651 trace_params->flags_ |= TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP;
652 trace_params->timestamp_ = base::TimeTicks::FromInternalValue(timestamp_);
653 }
654
655 const unsigned long long& timestamp_;
656 };
657
658 template <typename ARG_TYPE>
659 struct TraceEventArgImpl {
660 TraceEventArgImpl(const char* arg_name, const ARG_TYPE& arg_value)
661 : arg_name_(arg_name), arg_value_(arg_value) {}
662
663 TraceEventArgImpl(const ARG_TYPE& arg_value)
664 : arg_name_("value"), arg_value_(arg_value) {}
665
666 void Fill(TraceParams* trace_params) const {
667 int current_arg_num = trace_params->num_args_;
668 DCHECK(current_arg_num < 2);
669 trace_params->arg_names_[current_arg_num] = arg_name_;
670
671 trace_event_internal::SetTraceValue(
672 arg_value_, &trace_params->arg_types_[current_arg_num],
673 &trace_params->arg_values_[current_arg_num]);
674 trace_params->num_args_++;
675 }
676
677 const char* arg_name_;
678 const ARG_TYPE& arg_value_;
679 };
680
681 // Wrapper construction functions to make template argument deduction possible.
682 template <typename ARG_TYPE>
683 TraceEventArgImpl<ARG_TYPE> TraceEventArg(const char* arg_name,
684 const ARG_TYPE& arg_value) {
685 return TraceEventArgImpl<ARG_TYPE>(arg_name, arg_value);
686 }
687
688 template <typename ARG_TYPE>
689 TraceEventArgImpl<ARG_TYPE> TraceEventArg(const ARG_TYPE& arg_value) {
690 return TraceEventArgImpl<ARG_TYPE>(arg_value);
691 }
692
693 } // namespace
694
695 #define TRACE_EVENT_ARG(arg_name, arg_value) \
696 TraceEventArg(#arg_name, arg_value)
697
698 TEST_F(TraceEventTestFixture, NewTraceMacros) {
699 BeginTrace();
700
701 TRACE_EVENT_BEGIN("category", "event name", TraceEventBindID(8080),
702 TRACE_EVENT_ARG(arg1, 42), TRACE_EVENT_ARG(arg2, "foo"),
703 TraceEventID(88));
704
705 EndTraceAndFlush();
706
707 const DictionaryValue* entry1 = FindTraceEntry(trace_parsed_, "event name");
708 ASSERT_TRUE(entry1);
709
710 int i;
711 EXPECT_TRUE(entry1->GetInteger("args.arg1", &i));
712 EXPECT_EQ(i, 42);
713
714 // std::string str;
715 // EXPECT_TRUE(entry1->GetString("id", &str));
716 // EXPECT_EQ(str, "myID");
717 }
718
402 const char kControlCharacters[] = "\001\002\003\n\r"; 719 const char kControlCharacters[] = "\001\002\003\n\r";
403 720
721 void TraceWithAllNewMacroVariants(WaitableEvent* task_complete_event) {
722 {
723 TRACE_EVENT("all", "TRACE_EVENT0 call");
724 TRACE_EVENT("all", "TRACE_EVENT1 call", TraceEventArg("name1", "value1"));
725 TRACE_EVENT("all", "TRACE_EVENT2 call",
726 TraceEventArg("name1", "\"value1\""),
727 TraceEventArg("name2", "value\\2"));
728
729 TRACE_EVENT_INSTANT("all", "TRACE_EVENT_INSTANT0 call",
730 TRACE_EVENT_SCOPE_GLOBAL);
731 TRACE_EVENT_INSTANT("all", "TRACE_EVENT_INSTANT1 call",
732 TRACE_EVENT_SCOPE_PROCESS,
733 TraceEventArg("name1", "value1"));
734 TRACE_EVENT_INSTANT(
735 "all", "TRACE_EVENT_INSTANT2 call", TRACE_EVENT_SCOPE_THREAD,
736 TraceEventArg("name1", "value1"), TraceEventArg("name2", "value2"));
737
738 TRACE_EVENT_BEGIN("all", "TRACE_EVENT_BEGIN0 call");
739 TRACE_EVENT_BEGIN("all", "TRACE_EVENT_BEGIN1 call",
740 TraceEventArg("name1", "value1"));
741 TRACE_EVENT_BEGIN("all", "TRACE_EVENT_BEGIN2 call",
742 TraceEventArg("name1", "value1"),
743 TraceEventArg("name2", "value2"));
744
745 TRACE_EVENT_END("all", "TRACE_EVENT_END0 call");
746 TRACE_EVENT_END("all", "TRACE_EVENT_END1 call",
747 TraceEventArg("name1", "value1"));
748 TRACE_EVENT_END("all", "TRACE_EVENT_END2 call",
749 TraceEventArg("name1", "value1"),
750 TraceEventArg("name2", "value2"));
751
752 TRACE_EVENT_ASYNC_BEGIN("all", "TRACE_EVENT_ASYNC_BEGIN0 call", kAsyncId);
753 TRACE_EVENT_ASYNC_BEGIN("all", "TRACE_EVENT_ASYNC_BEGIN1 call", kAsyncId,
754 TraceEventArg("name1", "value1"));
755 TRACE_EVENT_ASYNC_BEGIN("all", "TRACE_EVENT_ASYNC_BEGIN2 call", kAsyncId,
756 TraceEventArg("name1", "value1"),
757 TraceEventArg("name2", "value2"));
758
759 TRACE_EVENT_ASYNC_STEP_INTO("all", "TRACE_EVENT_ASYNC_STEP_INTO0 call",
760 kAsyncId, "step_begin1");
761 TRACE_EVENT_ASYNC_STEP_INTO("all", "TRACE_EVENT_ASYNC_STEP_INTO1 call",
762 kAsyncId, "step_begin2",
763 TraceEventArg("name1", "value1"));
764
765 TRACE_EVENT_ASYNC_END("all", "TRACE_EVENT_ASYNC_END0 call", kAsyncId);
766 TRACE_EVENT_ASYNC_END("all", "TRACE_EVENT_ASYNC_END1 call", kAsyncId,
767 TraceEventArg("name1", "value1"));
768 TRACE_EVENT_ASYNC_END("all", "TRACE_EVENT_ASYNC_END2 call", kAsyncId,
769 TraceEventArg("name1", "value1"),
770 TraceEventArg("name2", "value2"));
771
772 TRACE_EVENT_FLOW_BEGIN("all", "TRACE_EVENT_FLOW_BEGIN0 call", kFlowId);
773 TRACE_EVENT_FLOW_STEP("all", "TRACE_EVENT_FLOW_STEP0 call", kFlowId,
774 "step1");
775 TRACE_EVENT_FLOW_END_BIND_TO_ENCLOSING(
776 "all", "TRACE_EVENT_FLOW_END_BIND_TO_ENCLOSING0 call", kFlowId);
777
778 TRACE_COUNTER("all", "TRACE_COUNTER1 call", TraceEventArg(31415));
779 TRACE_COUNTER("all", "TRACE_COUNTER2 call", TraceEventArg("a", 30000),
780 TraceEventArg("b", 1415));
781
782 TRACE_COUNTER("all", "TRACE_COUNTER_WITH_TIMESTAMP1 call",
783 TraceEventTimestamp(42), TraceEventArg(31415));
784 TRACE_COUNTER("all", "TRACE_COUNTER_WITH_TIMESTAMP2 call",
785 TraceEventTimestamp(42), TraceEventArg("a", 30000),
786 TraceEventArg("b", 1415));
787
788 TRACE_COUNTER_ID("all", "TRACE_COUNTER_ID1 call", 0x319009,
789 TraceEventArg(31415));
790 TRACE_COUNTER_ID("all", "TRACE_COUNTER_ID2 call", 0x319009,
791 TraceEventArg("a", 30000), TraceEventArg("b", 1415));
792
793 TRACE_EVENT_COPY_BEGIN(
794 "all", "TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0 call",
795 TraceEventID(kAsyncId), TraceEventThreadID(kThreadId),
796 TraceEventTimestamp(12345));
797 TRACE_EVENT_COPY_END("all",
798 "TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0 call",
799 TraceEventID(kAsyncId), TraceEventThreadID(kThreadId),
800 TraceEventTimestamp(23456));
801
802 TRACE_EVENT_BEGIN("all",
803 "TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0 call",
804 TraceEventID(kAsyncId2), TraceEventThreadID(kThreadId),
805 TraceEventTimestamp(34567));
806 TRACE_EVENT_ASYNC_STEP_PAST("all", "TRACE_EVENT_ASYNC_STEP_PAST0 call",
807 kAsyncId2, "step_end1");
808 TRACE_EVENT_ASYNC_STEP_PAST("all", "TRACE_EVENT_ASYNC_STEP_PAST1 call",
809 kAsyncId2, "step_end2",
810 TraceEventArg("name1", "value1"));
811
812 TRACE_EVENT_END("all", "TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0 call",
813 TraceEventID(kAsyncId2), TraceEventThreadID(kThreadId),
814 TraceEventTimestamp(45678));
815
816 TRACE_EVENT_OBJECT_CREATED_WITH_ID("all", "tracked object 1", 0x42);
817 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID("all", "tracked object 1", 0x42,
818 "hello");
819 TRACE_EVENT_OBJECT_DELETED_WITH_ID("all", "tracked object 1", 0x42);
820
821 TraceScopedTrackableObject<int> trackable("all", "tracked object 2",
822 0x2128506);
823 trackable.snapshot("world");
824
825 TRACE_EVENT1(kControlCharacters, kControlCharacters, kControlCharacters,
826 kControlCharacters);
827 } // Scope close causes TRACE_EVENT0 etc to send their END events.
828
829 if (task_complete_event)
830 task_complete_event->Signal();
831 }
832
404 void TraceWithAllMacroVariants(WaitableEvent* task_complete_event) { 833 void TraceWithAllMacroVariants(WaitableEvent* task_complete_event) {
405 { 834 {
406 TRACE_EVENT0("all", "TRACE_EVENT0 call"); 835 TRACE_EVENT0("all", "TRACE_EVENT0 call");
407 TRACE_EVENT1("all", "TRACE_EVENT1 call", "name1", "value1"); 836 TRACE_EVENT1("all", "TRACE_EVENT1 call", "name1", "value1");
408 TRACE_EVENT2("all", "TRACE_EVENT2 call", 837 TRACE_EVENT2("all", "TRACE_EVENT2 call",
409 "name1", "\"value1\"", 838 "name1", "\"value1\"",
410 "name2", "value\\2"); 839 "name2", "value\\2");
411 840
412 TRACE_EVENT_INSTANT0("all", "TRACE_EVENT_INSTANT0 call", 841 TRACE_EVENT_INSTANT0("all", "TRACE_EVENT_INSTANT0 call",
413 TRACE_EVENT_SCOPE_GLOBAL); 842 TRACE_EVENT_SCOPE_GLOBAL);
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), 1329 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
901 TraceLog::RECORDING_MODE); 1330 TraceLog::RECORDING_MODE);
902 1331
903 TraceWithAllMacroVariants(NULL); 1332 TraceWithAllMacroVariants(NULL);
904 1333
905 EndTraceAndFlush(); 1334 EndTraceAndFlush();
906 1335
907 ValidateAllTraceMacrosCreatedData(trace_parsed_); 1336 ValidateAllTraceMacrosCreatedData(trace_parsed_);
908 } 1337 }
909 1338
1339 TEST_F(TraceEventTestFixture, DataCapturedFromNewMacros) {
1340 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
1341 TraceLog::RECORDING_MODE);
1342
1343 TraceWithAllNewMacroVariants(NULL);
1344
1345 EndTraceAndFlush();
1346
1347 ValidateAllTraceMacrosCreatedData(trace_parsed_);
1348 }
1349
910 // Emit some events and validate that only empty strings are received 1350 // Emit some events and validate that only empty strings are received
911 // if we tell Flush() to discard events. 1351 // if we tell Flush() to discard events.
912 TEST_F(TraceEventTestFixture, DataDiscarded) { 1352 TEST_F(TraceEventTestFixture, DataDiscarded) {
913 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), 1353 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
914 TraceLog::RECORDING_MODE); 1354 TraceLog::RECORDING_MODE);
915 1355
916 TraceWithAllMacroVariants(NULL); 1356 TraceWithAllMacroVariants(NULL);
917 1357
918 CancelTrace(); 1358 CancelTrace();
919 1359
(...skipping 2103 matching lines...) Expand 10 before | Expand all | Expand 10 after
3023 } 3463 }
3024 3464
3025 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { 3465 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) {
3026 const char filter[] = "DELAY(test.Delay;16;oneshot)"; 3466 const char filter[] = "DELAY(test.Delay;16;oneshot)";
3027 TraceConfig config(filter, ""); 3467 TraceConfig config(filter, "");
3028 EXPECT_EQ(filter, config.ToCategoryFilterString()); 3468 EXPECT_EQ(filter, config.ToCategoryFilterString());
3029 } 3469 }
3030 3470
3031 } // namespace trace_event 3471 } // namespace trace_event
3032 } // namespace base 3472 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698