using v8::GCType;
using v8::Handle;
using v8::HandleScope;
+using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
}
-static void counter_gc_start(GCType type, GCCallbackFlags flags) {
+static void counter_gc_start(Isolate* isolate,
+ GCType type,
+ GCCallbackFlags flags) {
counter_gc_start_time = NODE_COUNT_GET_GC_RAWTIME();
}
-static void counter_gc_done(GCType type, GCCallbackFlags flags) {
+static void counter_gc_done(Isolate* isolate,
+ GCType type,
+ GCCallbackFlags flags) {
uint64_t endgc = NODE_COUNT_GET_GC_RAWTIME();
if (endgc != 0) {
uint64_t totalperiod = endgc - counter_gc_end_time;
for (int i = 0; i < ARRAY_SIZE(tab); i++) {
Local<String> key = OneByteString(env->isolate(), tab[i].name);
- Local<Value> val = FunctionTemplate::New(tab[i].func)->GetFunction();
+ Local<Value> val =
+ FunctionTemplate::New(env->isolate(), tab[i].func)->GetFunction();
target->Set(key, val);
}
counter_gc_start_time = NODE_COUNT_GET_GC_RAWTIME();
counter_gc_end_time = counter_gc_start_time;
- v8::V8::AddGCPrologueCallback(counter_gc_start);
- v8::V8::AddGCEpilogueCallback(counter_gc_done);
+ env->isolate()->AddGCPrologueCallback(counter_gc_start);
+ env->isolate()->AddGCEpilogueCallback(counter_gc_done);
}
#define NODE_NET_SOCKET_READ_ENABLED() (0)
#define NODE_NET_SOCKET_WRITE(arg0, arg1, arg2, arg3, arg4)
#define NODE_NET_SOCKET_WRITE_ENABLED() (0)
-#define NODE_GC_START(arg0, arg1)
-#define NODE_GC_DONE(arg0, arg1)
+#define NODE_GC_START(arg0, arg1, arg2)
+#define NODE_GC_DONE(arg0, arg1, arg2)
#endif
#include "env.h"
using v8::GCType;
using v8::Handle;
using v8::HandleScope;
+using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
}
-int dtrace_gc_start(GCType type, GCCallbackFlags flags) {
- NODE_GC_START(type, flags);
- /*
- * We avoid the tail-call elimination of the USDT probe (which screws up
- * args) by forcing a return of 0.
- */
- return 0;
+void dtrace_gc_start(Isolate* isolate, GCType type, GCCallbackFlags flags) {
+ // Previous versions of this probe point only logged type and flags.
+ // That's why for reasons of backwards compatibility the isolate goes last.
+ NODE_GC_START(type, flags, isolate);
}
-int dtrace_gc_done(GCType type, GCCallbackFlags flags) {
- NODE_GC_DONE(type, flags);
- return 0;
+void dtrace_gc_done(Isolate* isolate, GCType type, GCCallbackFlags flags) {
+ // Previous versions of this probe point only logged type and flags.
+ // That's why for reasons of backwards compatibility the isolate goes last.
+ NODE_GC_DONE(type, flags, isolate);
}
#endif
#if defined HAVE_DTRACE || defined HAVE_ETW
- v8::V8::AddGCPrologueCallback((GCPrologueCallback)dtrace_gc_start);
- v8::V8::AddGCEpilogueCallback((GCEpilogueCallback)dtrace_gc_done);
+ env->isolate()->AddGCPrologueCallback(dtrace_gc_start);
+ env->isolate()->AddGCEpilogueCallback(dtrace_gc_done);
#endif
}
string a, int p, string m, string u, int fd);
probe http__client__response(node_dtrace_connection_t *c, const char *a,
int p, int fd) : (node_connection_t *c, string a, int p, int fd);
- probe gc__start(int t, int f);
- probe gc__done(int t, int f);
+ probe gc__start(int t, int f, void *isolate);
+ probe gc__done(int t, int f, void *isolate);
};
#pragma D attributes Evolving/Evolving/ISA provider node provider
}
-void NODE_GC_START(v8::GCType type, v8::GCCallbackFlags flags) {
+void NODE_GC_START(v8::GCType type,
+ v8::GCCallbackFlags flags,
+ v8::Isolate* isolate) {
if (events_enabled > 0) {
EVENT_DATA_DESCRIPTOR descriptors[2];
ETW_WRITE_GC(descriptors, type, flags);
}
-void NODE_GC_DONE(v8::GCType type, v8::GCCallbackFlags flags) {
+void NODE_GC_DONE(v8::GCType type,
+ v8::GCCallbackFlags flags,
+ v8::Isolate* isolate) {
if (events_enabled > 0) {
EVENT_DATA_DESCRIPTOR descriptors[2];
ETW_WRITE_GC(descriptors, type, flags);
const char *remote, int port, int fd);
INLINE void NODE_NET_STREAM_END(node_dtrace_connection_t* conn,
const char *remote, int port, int fd);
-INLINE void NODE_GC_START(v8::GCType type, v8::GCCallbackFlags flags);
-INLINE void NODE_GC_DONE(v8::GCType type, v8::GCCallbackFlags flags);
+INLINE void NODE_GC_START(v8::GCType type,
+ v8::GCCallbackFlags flags,
+ v8::Isolate* isolate);
+INLINE void NODE_GC_DONE(v8::GCType type,
+ v8::GCCallbackFlags flags,
+ v8::Isolate* isolate);
INLINE void NODE_V8SYMBOL_REMOVE(const void* addr1, const void* addr2);
INLINE void NODE_V8SYMBOL_MOVE(const void* addr1, const void* addr2);
INLINE void NODE_V8SYMBOL_RESET();