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

Side by Side Diff: components/tracing/core/trace_buffer_writer.cc

Issue 2281903002: Tracing V2: Trace buffer writer uses proto. (Closed)
Patch Set: nit Created 4 years, 3 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
« no previous file with comments | « components/tracing/BUILD.gn ('k') | components/tracing/proto/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "components/tracing/core/trace_buffer_writer.h" 5 #include "components/tracing/core/trace_buffer_writer.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "components/tracing/core/proto_utils.h" 9 #include "components/tracing/core/proto_utils.h"
10 #include "components/tracing/proto/events_chunk.pbzero.h"
10 11
11 namespace tracing { 12 namespace tracing {
12 namespace v2 { 13 namespace v2 {
13 14
14 namespace { 15 namespace {
15 16
16 // TODO(primiano) remove this in next CLs. This should just be taken from the 17 using ChunkProto = pbzero::tracing::proto::EventsChunk;
17 // C++ class autogenerated from events_chunk.proto (crbug.com/608721).
18 struct ChunkProto {
19 enum : uint32_t {
20 kWriterIdFieldNumber = 1,
21 kSeqIdInStreamFieldNumber = 2,
22 kEventsFieldNumber = 3,
23 kFirstEventContinuesFromPrevChunkFieldNumber = 4,
24 kLastEventContinuesOnNextChunkFieldNumber = 5
25 };
26 };
27 18
28 const size_t kEventPreambleSize = 1 + proto::kMessageLengthFieldSize; 19 const size_t kEventPreambleSize = 1 + proto::kMessageLengthFieldSize;
29 20
30 // TODO(primiano): replace 16 with a more reasonable size, that is, the size 21 // TODO(primiano): replace 16 with a more reasonable size, that is, the size
31 // of a simple trace event with no args. 22 // of a simple trace event with no args.
32 const size_t kMinEventSize = 16; 23 const size_t kMinEventSize = 16;
33 24
34 } // namespace 25 } // namespace
35 26
36 TraceBufferWriter::TraceBufferWriter(TraceRingBuffer* trace_ring_buffer, 27 TraceBufferWriter::TraceBufferWriter(TraceRingBuffer* trace_ring_buffer,
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 // events_chunk.proto cannot be used here because that would re-enter this 144 // events_chunk.proto cannot be used here because that would re-enter this
154 // class and make this code extremely hard to reason about. 145 // class and make this code extremely hard to reason about.
155 uint8_t* chunk_proto = new_chunk->payload(); 146 uint8_t* chunk_proto = new_chunk->payload();
156 147
157 proto::StaticAssertSingleBytePreamble<ChunkProto::kWriterIdFieldNumber>(); 148 proto::StaticAssertSingleBytePreamble<ChunkProto::kWriterIdFieldNumber>();
158 *chunk_proto++ = static_cast<uint8_t>( 149 *chunk_proto++ = static_cast<uint8_t>(
159 proto::MakeTagVarInt(ChunkProto::kWriterIdFieldNumber)); 150 proto::MakeTagVarInt(ChunkProto::kWriterIdFieldNumber));
160 chunk_proto = proto::WriteVarInt(writer_id_, chunk_proto); 151 chunk_proto = proto::WriteVarInt(writer_id_, chunk_proto);
161 152
162 proto::StaticAssertSingleBytePreamble< 153 proto::StaticAssertSingleBytePreamble<
163 ChunkProto::kSeqIdInStreamFieldNumber>(); 154 ChunkProto::kSeqIdFieldNumber>();
164 *chunk_proto++ = static_cast<uint8_t>( 155 *chunk_proto++ = static_cast<uint8_t>(
165 proto::MakeTagVarInt(ChunkProto::kSeqIdInStreamFieldNumber)); 156 proto::MakeTagVarInt(ChunkProto::kSeqIdFieldNumber));
166 chunk_proto = proto::WriteVarInt(chunk_seq_id_, chunk_proto); 157 chunk_proto = proto::WriteVarInt(chunk_seq_id_, chunk_proto);
167 158
168 if (is_fragmenting_event) { 159 if (is_fragmenting_event) {
169 proto::StaticAssertSingleBytePreamble< 160 proto::StaticAssertSingleBytePreamble<
170 ChunkProto::kFirstEventContinuesFromPrevChunkFieldNumber>(); 161 ChunkProto::kFirstEventContinuesFromPrevChunkFieldNumber>();
171 *chunk_proto++ = static_cast<uint8_t>(proto::MakeTagVarInt( 162 *chunk_proto++ = static_cast<uint8_t>(proto::MakeTagVarInt(
172 ChunkProto::kFirstEventContinuesFromPrevChunkFieldNumber)); 163 ChunkProto::kFirstEventContinuesFromPrevChunkFieldNumber));
173 *chunk_proto++ = 1; // = true. 164 *chunk_proto++ = 1; // = true.
174 } 165 }
175 166
(...skipping 28 matching lines...) Expand all
204 195
205 void TraceBufferWriter::Flush() { 196 void TraceBufferWriter::Flush() {
206 FinalizeCurrentEvent(); 197 FinalizeCurrentEvent();
207 FinalizeCurrentChunk(false /* is_fragmenting_event */); 198 FinalizeCurrentChunk(false /* is_fragmenting_event */);
208 trace_ring_buffer_->ReturnChunk(chunk_); 199 trace_ring_buffer_->ReturnChunk(chunk_);
209 chunk_ = nullptr; 200 chunk_ = nullptr;
210 } 201 }
211 202
212 } // namespace v2 203 } // namespace v2
213 } // namespace tracing 204 } // namespace tracing
OLDNEW
« no previous file with comments | « components/tracing/BUILD.gn ('k') | components/tracing/proto/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698