1 #ifndef SRC_TRACING_NODE_TRACE_BUFFER_H_ 2 #define SRC_TRACING_NODE_TRACE_BUFFER_H_ 6 #include "libplatform/v8-tracing.h" 13 using v8::platform::tracing::TraceBuffer;
14 using v8::platform::tracing::TraceBufferChunk;
15 using v8::platform::tracing::TraceObject;
18 class NodeTraceBuffer;
27 void Flush(
bool blocking);
29 return total_chunks_ == max_chunks_ && chunks_[total_chunks_ - 1]->IsFull();
36 uint64_t MakeHandle(
size_t chunk_index, uint32_t chunk_seq,
37 size_t event_index)
const;
38 void ExtractHandle(uint64_t handle, uint32_t* buffer_id,
size_t* chunk_index,
39 uint32_t* chunk_seq,
size_t* event_index)
const;
40 size_t Capacity()
const {
return max_chunks_ * TraceBufferChunk::kChunkSize; }
46 std::vector<std::unique_ptr<TraceBufferChunk>> chunks_;
47 size_t total_chunks_ = 0;
48 uint32_t current_chunk_seq_ = 1;
55 uv_loop_t* tracing_loop);
60 bool Flush()
override;
62 static const size_t kBufferChunks = 1024;
65 bool TryLoadAvailableBuffer();
66 static void NonBlockingFlushSignalCb(uv_async_t* signal);
67 static void ExitSignalCb(uv_async_t* signal);
69 uv_loop_t* tracing_loop_;
70 uv_async_t flush_signal_;
71 uv_async_t exit_signal_;
77 std::unique_ptr<NodeTraceWriter> trace_writer_;
78 std::atomic<InternalTraceBuffer*> current_buf_;
86 #endif // SRC_TRACING_NODE_TRACE_BUFFER_H_
void Flush(bool blocking)
InternalTraceBuffer(size_t max_chunks, uint32_t id, NodeTraceWriter *trace_writer)
TraceObject * GetEventByHandle(uint64_t handle)
TraceObject * AddTraceEvent(uint64_t *handle)