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

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

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

Powered by Google App Engine
This is Rietveld 408576698