report: include information about event loop itself

PR-URL: https://github.com/nodejs/node/pull/25906
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anna Henningsen 2019-02-03 15:10:19 +01:00
parent b1f82e4342
commit 91adbe14b4
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9
4 changed files with 23 additions and 11 deletions

View File

@ -215,6 +215,11 @@ is provided below for reference.
"is_referenced": false,
"address": "0x000000010188f2e0",
"details": ""
},
{
"type": "loop",
"is_active": true,
"address": "0x000055fc7b2cb180"
}
],
"environmentVariables": {

View File

@ -311,9 +311,18 @@ static void WriteNodeReport(Isolate* isolate,
#endif
writer.json_arraystart("libuv");
if (env != nullptr)
if (env != nullptr) {
uv_walk(env->event_loop(), WalkHandle, static_cast<void*>(&writer));
writer.json_start();
writer.json_keyvalue("type", "loop");
writer.json_keyvalue("is_active",
static_cast<bool>(uv_loop_alive(env->event_loop())));
writer.json_keyvalue("address",
ValueToHexString(reinterpret_cast<int64_t>(env->event_loop())));
writer.json_end();
}
writer.json_arrayend();
// Report operating system information

View File

@ -57,8 +57,15 @@ void GetNodeReport(v8::Isolate* isolate,
void ReportEndpoints(uv_handle_t* h, std::ostringstream& out);
void WalkHandle(uv_handle_t* h, void* arg);
std::string EscapeJsonChars(const std::string& str);
template <typename T>
std::string ValueToHexString(T value);
std::string ValueToHexString(T value) {
std::stringstream hex;
hex << "0x" << std::setfill('0') << std::setw(sizeof(T) * 2) << std::hex <<
value;
return hex.str();
}
// Function declarations - export functions in src/node_report_module.cc
void TriggerReport(const v8::FunctionCallbackInfo<v8::Value>& info);

View File

@ -214,15 +214,6 @@ void WalkHandle(uv_handle_t* h, void* arg) {
writer->json_end();
}
template <typename T>
std::string ValueToHexString(T value) {
std::stringstream hex;
hex << "0x" << std::setfill('0') << std::setw(sizeof(T) * 2) << std::hex <<
value;
return hex.str();
}
std::string EscapeJsonChars(const std::string& str) {
const std::string control_symbols[0x20] = {
"\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005",