@@ -35,6 +35,10 @@ void Console::Init(Local<Context> context) {
35
35
}
36
36
}
37
37
38
+ void Console::AttachInspectorClient (v8_inspector::JsV8InspectorClient* aInspector) {
39
+ inspector = aInspector;
40
+ }
41
+
38
42
void Console::LogCallback (const FunctionCallbackInfo<Value>& args) {
39
43
// TODO: implement 'forceLog' override option like android has, to force logs in prod if desired
40
44
if (!RuntimeConfig.LogToSystemConsole ) {
@@ -59,8 +63,8 @@ void Console::LogCallback(const FunctionCallbackInfo<Value>& args) {
59
63
60
64
std::string msgToLog = ss.str ();
61
65
62
- std::string level = VerbosityToInspectorVerbosity (verbosityLevel);
63
- // v8_inspector::V8LogAgentImpl::EntryAdded(msgToLog, level, "", 0 );
66
+ ConsoleAPIType method = VerbosityToInspectorMethod (verbosityLevel);
67
+ SendToDevToolsFrontEnd (method, args );
64
68
std::string msgWithVerbosity = " CONSOLE " + verbosityLevelUpper + " : " + msgToLog;
65
69
Log (" %s" , msgWithVerbosity.c_str ());
66
70
}
@@ -86,7 +90,8 @@ void Console::AssertCallback(const FunctionCallbackInfo<Value>& args) {
86
90
}
87
91
88
92
std::string log = ss.str ();
89
- // v8_inspector::V8LogAgentImpl::EntryAdded(log, "error", "", 0);
93
+
94
+ SendToDevToolsFrontEnd (ConsoleAPIType::kAssert , args);
90
95
Log (" %s" , log.c_str ());
91
96
}
92
97
}
@@ -157,11 +162,7 @@ void Console::DirCallback(const FunctionCallbackInfo<Value>& args) {
157
162
}
158
163
159
164
std::string msgToLog = ss.str ();
160
-
161
- Local<v8::String> data = args.Data ().As <v8::String>();
162
- std::string verbosityLevel = tns::ToString (isolate, data);
163
- std::string level = VerbosityToInspectorVerbosity (verbosityLevel);
164
- // v8_inspector::V8LogAgentImpl::EntryAdded(msgToLog, level, "", 0);
165
+ SendToDevToolsFrontEnd (ConsoleAPIType::kDir , args);
165
166
Log (" %s" , msgToLog.c_str ());
166
167
}
167
168
@@ -221,11 +222,8 @@ void Console::TimeEndCallback(const FunctionCallbackInfo<Value>& args) {
221
222
std::stringstream ss;
222
223
ss << " CONSOLE INFO " << label << " : " << std::fixed << std::setprecision (3 ) << diffMilliseconds << " ms" ;
223
224
224
- Local<v8::String> data = args.Data ().As <v8::String>();
225
- std::string verbosityLevel = tns::ToString (isolate, data);
226
- std::string level = VerbosityToInspectorVerbosity (verbosityLevel);
227
225
std::string msgToLog = ss.str ();
228
- // v8_inspector::V8LogAgentImpl::EntryAdded(msgToLog, level, "", 0 );
226
+ SendToDevToolsFrontEnd (isolate, ConsoleAPIType:: kTimeEnd , msgToLog );
229
227
Log (" %s" , msgToLog.c_str ());
230
228
}
231
229
@@ -346,14 +344,47 @@ const Local<v8::String> Console::TransformJSObject(Local<Object> object) {
346
344
return resultString;
347
345
}
348
346
349
- const std::string Console::VerbosityToInspectorVerbosity (const std::string level) {
347
+ v8_inspector::ConsoleAPIType Console::VerbosityToInspectorMethod (const std::string level) {
350
348
if (level == " error" ) {
351
- return " error " ;
349
+ return ConsoleAPIType:: kError ;
352
350
} else if (level == " warn" ) {
353
- return " warning" ;
351
+ return ConsoleAPIType::kWarning ;
352
+ } else if (level == " info" ) {
353
+ return ConsoleAPIType::kInfo ;
354
+ } else if (level == " trace" ) {
355
+ return ConsoleAPIType::kTrace ;
356
+ }
357
+
358
+ assert (level == " log" );
359
+ return ConsoleAPIType::kLog ;
360
+ }
361
+
362
+ void Console::SendToDevToolsFrontEnd (ConsoleAPIType method,
363
+ const v8::FunctionCallbackInfo<v8::Value>& args) {
364
+ if (!inspector) {
365
+ return ;
366
+ }
367
+
368
+ std::vector<v8::Local<v8::Value>> arg_vector;
369
+ unsigned nargs = args.Length ();
370
+ arg_vector.reserve (nargs);
371
+ for (unsigned ix = 0 ; ix < nargs; ix++)
372
+ arg_vector.push_back (args[ix]);
373
+
374
+ inspector->consoleLog (args.GetIsolate (), method, arg_vector);
375
+ }
376
+
377
+ void Console::SendToDevToolsFrontEnd (v8::Isolate* isolate, ConsoleAPIType method, const std::string& msg) {
378
+ if (!inspector) {
379
+ return ;
354
380
}
355
381
356
- return " info" ;
382
+ v8::Local<v8::String> v8str = v8::String::NewFromUtf8 (
383
+ isolate, msg.c_str (), v8::NewStringType::kNormal , -1 ).ToLocalChecked ();
384
+ std::vector<v8::Local<v8::Value>> args{v8str};
385
+ inspector->consoleLog (isolate, method, args);
357
386
}
358
387
388
+ v8_inspector::JsV8InspectorClient* Console::inspector = nullptr ;
389
+
359
390
}
0 commit comments