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

Unified Diff: runtime/vm/trace_buffer.cc

Issue 227423005: Add TraceBuffer log to all Functions (plus small tweaks to function-view) (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/trace_buffer.h ('k') | runtime/vm/trace_buffer_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/trace_buffer.cc
diff --git a/runtime/vm/trace_buffer.cc b/runtime/vm/trace_buffer.cc
index 831e95d6abd74a5d45a79d9ff3a807a25fb9f004..8ed484263608b663d60ed787e436af3c85c0297e 100644
--- a/runtime/vm/trace_buffer.cc
+++ b/runtime/vm/trace_buffer.cc
@@ -8,7 +8,10 @@
namespace dart {
-TraceBuffer::TraceBuffer(intptr_t capacity) : ring_capacity_(capacity) {
+TraceBuffer::TraceBuffer(intptr_t initial_capacity, intptr_t maximum_capacity)
+ : ring_capacity_(initial_capacity),
+ ring_max_capacity_(maximum_capacity) {
turnidge 2014/04/15 21:35:20 ring_capacity -> capacity, etc.
Cutch 2014/04/21 15:39:19 Done.
+ ring_size_ = 0;
ring_cursor_ = 0;
Init();
}
@@ -27,6 +30,24 @@ void TraceBuffer::Init() {
}
+void TraceBuffer::Resize(intptr_t capacity) {
turnidge 2014/04/15 21:35:20 capacity -> new_capacity?
Cutch 2014/04/21 15:39:19 Done.
+ ASSERT(capacity > ring_capacity_);
+ if (capacity > ring_max_capacity_) {
+ // Clamp to ring_max_capacity_.
+ capacity = ring_max_capacity_;
+ }
+ ASSERT(capacity <= ring_max_capacity_);
+ ring_ = reinterpret_cast<TraceBufferEntry*>(
+ realloc(ring_, sizeof(*ring_) * capacity));
+ // Initialize new TraceBufferEntries.
+ for (intptr_t i = ring_capacity_; i < capacity; i++) {
+ ring_[i].micros = 0;
+ ring_[i].message = NULL;
+ }
+ ring_capacity_ = capacity;
+}
+
+
void TraceBuffer::Clear() {
for (intptr_t i = 0; i < ring_capacity_; i++) {
TraceBufferEntry& entry = ring_[i];
@@ -35,6 +56,7 @@ void TraceBuffer::Clear() {
entry.message = NULL;
}
ring_cursor_ = 0;
+ ring_size_ = 0;
}
@@ -49,6 +71,14 @@ void TraceBuffer::Fill(TraceBufferEntry* entry, int64_t micros, char* msg) {
void TraceBuffer::AppendTrace(int64_t micros, char* message) {
+ if (ring_size_ < ring_capacity_) {
+ ring_size_++;
+ if ((ring_size_ == ring_capacity_) &&
+ (ring_capacity_ < ring_max_capacity_)) {
+ // Double size.
+ Resize(ring_capacity_ * 2);
+ }
+ }
const intptr_t index = ring_cursor_;
TraceBufferEntry* trace_entry = &ring_[index];
Fill(trace_entry, micros, message);
@@ -83,11 +113,11 @@ void TraceBuffer::TraceF(const char* format, ...) {
}
-void TraceBuffer::PrintToJSONStream(JSONStream* stream) const {
- JSONObject json_trace_buffer(stream);
- json_trace_buffer.AddProperty("type", "TraceBuffer");
+void TraceBuffer::PrintToJSONObject(JSONObject* json_trace_buffer) const {
+ json_trace_buffer->AddProperty("type", "TraceBuffer");
+ json_trace_buffer->AddProperty("id", "");
// 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;
@@ -111,11 +141,18 @@ void TraceBuffer::PrintToJSONStream(JSONStream* stream) const {
}
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);
+ trace_entry.AddProperty("id", "");
+ intptr_t millis =
+ static_cast<intptr_t>(entry.micros / kMicrosecondsPerMillisecond);
+ trace_entry.AddProperty("time", millis);
trace_entry.AddProperty("message", entry.message);
}
}
+
+void TraceBuffer::PrintToJSONStream(JSONStream* stream) const {
+ JSONObject json_trace_buffer(stream);
+ PrintToJSONObject(&json_trace_buffer);
+}
+
} // namespace dart
« no previous file with comments | « runtime/vm/trace_buffer.h ('k') | runtime/vm/trace_buffer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698