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

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

Issue 1115343002: Added a whitelist for trace events that are known to be PII-less. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review fixes Created 5 years, 7 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 // trace. 61 // trace.
62 const int kOverheadReportThresholdInMicroseconds = 50; 62 const int kOverheadReportThresholdInMicroseconds = 50;
63 63
64 // String options that can be used to initialize TraceOptions. 64 // String options that can be used to initialize TraceOptions.
65 const char kRecordUntilFull[] = "record-until-full"; 65 const char kRecordUntilFull[] = "record-until-full";
66 const char kRecordContinuously[] = "record-continuously"; 66 const char kRecordContinuously[] = "record-continuously";
67 const char kRecordAsMuchAsPossible[] = "record-as-much-as-possible"; 67 const char kRecordAsMuchAsPossible[] = "record-as-much-as-possible";
68 const char kTraceToConsole[] = "trace-to-console"; 68 const char kTraceToConsole[] = "trace-to-console";
69 const char kEnableSampling[] = "enable-sampling"; 69 const char kEnableSampling[] = "enable-sampling";
70 const char kEnableSystrace[] = "enable-systrace"; 70 const char kEnableSystrace[] = "enable-systrace";
71 const char kEnableArgumentFilter[] = "enable-argument-filter";
71 72
72 // Controls the number of trace events we will buffer in-memory 73 // Controls the number of trace events we will buffer in-memory
73 // before throwing them away. 74 // before throwing them away.
74 const size_t kTraceBufferChunkSize = TraceBufferChunk::kTraceBufferChunkSize; 75 const size_t kTraceBufferChunkSize = TraceBufferChunk::kTraceBufferChunkSize;
75 const size_t kTraceEventVectorBigBufferChunks = 76 const size_t kTraceEventVectorBigBufferChunks =
76 512000000 / kTraceBufferChunkSize; 77 512000000 / kTraceBufferChunkSize;
77 const size_t kTraceEventVectorBufferChunks = 256000 / kTraceBufferChunkSize; 78 const size_t kTraceEventVectorBufferChunks = 256000 / kTraceBufferChunkSize;
78 const size_t kTraceEventRingBufferChunks = kTraceEventVectorBufferChunks / 4; 79 const size_t kTraceEventRingBufferChunks = kTraceEventVectorBufferChunks / 4;
79 const size_t kTraceEventBufferSizeInBytes = 100 * 1024; 80 const size_t kTraceEventBufferSizeInBytes = 100 * 1024;
80 // Can store results for 30 seconds with 1 ms sampling interval. 81 // Can store results for 30 seconds with 1 ms sampling interval.
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 case TRACE_VALUE_TYPE_STRING: 689 case TRACE_VALUE_TYPE_STRING:
689 case TRACE_VALUE_TYPE_COPY_STRING: 690 case TRACE_VALUE_TYPE_COPY_STRING:
690 EscapeJSONString(value.as_string ? value.as_string : "NULL", true, out); 691 EscapeJSONString(value.as_string ? value.as_string : "NULL", true, out);
691 break; 692 break;
692 default: 693 default:
693 NOTREACHED() << "Don't know how to print this value"; 694 NOTREACHED() << "Don't know how to print this value";
694 break; 695 break;
695 } 696 }
696 } 697 }
697 698
698 void TraceEvent::AppendAsJSON(std::string* out) const { 699 void TraceEvent::AppendAsJSON(
700 std::string* out,
701 const ArgumentFilterPredicate& argument_filter_predicate) const {
699 int64 time_int64 = timestamp_.ToInternalValue(); 702 int64 time_int64 = timestamp_.ToInternalValue();
700 int process_id = TraceLog::GetInstance()->process_id(); 703 int process_id = TraceLog::GetInstance()->process_id();
704 const char* category_group_name =
705 TraceLog::GetCategoryGroupName(category_group_enabled_);
706
701 // Category group checked at category creation time. 707 // Category group checked at category creation time.
702 DCHECK(!strchr(name_, '"')); 708 DCHECK(!strchr(name_, '"'));
703 StringAppendF(out, 709 StringAppendF(out, "{\"pid\":%i,\"tid\":%i,\"ts\":%" PRId64
704 "{\"pid\":%i,\"tid\":%i,\"ts\":%" PRId64 "," 710 ","
705 "\"ph\":\"%c\",\"cat\":\"%s\",\"name\":\"%s\",\"args\":{", 711 "\"ph\":\"%c\",\"cat\":\"%s\",\"name\":\"%s\",\"args\":{",
706 process_id, 712 process_id, thread_id_, time_int64, phase_, category_group_name,
707 thread_id_, 713 name_);
708 time_int64,
709 phase_,
710 TraceLog::GetCategoryGroupName(category_group_enabled_),
711 name_);
712 714
713 // Output argument names and values, stop at first NULL argument name. 715 // Output argument names and values, stop at first NULL argument name.
714 for (int i = 0; i < kTraceMaxNumArgs && arg_names_[i]; ++i) { 716 if (arg_names_[0]) {
715 if (i > 0) 717 bool allow_args = argument_filter_predicate.is_null() ||
716 *out += ","; 718 argument_filter_predicate.Run(category_group_name, name_);
717 *out += "\"";
718 *out += arg_names_[i];
719 *out += "\":";
720 719
721 if (arg_types_[i] == TRACE_VALUE_TYPE_CONVERTABLE) 720 if (allow_args) {
722 convertable_values_[i]->AppendAsTraceFormat(out); 721 for (int i = 0; i < kTraceMaxNumArgs && arg_names_[i]; ++i) {
723 else 722 if (i > 0)
724 AppendValueAsJSON(arg_types_[i], arg_values_[i], out); 723 *out += ",";
724 *out += "\"";
725 *out += arg_names_[i];
726 *out += "\":";
727
728 if (arg_types_[i] == TRACE_VALUE_TYPE_CONVERTABLE)
729 convertable_values_[i]->AppendAsTraceFormat(out);
730 else
731 AppendValueAsJSON(arg_types_[i], arg_values_[i], out);
732 }
733 } else {
734 *out += "\"stripped\":1";
735 }
725 } 736 }
737
726 *out += "}"; 738 *out += "}";
727 739
728 if (phase_ == TRACE_EVENT_PHASE_COMPLETE) { 740 if (phase_ == TRACE_EVENT_PHASE_COMPLETE) {
729 int64 duration = duration_.ToInternalValue(); 741 int64 duration = duration_.ToInternalValue();
730 if (duration != -1) 742 if (duration != -1)
731 StringAppendF(out, ",\"dur\":%" PRId64, duration); 743 StringAppendF(out, ",\"dur\":%" PRId64, duration);
732 if (!thread_timestamp_.is_null()) { 744 if (!thread_timestamp_.is_null()) {
733 int64 thread_duration = thread_duration_.ToInternalValue(); 745 int64 thread_duration = thread_duration_.ToInternalValue();
734 if (thread_duration != -1) 746 if (thread_duration != -1)
735 StringAppendF(out, ",\"tdur\":%" PRId64, thread_duration); 747 StringAppendF(out, ",\"tdur\":%" PRId64, thread_duration);
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 } else if (*iter == kRecordContinuously) { 1008 } else if (*iter == kRecordContinuously) {
997 record_mode = RECORD_CONTINUOUSLY; 1009 record_mode = RECORD_CONTINUOUSLY;
998 } else if (*iter == kTraceToConsole) { 1010 } else if (*iter == kTraceToConsole) {
999 record_mode = ECHO_TO_CONSOLE; 1011 record_mode = ECHO_TO_CONSOLE;
1000 } else if (*iter == kRecordAsMuchAsPossible) { 1012 } else if (*iter == kRecordAsMuchAsPossible) {
1001 record_mode = RECORD_AS_MUCH_AS_POSSIBLE; 1013 record_mode = RECORD_AS_MUCH_AS_POSSIBLE;
1002 } else if (*iter == kEnableSampling) { 1014 } else if (*iter == kEnableSampling) {
1003 enable_sampling = true; 1015 enable_sampling = true;
1004 } else if (*iter == kEnableSystrace) { 1016 } else if (*iter == kEnableSystrace) {
1005 enable_systrace = true; 1017 enable_systrace = true;
1018 } else if (*iter == kEnableArgumentFilter) {
1019 enable_argument_filter = true;
1006 } else { 1020 } else {
1007 return false; 1021 return false;
1008 } 1022 }
1009 } 1023 }
1010 return true; 1024 return true;
1011 } 1025 }
1012 1026
1013 std::string TraceOptions::ToString() const { 1027 std::string TraceOptions::ToString() const {
1014 std::string ret; 1028 std::string ret;
1015 switch (record_mode) { 1029 switch (record_mode) {
1016 case RECORD_UNTIL_FULL: 1030 case RECORD_UNTIL_FULL:
1017 ret = kRecordUntilFull; 1031 ret = kRecordUntilFull;
1018 break; 1032 break;
1019 case RECORD_CONTINUOUSLY: 1033 case RECORD_CONTINUOUSLY:
1020 ret = kRecordContinuously; 1034 ret = kRecordContinuously;
1021 break; 1035 break;
1022 case ECHO_TO_CONSOLE: 1036 case ECHO_TO_CONSOLE:
1023 ret = kTraceToConsole; 1037 ret = kTraceToConsole;
1024 break; 1038 break;
1025 case RECORD_AS_MUCH_AS_POSSIBLE: 1039 case RECORD_AS_MUCH_AS_POSSIBLE:
1026 ret = kRecordAsMuchAsPossible; 1040 ret = kRecordAsMuchAsPossible;
1027 break; 1041 break;
1028 default: 1042 default:
1029 NOTREACHED(); 1043 NOTREACHED();
1030 } 1044 }
1031 if (enable_sampling) 1045 if (enable_sampling)
1032 ret = ret + "," + kEnableSampling; 1046 ret = ret + "," + kEnableSampling;
1033 if (enable_systrace) 1047 if (enable_systrace)
1034 ret = ret + "," + kEnableSystrace; 1048 ret = ret + "," + kEnableSystrace;
1049 if (enable_argument_filter)
1050 ret = ret + "," + kEnableArgumentFilter;
1035 return ret; 1051 return ret;
1036 } 1052 }
1037 1053
1038 //////////////////////////////////////////////////////////////////////////////// 1054 ////////////////////////////////////////////////////////////////////////////////
1039 // 1055 //
1040 // TraceLog 1056 // TraceLog
1041 // 1057 //
1042 //////////////////////////////////////////////////////////////////////////////// 1058 ////////////////////////////////////////////////////////////////////////////////
1043 1059
1044 class TraceLog::ThreadLocalEventBuffer 1060 class TraceLog::ThreadLocalEventBuffer
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 // Notify observers outside the lock in case they trigger trace events. 1495 // Notify observers outside the lock in case they trigger trace events.
1480 for (size_t i = 0; i < observer_list.size(); ++i) 1496 for (size_t i = 0; i < observer_list.size(); ++i)
1481 observer_list[i]->OnTraceLogEnabled(); 1497 observer_list[i]->OnTraceLogEnabled();
1482 1498
1483 { 1499 {
1484 AutoLock lock(lock_); 1500 AutoLock lock(lock_);
1485 dispatching_to_observer_list_ = false; 1501 dispatching_to_observer_list_ = false;
1486 } 1502 }
1487 } 1503 }
1488 1504
1505 void TraceLog::SetArgumentFilterPredicate(
1506 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate) {
1507 AutoLock lock(lock_);
1508 DCHECK(!argument_filter_predicate.is_null());
1509 DCHECK(argument_filter_predicate_.is_null());
1510 argument_filter_predicate_ = argument_filter_predicate;
1511 }
1512
1489 TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceOptions( 1513 TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceOptions(
1490 const TraceOptions& options) { 1514 const TraceOptions& options) {
1491 InternalTraceOptions ret = 1515 InternalTraceOptions ret =
1492 options.enable_sampling ? kInternalEnableSampling : kInternalNone; 1516 options.enable_sampling ? kInternalEnableSampling : kInternalNone;
1517 if (options.enable_argument_filter)
1518 ret |= kInternalEnableArgumentFilter;
1493 switch (options.record_mode) { 1519 switch (options.record_mode) {
1494 case RECORD_UNTIL_FULL: 1520 case RECORD_UNTIL_FULL:
1495 return ret | kInternalRecordUntilFull; 1521 return ret | kInternalRecordUntilFull;
1496 case RECORD_CONTINUOUSLY: 1522 case RECORD_CONTINUOUSLY:
1497 return ret | kInternalRecordContinuously; 1523 return ret | kInternalRecordContinuously;
1498 case ECHO_TO_CONSOLE: 1524 case ECHO_TO_CONSOLE:
1499 return ret | kInternalEchoToConsole; 1525 return ret | kInternalEchoToConsole;
1500 case RECORD_AS_MUCH_AS_POSSIBLE: 1526 case RECORD_AS_MUCH_AS_POSSIBLE:
1501 return ret | kInternalRecordAsMuchAsPossible; 1527 return ret | kInternalRecordAsMuchAsPossible;
1502 } 1528 }
1503 NOTREACHED(); 1529 NOTREACHED();
1504 return kInternalNone; 1530 return kInternalNone;
1505 } 1531 }
1506 1532
1507 CategoryFilter TraceLog::GetCurrentCategoryFilter() { 1533 CategoryFilter TraceLog::GetCurrentCategoryFilter() {
1508 AutoLock lock(lock_); 1534 AutoLock lock(lock_);
1509 return category_filter_; 1535 return category_filter_;
1510 } 1536 }
1511 1537
1512 TraceOptions TraceLog::GetCurrentTraceOptions() const { 1538 TraceOptions TraceLog::GetCurrentTraceOptions() const {
1513 TraceOptions ret; 1539 TraceOptions ret;
1514 InternalTraceOptions option = trace_options(); 1540 InternalTraceOptions option = trace_options();
1515 ret.enable_sampling = (option & kInternalEnableSampling) != 0; 1541 ret.enable_sampling = (option & kInternalEnableSampling) != 0;
1542 ret.enable_argument_filter = (option & kInternalEnableArgumentFilter) != 0;
1516 if (option & kInternalRecordUntilFull) 1543 if (option & kInternalRecordUntilFull)
1517 ret.record_mode = RECORD_UNTIL_FULL; 1544 ret.record_mode = RECORD_UNTIL_FULL;
1518 else if (option & kInternalRecordContinuously) 1545 else if (option & kInternalRecordContinuously)
1519 ret.record_mode = RECORD_CONTINUOUSLY; 1546 ret.record_mode = RECORD_CONTINUOUSLY;
1520 else if (option & kInternalEchoToConsole) 1547 else if (option & kInternalEchoToConsole)
1521 ret.record_mode = ECHO_TO_CONSOLE; 1548 ret.record_mode = ECHO_TO_CONSOLE;
1522 else if (option & kInternalRecordAsMuchAsPossible) 1549 else if (option & kInternalRecordAsMuchAsPossible)
1523 ret.record_mode = RECORD_AS_MUCH_AS_POSSIBLE; 1550 ret.record_mode = RECORD_AS_MUCH_AS_POSSIBLE;
1524 else 1551 else
1525 NOTREACHED(); 1552 NOTREACHED();
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1749 TimeDelta::FromMilliseconds(kThreadFlushTimeoutMs)); 1776 TimeDelta::FromMilliseconds(kThreadFlushTimeoutMs));
1750 return; 1777 return;
1751 } 1778 }
1752 1779
1753 FinishFlush(generation); 1780 FinishFlush(generation);
1754 } 1781 }
1755 1782
1756 // Usually it runs on a different thread. 1783 // Usually it runs on a different thread.
1757 void TraceLog::ConvertTraceEventsToTraceFormat( 1784 void TraceLog::ConvertTraceEventsToTraceFormat(
1758 scoped_ptr<TraceBuffer> logged_events, 1785 scoped_ptr<TraceBuffer> logged_events,
1759 const TraceLog::OutputCallback& flush_output_callback) { 1786 const OutputCallback& flush_output_callback,
1760 1787 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate) {
1761 if (flush_output_callback.is_null()) 1788 if (flush_output_callback.is_null())
1762 return; 1789 return;
1763 1790
1764 // The callback need to be called at least once even if there is no events 1791 // The callback need to be called at least once even if there is no events
1765 // to let the caller know the completion of flush. 1792 // to let the caller know the completion of flush.
1766 bool has_more_events = true; 1793 bool has_more_events = true;
1767 do { 1794 do {
1768 scoped_refptr<RefCountedString> json_events_str_ptr = 1795 scoped_refptr<RefCountedString> json_events_str_ptr =
1769 new RefCountedString(); 1796 new RefCountedString();
1770 1797
1771 while (json_events_str_ptr->size() < kTraceEventBufferSizeInBytes) { 1798 while (json_events_str_ptr->size() < kTraceEventBufferSizeInBytes) {
1772 const TraceBufferChunk* chunk = logged_events->NextChunk(); 1799 const TraceBufferChunk* chunk = logged_events->NextChunk();
1773 has_more_events = chunk != NULL; 1800 has_more_events = chunk != NULL;
1774 if (!chunk) 1801 if (!chunk)
1775 break; 1802 break;
1776 for (size_t j = 0; j < chunk->size(); ++j) { 1803 for (size_t j = 0; j < chunk->size(); ++j) {
1777 if (json_events_str_ptr->size()) 1804 if (json_events_str_ptr->size())
1778 json_events_str_ptr->data().append(",\n"); 1805 json_events_str_ptr->data().append(",\n");
1779 chunk->GetEventAt(j)->AppendAsJSON(&(json_events_str_ptr->data())); 1806 chunk->GetEventAt(j)->AppendAsJSON(&(json_events_str_ptr->data()),
1807 argument_filter_predicate);
1780 } 1808 }
1781 } 1809 }
1782 flush_output_callback.Run(json_events_str_ptr, has_more_events); 1810 flush_output_callback.Run(json_events_str_ptr, has_more_events);
1783 } while (has_more_events); 1811 } while (has_more_events);
1784 } 1812 }
1785 1813
1786 void TraceLog::FinishFlush(int generation) { 1814 void TraceLog::FinishFlush(int generation) {
1787 scoped_ptr<TraceBuffer> previous_logged_events; 1815 scoped_ptr<TraceBuffer> previous_logged_events;
1788 OutputCallback flush_output_callback; 1816 OutputCallback flush_output_callback;
1817 TraceEvent::ArgumentFilterPredicate argument_filter_predicate;
1789 1818
1790 if (!CheckGeneration(generation)) 1819 if (!CheckGeneration(generation))
1791 return; 1820 return;
1792 1821
1793 { 1822 {
1794 AutoLock lock(lock_); 1823 AutoLock lock(lock_);
1795 1824
1796 previous_logged_events.swap(logged_events_); 1825 previous_logged_events.swap(logged_events_);
1797 UseNextTraceBuffer(); 1826 UseNextTraceBuffer();
1798 thread_message_loops_.clear(); 1827 thread_message_loops_.clear();
1799 1828
1800 flush_task_runner_ = NULL; 1829 flush_task_runner_ = NULL;
1801 flush_output_callback = flush_output_callback_; 1830 flush_output_callback = flush_output_callback_;
1802 flush_output_callback_.Reset(); 1831 flush_output_callback_.Reset();
1832
1833 if (trace_options() & kInternalEnableArgumentFilter) {
1834 CHECK(!argument_filter_predicate_.is_null());
1835 argument_filter_predicate = argument_filter_predicate_;
1836 }
1803 } 1837 }
1804 1838
1805 if (use_worker_thread_ && 1839 if (use_worker_thread_ &&
1806 WorkerPool::PostTask( 1840 WorkerPool::PostTask(
1807 FROM_HERE, 1841 FROM_HERE, Bind(&TraceLog::ConvertTraceEventsToTraceFormat,
1808 Bind(&TraceLog::ConvertTraceEventsToTraceFormat, 1842 Passed(&previous_logged_events),
1809 Passed(&previous_logged_events), 1843 flush_output_callback, argument_filter_predicate),
1810 flush_output_callback),
1811 true)) { 1844 true)) {
1812 return; 1845 return;
1813 } 1846 }
1814 1847
1815 ConvertTraceEventsToTraceFormat(previous_logged_events.Pass(), 1848 ConvertTraceEventsToTraceFormat(previous_logged_events.Pass(),
1816 flush_output_callback); 1849 flush_output_callback,
1850 argument_filter_predicate);
1817 } 1851 }
1818 1852
1819 // Run in each thread holding a local event buffer. 1853 // Run in each thread holding a local event buffer.
1820 void TraceLog::FlushCurrentThread(int generation) { 1854 void TraceLog::FlushCurrentThread(int generation) {
1821 { 1855 {
1822 AutoLock lock(lock_); 1856 AutoLock lock(lock_);
1823 if (!CheckGeneration(generation) || !flush_task_runner_) { 1857 if (!CheckGeneration(generation) || !flush_task_runner_) {
1824 // This is late. The corresponding flush has finished. 1858 // This is late. The corresponding flush has finished.
1825 return; 1859 return;
1826 } 1860 }
(...skipping 29 matching lines...) Expand all
1856 it != thread_message_loops_.end(); ++it) { 1890 it != thread_message_loops_.end(); ++it) {
1857 LOG(WARNING) << "Thread: " << (*it)->thread_name(); 1891 LOG(WARNING) << "Thread: " << (*it)->thread_name();
1858 } 1892 }
1859 } 1893 }
1860 FinishFlush(generation); 1894 FinishFlush(generation);
1861 } 1895 }
1862 1896
1863 void TraceLog::FlushButLeaveBufferIntact( 1897 void TraceLog::FlushButLeaveBufferIntact(
1864 const TraceLog::OutputCallback& flush_output_callback) { 1898 const TraceLog::OutputCallback& flush_output_callback) {
1865 scoped_ptr<TraceBuffer> previous_logged_events; 1899 scoped_ptr<TraceBuffer> previous_logged_events;
1900 TraceEvent::ArgumentFilterPredicate argument_filter_predicate;
1866 { 1901 {
1867 AutoLock lock(lock_); 1902 AutoLock lock(lock_);
1868 AddMetadataEventsWhileLocked(); 1903 AddMetadataEventsWhileLocked();
1869 if (thread_shared_chunk_) { 1904 if (thread_shared_chunk_) {
1870 // Return the chunk to the main buffer to flush the sampling data. 1905 // Return the chunk to the main buffer to flush the sampling data.
1871 logged_events_->ReturnChunk(thread_shared_chunk_index_, 1906 logged_events_->ReturnChunk(thread_shared_chunk_index_,
1872 thread_shared_chunk_.Pass()); 1907 thread_shared_chunk_.Pass());
1873 } 1908 }
1874 previous_logged_events = logged_events_->CloneForIteration().Pass(); 1909 previous_logged_events = logged_events_->CloneForIteration().Pass();
1910
1911 if (trace_options() & kInternalEnableArgumentFilter) {
1912 CHECK(!argument_filter_predicate_.is_null());
1913 argument_filter_predicate = argument_filter_predicate_;
1914 }
1875 } // release lock 1915 } // release lock
1876 1916
1877 ConvertTraceEventsToTraceFormat(previous_logged_events.Pass(), 1917 ConvertTraceEventsToTraceFormat(previous_logged_events.Pass(),
1878 flush_output_callback); 1918 flush_output_callback,
1919 argument_filter_predicate);
1879 } 1920 }
1880 1921
1881 void TraceLog::UseNextTraceBuffer() { 1922 void TraceLog::UseNextTraceBuffer() {
1882 logged_events_.reset(CreateTraceBuffer()); 1923 logged_events_.reset(CreateTraceBuffer());
1883 subtle::NoBarrier_AtomicIncrement(&generation_, 1); 1924 subtle::NoBarrier_AtomicIncrement(&generation_, 1);
1884 thread_shared_chunk_.reset(); 1925 thread_shared_chunk_.reset();
1885 thread_shared_chunk_index_ = 0; 1926 thread_shared_chunk_index_ = 0;
1886 } 1927 }
1887 1928
1888 TraceEventHandle TraceLog::AddTraceEvent( 1929 TraceEventHandle TraceLog::AddTraceEvent(
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after
2641 } 2682 }
2642 2683
2643 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { 2684 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() {
2644 if (*category_group_enabled_) { 2685 if (*category_group_enabled_) {
2645 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, 2686 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_,
2646 name_, event_handle_); 2687 name_, event_handle_);
2647 } 2688 }
2648 } 2689 }
2649 2690
2650 } // namespace trace_event_internal 2691 } // namespace trace_event_internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698