Index: runtime/vm/trace_buffer.cc |
diff --git a/runtime/vm/trace_buffer.cc b/runtime/vm/trace_buffer.cc |
deleted file mode 100644 |
index 2022e49a84469ef6ab220c91b12971e899f32589..0000000000000000000000000000000000000000 |
--- a/runtime/vm/trace_buffer.cc |
+++ /dev/null |
@@ -1,136 +0,0 @@ |
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-#include "vm/isolate.h" |
-#include "vm/json_stream.h" |
-#include "vm/object.h" |
-#include "vm/os.h" |
-#include "vm/trace_buffer.h" |
- |
-namespace dart { |
- |
-TraceBuffer::TraceBuffer(Isolate* isolate, intptr_t capacity) |
- : isolate_(isolate), ring_capacity_(capacity) { |
- ring_cursor_ = 0; |
- ring_ = reinterpret_cast<TraceBufferEntry*>( |
- calloc(ring_capacity_, sizeof(TraceBufferEntry))); // NOLINT |
-} |
- |
- |
-TraceBuffer::~TraceBuffer() { |
- ASSERT(ring_ != NULL); |
- Clear(); |
- free(ring_); |
- if (isolate_ != NULL) { |
- isolate_->set_trace_buffer(NULL); |
- isolate_ = NULL; |
- } |
-} |
- |
- |
-void TraceBuffer::Init(Isolate* isolate, intptr_t capacity) { |
- TraceBuffer* trace_buffer = new TraceBuffer(isolate, capacity); |
- isolate->set_trace_buffer(trace_buffer); |
-} |
- |
- |
-void TraceBuffer::Clear() { |
- for (intptr_t i = 0; i < ring_capacity_; i++) { |
- TraceBufferEntry& entry = ring_[i]; |
- entry.micros = 0; |
- free(entry.message); |
- entry.message = NULL; |
- entry.message_is_escaped = false; |
- } |
- ring_cursor_ = 0; |
-} |
- |
- |
-void TraceBuffer::Fill(TraceBufferEntry* entry, int64_t micros, |
- char* msg, bool msg_is_escaped) { |
- if (entry->message != NULL) { |
- // Recycle TraceBufferEntry. |
- free(entry->message); |
- } |
- entry->message = msg; |
- entry->message_is_escaped = msg_is_escaped; |
- entry->micros = micros; |
-} |
- |
- |
-void TraceBuffer::AppendTrace(int64_t micros, char* msg, bool msg_is_escaped) { |
- const intptr_t index = ring_cursor_; |
- TraceBufferEntry* trace_entry = &ring_[index]; |
- Fill(trace_entry, micros, msg, msg_is_escaped); |
- ring_cursor_ = RingIndex(ring_cursor_ + 1); |
-} |
- |
- |
-void TraceBuffer::Trace(int64_t micros, const char* msg, bool msg_is_escaped) { |
- ASSERT(msg != NULL); |
- char* message_copy = strdup(msg); |
- AppendTrace(micros, message_copy, msg_is_escaped); |
-} |
- |
- |
-void TraceBuffer::Trace(const char* msg, bool msg_is_escaped) { |
- Trace(OS::GetCurrentTimeMicros(), msg, msg_is_escaped); |
-} |
- |
- |
-void TraceBuffer::TraceF(const char* format, ...) { |
- const int64_t micros = OS::GetCurrentTimeMicros(); |
- va_list args; |
- va_start(args, format); |
- const intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
- va_end(args); |
- char* p = reinterpret_cast<char*>(malloc(len+1)); |
- va_start(args, format); |
- const intptr_t len2 = OS::VSNPrint(p, len+1, format, args); |
- va_end(args); |
- ASSERT(len == len2); |
- AppendTrace(micros, p); |
-} |
- |
- |
-void TraceBuffer::PrintToJSONStream(JSONStream* stream) const { |
- JSONObject json_trace_buffer(stream); |
- json_trace_buffer.AddProperty("type", "TraceBuffer"); |
- // TODO(johnmccutchan): Send cursor position in response. |
- JSONArray json_trace_buffer_array(&json_trace_buffer, "members"); |
- // Scan forward until we find the first entry which isn't empty. |
- // TODO(johnmccutchan): Accept cursor start position as input. |
- intptr_t start = -1; |
- for (intptr_t i = 0; i < ring_capacity_; i++) { |
- intptr_t index = RingIndex(i + ring_cursor_); |
- if (!ring_[index].empty()) { |
- start = index; |
- break; |
- } |
- } |
- // No messages in trace buffer. |
- if (start == -1) { |
- return; |
- } |
- for (intptr_t i = 0; i < ring_capacity_; i++) { |
- intptr_t index = RingIndex(start + i); |
- const TraceBufferEntry& entry = ring_[index]; |
- if (entry.empty()) { |
- // Empty entry, stop. |
- break; |
- } |
- JSONObject trace_entry(&json_trace_buffer_array); |
- trace_entry.AddProperty("type", "TraceBufferEntry"); |
- double seconds = static_cast<double>(entry.micros) / |
- static_cast<double>(kMicrosecondsPerSecond); |
- trace_entry.AddProperty("time", seconds); |
- if (entry.message_is_escaped) { |
- trace_entry.AddPropertyNoEscape("message", entry.message); |
- } else { |
- trace_entry.AddProperty("message", entry.message); |
- } |
- } |
-} |
- |
-} // namespace dart |