| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |