diff options
Diffstat (limited to 'src/tracing/core/trace_buffer.cc')
-rw-r--r-- | src/tracing/core/trace_buffer.cc | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/tracing/core/trace_buffer.cc b/src/tracing/core/trace_buffer.cc index ce6fa3492..22278706d 100644 --- a/src/tracing/core/trace_buffer.cc +++ b/src/tracing/core/trace_buffer.cc @@ -84,8 +84,9 @@ TraceBuffer::~TraceBuffer() = default; bool TraceBuffer::Initialize(size_t size) { static_assert( - SharedMemoryABI::kMinPageSize % sizeof(ChunkRecord) == 0, + base::kPageSize % sizeof(ChunkRecord) == 0, "sizeof(ChunkRecord) must be an integer divider of a page size"); + PERFETTO_CHECK(size % base::kPageSize == 0); data_ = base::PagedMemory::Allocate( size, base::PagedMemory::kMayFail | base::PagedMemory::kDontCommit); if (!data_.IsValid()) { @@ -120,7 +121,7 @@ void TraceBuffer::CopyChunkUntrusted(ProducerID producer_id_trusted, base::AlignUp<sizeof(ChunkRecord)>(size + sizeof(ChunkRecord)); if (PERFETTO_UNLIKELY(record_size > max_chunk_size_)) { stats_.set_abi_violations(stats_.abi_violations() + 1); - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_); + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_); return; } @@ -171,18 +172,7 @@ void TraceBuffer::CopyChunkUntrusted(ProducerID producer_id_trusted, prev->num_fragments > num_fragments || (prev->flags & chunk_flags) != prev->flags)) { stats_.set_abi_violations(stats_.abi_violations() + 1); - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_); - return; - } - - // If this chunk was previously copied with the same number of fragments and - // the number didn't change, there's no need to copy it again. If the - // previous chunk was complete already, this should always be the case. - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_ || - !record_meta->is_complete() || - (chunk_complete && prev->num_fragments == num_fragments)); - if (prev->num_fragments == num_fragments) { - TRACE_BUFFER_DLOG(" skipping recommit of identical chunk"); + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_); return; } @@ -199,7 +189,18 @@ void TraceBuffer::CopyChunkUntrusted(ProducerID producer_id_trusted, if (subsequent_it != index_.end() && subsequent_it->second.num_fragments_read > 0) { stats_.set_abi_violations(stats_.abi_violations() + 1); - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_); + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_); + return; + } + + // If this chunk was previously copied with the same number of fragments and + // the number didn't change, there's no need to copy it again. If the + // previous chunk was complete already, this should always be the case. + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_ || + !record_meta->is_complete() || + (chunk_complete && prev->num_fragments == num_fragments)); + if (prev->num_fragments == num_fragments) { + TRACE_BUFFER_DLOG(" skipping recommit of identical chunk"); return; } @@ -207,7 +208,7 @@ void TraceBuffer::CopyChunkUntrusted(ProducerID producer_id_trusted, if (record_meta->num_fragments_read > prev->num_fragments) { PERFETTO_ELOG( "TraceBuffer read too many fragments from an incomplete chunk"); - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_); + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_); return; } @@ -825,7 +826,7 @@ TraceBuffer::ReadPacketResult TraceBuffer::ReadNextPacketInChunk( // The producer has a bug or is malicious and did declare that the chunk // contains more packets beyond its boundaries. stats_.set_abi_violations(stats_.abi_violations() + 1); - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_); + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_); chunk_meta->cur_fragment_offset = 0; chunk_meta->num_fragments_read = chunk_meta->num_fragments; if (PERFETTO_LIKELY(chunk_meta->is_complete())) { @@ -855,7 +856,7 @@ TraceBuffer::ReadPacketResult TraceBuffer::ReadNextPacketInChunk( // R). if (packet_size != SharedMemoryABI::kPacketSizeDropPacket) { stats_.set_abi_violations(stats_.abi_violations() + 1); - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_); + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_); } else { stats_.set_trace_writer_packet_loss(stats_.trace_writer_packet_loss() + 1); @@ -883,7 +884,7 @@ TraceBuffer::ReadPacketResult TraceBuffer::ReadNextPacketInChunk( // We have at least one more packet to parse. It should be within the chunk. if (chunk_meta->cur_fragment_offset + sizeof(ChunkRecord) >= chunk_meta->chunk_record->size) { - PERFETTO_DCHECK(suppress_client_dchecks_for_testing_); + PERFETTO_DCHECK(suppress_sanity_dchecks_for_testing_); } } |