diff options
author | wangxianzhu <wangxianzhu@chromium.org> | 2015-08-07 17:55:56 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-08 00:56:26 +0000 |
commit | 0ba996473f611b4557ceb5162501dd0251f2d236 (patch) | |
tree | abfaed173595cc36f35291e277905dc13696236e /base | |
parent | b48a20807c9cb06a32de4b6dcf0164a3b6a57d31 (diff) | |
download | chromium_src-0ba996473f611b4557ceb5162501dd0251f2d236.zip chromium_src-0ba996473f611b4557ceb5162501dd0251f2d236.tar.gz chromium_src-0ba996473f611b4557ceb5162501dd0251f2d236.tar.bz2 |
Increase number of bits for trace buffer chunk index
The buffer for "record-as-much-as-possible" mode contains too many
chunks whose chunk indices to be contained in the 16 bit chunk index.
Increase chunk index to 26 bits.
BUG=516056
R=brianderson@chromium.org
TBR=dsinclair@chromium.org,nduca@chromium.org
TEST=Compile time static_asserts
Review URL: https://codereview.chromium.org/1276163003
Cr-Commit-Position: refs/heads/master@{#342495}
Diffstat (limited to 'base')
-rw-r--r-- | base/trace_event/trace_buffer.h | 4 | ||||
-rw-r--r-- | base/trace_event/trace_event_impl.h | 7 | ||||
-rw-r--r-- | base/trace_event/trace_log.cc | 12 |
3 files changed, 19 insertions, 4 deletions
diff --git a/base/trace_event/trace_buffer.h b/base/trace_event/trace_buffer.h index 4074120..d54bd74 100644 --- a/base/trace_event/trace_buffer.h +++ b/base/trace_event/trace_buffer.h @@ -40,6 +40,10 @@ class BASE_EXPORT TraceBufferChunk { void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead); + // These values must be kept consistent with the numbers of bits of + // chunk_index and event_index fields in TraceEventHandle + // (in trace_event_impl.h). + static const size_t kMaxChunkIndex = (1u << 26) - 1; static const size_t kTraceBufferChunkSize = 64; private: diff --git a/base/trace_event/trace_event_impl.h b/base/trace_event/trace_event_impl.h index 8e9b3b0..0d66bb2 100644 --- a/base/trace_event/trace_event_impl.h +++ b/base/trace_event/trace_event_impl.h @@ -66,8 +66,11 @@ const int kTraceMaxNumArgs = 2; struct TraceEventHandle { uint32 chunk_seq; - uint16 chunk_index; - uint16 event_index; + // These numbers of bits must be kept consistent with + // TraceBufferChunk::kMaxTrunkIndex and + // TraceBufferChunk::kTraceBufferChunkSize (in trace_buffer.h). + unsigned chunk_index : 26; + unsigned event_index : 6; }; class BASE_EXPORT TraceEvent { diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc index 56c01c1..8eb46c5 100644 --- a/base/trace_event/trace_log.cc +++ b/base/trace_event/trace_log.cc @@ -58,10 +58,18 @@ namespace { // Controls the number of trace events we will buffer in-memory // before throwing them away. const size_t kTraceBufferChunkSize = TraceBufferChunk::kTraceBufferChunkSize; + const size_t kTraceEventVectorBigBufferChunks = 512000000 / kTraceBufferChunkSize; +static_assert( + kTraceEventVectorBigBufferChunks <= TraceBufferChunk::kMaxChunkIndex, + "Too many big buffer chunks"); const size_t kTraceEventVectorBufferChunks = 256000 / kTraceBufferChunkSize; +static_assert( + kTraceEventVectorBufferChunks <= TraceBufferChunk::kMaxChunkIndex, + "Too many vector buffer chunks"); const size_t kTraceEventRingBufferChunks = kTraceEventVectorBufferChunks / 4; + // Can store results for 30 seconds with 1 ms sampling interval. const size_t kMonitorTraceEventBufferChunks = 30000 / kTraceBufferChunkSize; // ECHO_TO_CONSOLE needs a small buffer to hold the unfinished COMPLETE events. @@ -167,8 +175,8 @@ void MakeHandle(uint32 chunk_seq, size_t event_index, TraceEventHandle* handle) { DCHECK(chunk_seq); - DCHECK(chunk_index < (1u << 16)); - DCHECK(event_index < (1u << 16)); + DCHECK(chunk_index <= TraceBufferChunk::kMaxChunkIndex); + DCHECK(event_index < TraceBufferChunk::kTraceBufferChunkSize); handle->chunk_seq = chunk_seq; handle->chunk_index = static_cast<uint16>(chunk_index); handle->event_index = static_cast<uint16>(event_index); |