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

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

Issue 1239593002: Implement a new flow event API that allows binding flow events and regular events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove a redundant macro. Created 5 years, 5 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
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 "base/trace_event/trace_event_impl.h" 5 #include "base/trace_event/trace_event_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/base_switches.h" 10 #include "base/base_switches.h"
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 unsigned char flags) { 595 unsigned char flags) {
596 timestamp_ = timestamp; 596 timestamp_ = timestamp;
597 thread_timestamp_ = thread_timestamp; 597 thread_timestamp_ = thread_timestamp;
598 duration_ = TimeDelta::FromInternalValue(-1); 598 duration_ = TimeDelta::FromInternalValue(-1);
599 id_ = id; 599 id_ = id;
600 category_group_enabled_ = category_group_enabled; 600 category_group_enabled_ = category_group_enabled;
601 name_ = name; 601 name_ = name;
602 thread_id_ = thread_id; 602 thread_id_ = thread_id;
603 phase_ = phase; 603 phase_ = phase;
604 flags_ = flags; 604 flags_ = flags;
605 flowEvent_ = NULL;
605 606
606 // Clamp num_args since it may have been set by a third_party library. 607 // Clamp num_args since it may have been set by a third_party library.
607 num_args = (num_args > kTraceMaxNumArgs) ? kTraceMaxNumArgs : num_args; 608 num_args = (num_args > kTraceMaxNumArgs) ? kTraceMaxNumArgs : num_args;
608 int i = 0; 609 int i = 0;
609 for (; i < num_args; ++i) { 610 for (; i < num_args; ++i) {
610 arg_names_[i] = arg_names[i]; 611 arg_names_[i] = arg_names[i];
611 arg_types_[i] = arg_types[i]; 612 arg_types_[i] = arg_types[i];
612 613
613 if (arg_types[i] == TRACE_VALUE_TYPE_CONVERTABLE) 614 if (arg_types[i] == TRACE_VALUE_TYPE_CONVERTABLE)
614 convertable_values_[i] = convertable_values[i]; 615 convertable_values_[i] = convertable_values[i];
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 scope = TRACE_EVENT_SCOPE_NAME_PROCESS; 856 scope = TRACE_EVENT_SCOPE_NAME_PROCESS;
856 break; 857 break;
857 858
858 case TRACE_EVENT_SCOPE_THREAD: 859 case TRACE_EVENT_SCOPE_THREAD:
859 scope = TRACE_EVENT_SCOPE_NAME_THREAD; 860 scope = TRACE_EVENT_SCOPE_NAME_THREAD;
860 break; 861 break;
861 } 862 }
862 StringAppendF(out, ",\"s\":\"%c\"", scope); 863 StringAppendF(out, ",\"s\":\"%c\"", scope);
863 } 864 }
864 865
866 // Output flow event info if there is any
867 if (flowEvent_) {
868 StringAppendF(out, ",\"flow\":");
869 flowEvent_->AppendAsJSON(out, argument_filter_predicate);
870 }
871
865 *out += "}"; 872 *out += "}";
866 } 873 }
867 874
868 void TraceEvent::AppendPrettyPrinted(std::ostringstream* out) const { 875 void TraceEvent::AppendPrettyPrinted(std::ostringstream* out) const {
869 *out << name_ << "["; 876 *out << name_ << "[";
870 *out << TraceLog::GetCategoryGroupName(category_group_enabled_); 877 *out << TraceLog::GetCategoryGroupName(category_group_enabled_);
871 *out << "]"; 878 *out << "]";
872 if (arg_names_[0]) { 879 if (arg_names_[0]) {
873 *out << ", {"; 880 *out << ", {";
874 for (int i = 0; i < kTraceMaxNumArgs && arg_names_[i]; ++i) { 881 for (int i = 0; i < kTraceMaxNumArgs && arg_names_[i]; ++i) {
875 if (i > 0) 882 if (i > 0)
876 *out << ", "; 883 *out << ", ";
877 *out << arg_names_[i] << ":"; 884 *out << arg_names_[i] << ":";
878 std::string value_as_text; 885 std::string value_as_text;
879 886
880 if (arg_types_[i] == TRACE_VALUE_TYPE_CONVERTABLE) 887 if (arg_types_[i] == TRACE_VALUE_TYPE_CONVERTABLE)
881 convertable_values_[i]->AppendAsTraceFormat(&value_as_text); 888 convertable_values_[i]->AppendAsTraceFormat(&value_as_text);
882 else 889 else
883 AppendValueAsJSON(arg_types_[i], arg_values_[i], &value_as_text); 890 AppendValueAsJSON(arg_types_[i], arg_values_[i], &value_as_text);
884 891
885 *out << value_as_text; 892 *out << value_as_text;
886 } 893 }
887 *out << "}"; 894 *out << "}";
888 } 895 }
889 } 896 }
890 897
898 bool TraceEvent::isFlowEvent() const {
899 return ((phase() == TRACE_EVENT_PHASE_FLOW_BEGIN) ||
900 (phase() == TRACE_EVENT_PHASE_FLOW_STEP) ||
901 (phase() == TRACE_EVENT_PHASE_FLOW_END));
902 }
903
891 //////////////////////////////////////////////////////////////////////////////// 904 ////////////////////////////////////////////////////////////////////////////////
892 // 905 //
893 // TraceResultBuffer 906 // TraceResultBuffer
894 // 907 //
895 //////////////////////////////////////////////////////////////////////////////// 908 ////////////////////////////////////////////////////////////////////////////////
896 909
897 TraceResultBuffer::OutputCallback 910 TraceResultBuffer::OutputCallback
898 TraceResultBuffer::SimpleOutput::GetCallback() { 911 TraceResultBuffer::SimpleOutput::GetCallback() {
899 return Bind(&SimpleOutput::Append, Unretained(this)); 912 return Bind(&SimpleOutput::Append, Unretained(this));
900 } 913 }
(...skipping 943 matching lines...) Expand 10 before | Expand all | Expand 10 after
1844 const OutputCallback& flush_output_callback, 1857 const OutputCallback& flush_output_callback,
1845 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate) { 1858 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate) {
1846 if (flush_output_callback.is_null()) 1859 if (flush_output_callback.is_null())
1847 return; 1860 return;
1848 1861
1849 // The callback need to be called at least once even if there is no events 1862 // The callback need to be called at least once even if there is no events
1850 // to let the caller know the completion of flush. 1863 // to let the caller know the completion of flush.
1851 scoped_refptr<RefCountedString> json_events_str_ptr = new RefCountedString(); 1864 scoped_refptr<RefCountedString> json_events_str_ptr = new RefCountedString();
1852 while (const TraceBufferChunk* chunk = logged_events->NextChunk()) { 1865 while (const TraceBufferChunk* chunk = logged_events->NextChunk()) {
1853 for (size_t j = 0; j < chunk->size(); ++j) { 1866 for (size_t j = 0; j < chunk->size(); ++j) {
1867 // Flow Events are always bundled to regular events, and will be handled
1868 // within their bundled events.
1869 if (chunk->GetEventAt(j)->isFlowEvent())
1870 continue;
1871
1854 size_t size = json_events_str_ptr->size(); 1872 size_t size = json_events_str_ptr->size();
1855 if (size > kTraceEventBufferSizeInBytes) { 1873 if (size > kTraceEventBufferSizeInBytes) {
1856 flush_output_callback.Run(json_events_str_ptr, true); 1874 flush_output_callback.Run(json_events_str_ptr, true);
1857 json_events_str_ptr = new RefCountedString(); 1875 json_events_str_ptr = new RefCountedString();
1858 } else if (size) { 1876 } else if (size) {
1859 json_events_str_ptr->data().append(",\n"); 1877 json_events_str_ptr->data().append(",\n");
1860 } 1878 }
1861 chunk->GetEventAt(j)->AppendAsJSON(&(json_events_str_ptr->data()), 1879 chunk->GetEventAt(j)->AppendAsJSON(&(json_events_str_ptr->data()),
1862 argument_filter_predicate); 1880 argument_filter_predicate);
1863 } 1881 }
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
2512 } 2530 }
2513 2531
2514 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { 2532 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() {
2515 if (*category_group_enabled_) { 2533 if (*category_group_enabled_) {
2516 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, 2534 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_,
2517 name_, event_handle_); 2535 name_, event_handle_);
2518 } 2536 }
2519 } 2537 }
2520 2538
2521 } // namespace trace_event_internal 2539 } // namespace trace_event_internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698