summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorwangxianzhu <wangxianzhu@chromium.org>2015-08-07 17:55:56 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-08 00:56:26 +0000
commit0ba996473f611b4557ceb5162501dd0251f2d236 (patch)
treeabfaed173595cc36f35291e277905dc13696236e /base
parentb48a20807c9cb06a32de4b6dcf0164a3b6a57d31 (diff)
downloadchromium_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.h4
-rw-r--r--base/trace_event/trace_event_impl.h7
-rw-r--r--base/trace_event/trace_log.cc12
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);