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

Unified Diff: runtime/vm/trace_buffer.cc

Issue 328663008: Add support to trace warnings in TraceBuffer. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 6 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
===================================================================
--- runtime/vm/trace_buffer.cc (revision 37244)
+++ runtime/vm/trace_buffer.cc (working copy)
@@ -4,6 +4,7 @@
#include "vm/isolate.h"
#include "vm/json_stream.h"
+#include "vm/object.h"
#include "vm/os.h"
#include "vm/trace_buffer.h"
@@ -40,56 +41,98 @@
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) {
+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* message) {
+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, message);
+ Fill(trace_entry, micros, msg, msg_is_escaped);
ring_cursor_ = RingIndex(ring_cursor_ + 1);
}
-void TraceBuffer::Trace(int64_t micros, const char* message) {
- ASSERT(message != NULL);
- char* message_copy = strdup(message);
- AppendTrace(micros, message_copy);
+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* message) {
- Trace(OS::GetCurrentTimeMicros(), message);
+void TraceBuffer::Trace(const char* msg, bool msg_is_escaped) {
+ Trace(OS::GetCurrentTimeMicros(), msg, msg_is_escaped);
}
void TraceBuffer::TraceF(const char* format, ...) {
- int64_t micros = OS::GetCurrentTimeMicros();
+ const int64_t micros = OS::GetCurrentTimeMicros();
va_list args;
va_start(args, format);
- intptr_t len = OS::VSNPrint(NULL, 0, format, args);
+ 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);
- intptr_t len2 = OS::VSNPrint(p, len+1, format, args);
+ const intptr_t len2 = OS::VSNPrint(p, len+1, format, args);
va_end(args);
ASSERT(len == len2);
AppendTrace(micros, p);
}
+void TraceBuffer::TraceWarningF(Isolate* isolate,
+ const Script& script, intptr_t token_pos,
+ const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ TraceWarningV(isolate, script, token_pos, format, args);
+ va_end(args);
+}
+
+
+void TraceBuffer::TraceWarningV(Isolate* isolate,
+ const Script& script, intptr_t token_pos,
+ const char* format, va_list args) {
+ const int64_t micros = OS::GetCurrentTimeMicros();
+ TraceBuffer* trace_buffer = isolate->trace_buffer();
+ if (trace_buffer == NULL) {
+ Init(isolate);
+ trace_buffer = isolate->trace_buffer();
+ }
+ JSONStream js;
+ {
+ JSONObject trace_warning(&js);
+ trace_warning.AddProperty("type", "Warning");
Cutch 2014/06/12 21:09:05 Please use a different type than "Warning". We wil
regis 2014/06/13 00:04:37 I've called it JSCompatibilityWarning for now. A l
+ trace_warning.AddProperty("script", script);
+ trace_warning.AddProperty("tokenPos", token_pos);
+ va_list args_copy;
+ va_copy(args_copy, args);
+ const intptr_t len = OS::VSNPrint(NULL, 0, format, args_copy);
+ va_end(args_copy);
+ char* msg = reinterpret_cast<char*>(malloc(len + 1));
+ va_copy(args_copy, args);
+ OS::VSNPrint(msg, len + 1, format, args_copy);
+ va_end(args_copy);
+ trace_warning.AddProperty("message", msg);
+ }
+ trace_buffer->Trace(micros, js.ToCString(), true); // Already escaped.
+}
+
+
void TraceBuffer::PrintToJSONStream(JSONStream* stream) const {
JSONObject json_trace_buffer(stream);
json_trace_buffer.AddProperty("type", "TraceBuffer");
@@ -121,7 +164,11 @@
double seconds = static_cast<double>(entry.micros) /
static_cast<double>(kMicrosecondsPerSecond);
trace_entry.AddProperty("time", seconds);
- trace_entry.AddProperty("message", entry.message);
+ if (entry.message_is_escaped) {
+ trace_entry.AddPropertyNoEscape("message", entry.message);
+ } else {
+ trace_entry.AddProperty("message", entry.message);
+ }
}
}
« 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