| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_log.h" | 5 #include "base/trace_event/trace_log.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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 BASE_EXPORT TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3]; | 51 BASE_EXPORT TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3]; |
| 52 | 52 |
| 53 namespace base { | 53 namespace base { |
| 54 namespace trace_event { | 54 namespace trace_event { |
| 55 | 55 |
| 56 namespace { | 56 namespace { |
| 57 | 57 |
| 58 // Controls the number of trace events we will buffer in-memory | 58 // Controls the number of trace events we will buffer in-memory |
| 59 // before throwing them away. | 59 // before throwing them away. |
| 60 const size_t kTraceBufferChunkSize = TraceBufferChunk::kTraceBufferChunkSize; | 60 const size_t kTraceBufferChunkSize = TraceBufferChunk::kTraceBufferChunkSize; |
| 61 |
| 61 const size_t kTraceEventVectorBigBufferChunks = | 62 const size_t kTraceEventVectorBigBufferChunks = |
| 62 512000000 / kTraceBufferChunkSize; | 63 512000000 / kTraceBufferChunkSize; |
| 64 static_assert( |
| 65 kTraceEventVectorBigBufferChunks <= TraceBufferChunk::kMaxChunkIndex, |
| 66 "Too many big buffer chunks"); |
| 63 const size_t kTraceEventVectorBufferChunks = 256000 / kTraceBufferChunkSize; | 67 const size_t kTraceEventVectorBufferChunks = 256000 / kTraceBufferChunkSize; |
| 68 static_assert( |
| 69 kTraceEventVectorBufferChunks <= TraceBufferChunk::kMaxChunkIndex, |
| 70 "Too many vector buffer chunks"); |
| 64 const size_t kTraceEventRingBufferChunks = kTraceEventVectorBufferChunks / 4; | 71 const size_t kTraceEventRingBufferChunks = kTraceEventVectorBufferChunks / 4; |
| 72 |
| 65 // Can store results for 30 seconds with 1 ms sampling interval. | 73 // Can store results for 30 seconds with 1 ms sampling interval. |
| 66 const size_t kMonitorTraceEventBufferChunks = 30000 / kTraceBufferChunkSize; | 74 const size_t kMonitorTraceEventBufferChunks = 30000 / kTraceBufferChunkSize; |
| 67 // ECHO_TO_CONSOLE needs a small buffer to hold the unfinished COMPLETE events. | 75 // ECHO_TO_CONSOLE needs a small buffer to hold the unfinished COMPLETE events. |
| 68 const size_t kEchoToConsoleTraceEventBufferChunks = 256; | 76 const size_t kEchoToConsoleTraceEventBufferChunks = 256; |
| 69 | 77 |
| 70 // The overhead of TraceEvent above this threshold will be reported in the | 78 // The overhead of TraceEvent above this threshold will be reported in the |
| 71 // trace. | 79 // trace. |
| 72 const int kOverheadReportThresholdInMicroseconds = 50; | 80 const int kOverheadReportThresholdInMicroseconds = 50; |
| 73 const size_t kTraceEventBufferSizeInBytes = 100 * 1024; | 81 const size_t kTraceEventBufferSizeInBytes = 100 * 1024; |
| 74 const int kThreadFlushTimeoutMs = 3000; | 82 const int kThreadFlushTimeoutMs = 3000; |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 DISALLOW_COPY_AND_ASSIGN(AutoThreadLocalBoolean); | 168 DISALLOW_COPY_AND_ASSIGN(AutoThreadLocalBoolean); |
| 161 }; | 169 }; |
| 162 | 170 |
| 163 // Use this function instead of TraceEventHandle constructor to keep the | 171 // Use this function instead of TraceEventHandle constructor to keep the |
| 164 // overhead of ScopedTracer (trace_event.h) constructor minimum. | 172 // overhead of ScopedTracer (trace_event.h) constructor minimum. |
| 165 void MakeHandle(uint32 chunk_seq, | 173 void MakeHandle(uint32 chunk_seq, |
| 166 size_t chunk_index, | 174 size_t chunk_index, |
| 167 size_t event_index, | 175 size_t event_index, |
| 168 TraceEventHandle* handle) { | 176 TraceEventHandle* handle) { |
| 169 DCHECK(chunk_seq); | 177 DCHECK(chunk_seq); |
| 170 DCHECK(chunk_index < (1u << 16)); | 178 DCHECK(chunk_index <= TraceBufferChunk::kMaxChunkIndex); |
| 171 DCHECK(event_index < (1u << 16)); | 179 DCHECK(event_index < TraceBufferChunk::kTraceBufferChunkSize); |
| 172 handle->chunk_seq = chunk_seq; | 180 handle->chunk_seq = chunk_seq; |
| 173 handle->chunk_index = static_cast<uint16>(chunk_index); | 181 handle->chunk_index = static_cast<uint16>(chunk_index); |
| 174 handle->event_index = static_cast<uint16>(event_index); | 182 handle->event_index = static_cast<uint16>(event_index); |
| 175 } | 183 } |
| 176 | 184 |
| 177 } // namespace | 185 } // namespace |
| 178 | 186 |
| 179 // A helper class that allows the lock to be acquired in the middle of the scope | 187 // A helper class that allows the lock to be acquired in the middle of the scope |
| 180 // and unlocks at the end of scope if locked. | 188 // and unlocks at the end of scope if locked. |
| 181 class TraceLog::OptionalAutoLock { | 189 class TraceLog::OptionalAutoLock { |
| (...skipping 1556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1738 } | 1746 } |
| 1739 | 1747 |
| 1740 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { | 1748 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { |
| 1741 if (*category_group_enabled_) { | 1749 if (*category_group_enabled_) { |
| 1742 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, name_, | 1750 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, name_, |
| 1743 event_handle_); | 1751 event_handle_); |
| 1744 } | 1752 } |
| 1745 } | 1753 } |
| 1746 | 1754 |
| 1747 } // namespace trace_event_internal | 1755 } // namespace trace_event_internal |
| OLD | NEW |