add way for JS to query process-wide perf stats
Reviewed By: alexeylang Differential Revision: D5555533 fbshipit-source-id: a4c16e004552b8f655ede08548c5242486b5ebb8
This commit is contained in:
parent
1de9a35f14
commit
f5f5ed5ba6
|
@ -4,12 +4,43 @@
|
|||
|
||||
#ifdef JSC_HAS_PERF_STATS_API
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
|
||||
#include <JavaScriptCore/JSPerfStats.h>
|
||||
#include <jschelpers/JSCHelpers.h>
|
||||
#include <jschelpers/Value.h>
|
||||
|
||||
using namespace facebook::react;
|
||||
|
||||
static uint64_t toMillis(struct timeval tv) {
|
||||
return tv.tv_sec * 1000ULL + tv.tv_usec / 1000ULL;
|
||||
}
|
||||
|
||||
static JSValueRef nativeGetProcessPerfStats(
|
||||
JSContextRef ctx,
|
||||
JSObjectRef function,
|
||||
JSObjectRef thisObject,
|
||||
size_t argumentCount,
|
||||
const JSValueRef arguments[],
|
||||
JSValueRef* exception) {
|
||||
struct rusage usage{};
|
||||
if (getrusage(RUSAGE_SELF, &usage) != 0) {
|
||||
return Value::makeUndefined(ctx);
|
||||
}
|
||||
|
||||
auto result = Object::create(ctx);
|
||||
uint64_t cpu_time_ms = toMillis(usage.ru_utime) + toMillis(usage.ru_stime);
|
||||
result.setProperty("major_faults", Value::makeNumber(ctx, usage.ru_majflt));
|
||||
result.setProperty("minor_faults", Value::makeNumber(ctx, usage.ru_minflt));
|
||||
result.setProperty("cpu_time_ms", Value::makeNumber(ctx, cpu_time_ms));
|
||||
result.setProperty("input_blocks", Value::makeNumber(ctx, usage.ru_inblock));
|
||||
result.setProperty("output_blocks", Value::makeNumber(ctx, usage.ru_oublock));
|
||||
return static_cast<JSObjectRef>(result);
|
||||
}
|
||||
|
||||
static JSValueRef nativeGetHeapStats(
|
||||
JSContextRef ctx,
|
||||
JSObjectRef function,
|
||||
|
@ -55,6 +86,7 @@ namespace react {
|
|||
|
||||
void addJSCPerfStatsHooks(JSGlobalContextRef ctx) {
|
||||
#ifdef JSC_HAS_PERF_STATS_API
|
||||
installGlobalFunction(ctx, "nativeGetProcessPerfStats", nativeGetProcessPerfStats);
|
||||
installGlobalFunction(ctx, "nativeGetHeapStats", nativeGetHeapStats);
|
||||
installGlobalFunction(ctx, "nativeGetGCStats", nativeGetGCStats);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue