diff options
Diffstat (limited to 'deps/v8/src/libplatform/tracing/trace-buffer.h')
-rw-r--r-- | deps/v8/src/libplatform/tracing/trace-buffer.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/deps/v8/src/libplatform/tracing/trace-buffer.h b/deps/v8/src/libplatform/tracing/trace-buffer.h new file mode 100644 index 0000000000..16f3b2a12e --- /dev/null +++ b/deps/v8/src/libplatform/tracing/trace-buffer.h @@ -0,0 +1,48 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SRC_LIBPLATFORM_TRACING_TRACE_BUFFER_H_ +#define SRC_LIBPLATFORM_TRACING_TRACE_BUFFER_H_ + +#include <memory> +#include <vector> + +#include "include/libplatform/v8-tracing.h" +#include "src/base/platform/mutex.h" + +namespace v8 { +namespace platform { +namespace tracing { + +class TraceBufferRingBuffer : public TraceBuffer { + public: + TraceBufferRingBuffer(size_t max_chunks, TraceWriter* trace_writer); + ~TraceBufferRingBuffer(); + + TraceObject* AddTraceEvent(uint64_t* handle) override; + TraceObject* GetEventByHandle(uint64_t handle) override; + bool Flush() override; + + private: + uint64_t MakeHandle(size_t chunk_index, uint32_t chunk_seq, + size_t event_index) const; + void ExtractHandle(uint64_t handle, size_t* chunk_index, uint32_t* chunk_seq, + size_t* event_index) const; + size_t Capacity() const { return max_chunks_ * TraceBufferChunk::kChunkSize; } + size_t NextChunkIndex(size_t index) const; + + mutable base::Mutex mutex_; + size_t max_chunks_; + std::unique_ptr<TraceWriter> trace_writer_; + std::vector<std::unique_ptr<TraceBufferChunk>> chunks_; + size_t chunk_index_; + bool is_empty_ = true; + uint32_t current_chunk_seq_ = 1; +}; + +} // namespace tracing +} // namespace platform +} // namespace v8 + +#endif // SRC_LIBPLATFORM_TRACING_TRACE_BUFFER_H_ |