Index: runtime/vm/trace_buffer.cc |
=================================================================== |
--- runtime/vm/trace_buffer.cc (revision 37220) |
+++ 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" |
@@ -76,20 +77,59 @@ |
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, |
Cutch
2014/06/11 21:45:03
JSONStream js;
{
JSONObject trace_warning(&j
regis
2014/06/11 23:48:35
Done.
|
+ 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", "TraceBufferWarning"); |
+ const String& script_url = String::Handle(script.url()); |
+ trace_warning.AddProperty("script_url", script_url.ToCString()); |
+ trace_warning.AddProperty("token_pos", 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); |
+ char* message_copy = strdup(js.ToCString()); |
+ trace_buffer->AppendTrace(micros, message_copy); |
+} |
+ |
+ |
void TraceBuffer::PrintToJSONStream(JSONStream* stream) const { |
JSONObject json_trace_buffer(stream); |
json_trace_buffer.AddProperty("type", "TraceBuffer"); |