| Index: runtime/vm/trace_buffer.cc
|
| diff --git a/runtime/vm/trace_buffer.cc b/runtime/vm/trace_buffer.cc
|
| index 93f0558071039aad70901adb6ee7904673b72595..831e95d6abd74a5d45a79d9ff3a807a25fb9f004 100644
|
| --- a/runtime/vm/trace_buffer.cc
|
| +++ b/runtime/vm/trace_buffer.cc
|
| @@ -8,10 +8,7 @@
|
|
|
| namespace dart {
|
|
|
| -TraceBuffer::TraceBuffer(intptr_t initial_capacity, intptr_t maximum_capacity)
|
| - : capacity_(initial_capacity),
|
| - max_capacity_(maximum_capacity) {
|
| - size_ = 0;
|
| +TraceBuffer::TraceBuffer(intptr_t capacity) : ring_capacity_(capacity) {
|
| ring_cursor_ = 0;
|
| Init();
|
| }
|
| @@ -26,37 +23,18 @@ TraceBuffer::~TraceBuffer() {
|
|
|
| void TraceBuffer::Init() {
|
| ring_ = reinterpret_cast<TraceBufferEntry*>(
|
| - calloc(capacity_, sizeof(TraceBufferEntry))); // NOLINT
|
| -}
|
| -
|
| -
|
| -void TraceBuffer::Resize(intptr_t new_capacity) {
|
| - ASSERT(new_capacity > capacity_);
|
| - if (new_capacity > max_capacity_) {
|
| - // Clamp to max_capacity_.
|
| - new_capacity = max_capacity_;
|
| - }
|
| - ASSERT(new_capacity <= max_capacity_);
|
| - ring_ = reinterpret_cast<TraceBufferEntry*>(
|
| - realloc(ring_, sizeof(*ring_) * new_capacity));
|
| - // Initialize new TraceBufferEntries.
|
| - for (intptr_t i = capacity_; i < new_capacity; i++) {
|
| - ring_[i].micros = 0;
|
| - ring_[i].message = NULL;
|
| - }
|
| - capacity_ = new_capacity;
|
| + calloc(ring_capacity_, sizeof(TraceBufferEntry))); // NOLINT
|
| }
|
|
|
|
|
| void TraceBuffer::Clear() {
|
| - for (intptr_t i = 0; i < capacity_; i++) {
|
| + for (intptr_t i = 0; i < ring_capacity_; i++) {
|
| TraceBufferEntry& entry = ring_[i];
|
| entry.micros = 0;
|
| free(entry.message);
|
| entry.message = NULL;
|
| }
|
| ring_cursor_ = 0;
|
| - size_ = 0;
|
| }
|
|
|
|
|
| @@ -71,14 +49,6 @@ void TraceBuffer::Fill(TraceBufferEntry* entry, int64_t micros, char* msg) {
|
|
|
|
|
| void TraceBuffer::AppendTrace(int64_t micros, char* message) {
|
| - if (size_ < capacity_) {
|
| - size_++;
|
| - if ((size_ == capacity_) &&
|
| - (capacity_ < max_capacity_)) {
|
| - // Double size.
|
| - Resize(capacity_ * 2);
|
| - }
|
| - }
|
| const intptr_t index = ring_cursor_;
|
| TraceBufferEntry* trace_entry = &ring_[index];
|
| Fill(trace_entry, micros, message);
|
| @@ -113,15 +83,15 @@ void TraceBuffer::TraceF(const char* format, ...) {
|
| }
|
|
|
|
|
| -void TraceBuffer::PrintToJSONObject(JSONObject* json_trace_buffer) const {
|
| - json_trace_buffer->AddProperty("type", "TraceBuffer");
|
| - json_trace_buffer->AddProperty("id", "");
|
| +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");
|
| + 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 < capacity_; i++) {
|
| + for (intptr_t i = 0; i < ring_capacity_; i++) {
|
| intptr_t index = RingIndex(i + ring_cursor_);
|
| if (!ring_[index].empty()) {
|
| start = index;
|
| @@ -132,7 +102,7 @@ void TraceBuffer::PrintToJSONObject(JSONObject* json_trace_buffer) const {
|
| if (start == -1) {
|
| return;
|
| }
|
| - for (intptr_t i = 0; i < capacity_; i++) {
|
| + for (intptr_t i = 0; i < ring_capacity_; i++) {
|
| intptr_t index = RingIndex(start + i);
|
| const TraceBufferEntry& entry = ring_[index];
|
| if (entry.empty()) {
|
| @@ -141,18 +111,11 @@ void TraceBuffer::PrintToJSONObject(JSONObject* json_trace_buffer) const {
|
| }
|
| JSONObject trace_entry(&json_trace_buffer_array);
|
| trace_entry.AddProperty("type", "TraceBufferEntry");
|
| - trace_entry.AddProperty("id", "");
|
| - intptr_t millis =
|
| - static_cast<intptr_t>(entry.micros / kMicrosecondsPerMillisecond);
|
| - trace_entry.AddProperty("time", millis);
|
| + double seconds = static_cast<double>(entry.micros) /
|
| + static_cast<double>(kMicrosecondsPerSecond);
|
| + trace_entry.AddProperty("time", seconds);
|
| trace_entry.AddProperty("message", entry.message);
|
| }
|
| }
|
|
|
| -
|
| -void TraceBuffer::PrintToJSONStream(JSONStream* stream) const {
|
| - JSONObject json_trace_buffer(stream);
|
| - PrintToJSONObject(&json_trace_buffer);
|
| -}
|
| -
|
| } // namespace dart
|
|
|