Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/node_perf_common.h')
-rw-r--r--src/node_perf_common.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/node_perf_common.h b/src/node_perf_common.h
new file mode 100644
index 00000000000..30efcb6134b
--- /dev/null
+++ b/src/node_perf_common.h
@@ -0,0 +1,71 @@
+#ifndef SRC_NODE_PERF_COMMON_H_
+#define SRC_NODE_PERF_COMMON_H_
+
+#include "node.h"
+#include "v8.h"
+
+#include <map>
+#include <string>
+
+namespace node {
+namespace performance {
+
+#define PERFORMANCE_NOW() uv_hrtime()
+
+// These occur before the environment is created. Cache them
+// here and add them to the milestones when the env is init'd.
+extern uint64_t performance_node_start;
+extern uint64_t performance_v8_start;
+
+#define NODE_PERFORMANCE_MILESTONES(V) \
+ V(ENVIRONMENT, "environment") \
+ V(NODE_START, "nodeStart") \
+ V(V8_START, "v8Start") \
+ V(LOOP_START, "loopStart") \
+ V(LOOP_EXIT, "loopExit") \
+ V(BOOTSTRAP_COMPLETE, "bootstrapComplete") \
+ V(THIRD_PARTY_MAIN_START, "thirdPartyMainStart") \
+ V(THIRD_PARTY_MAIN_END, "thirdPartyMainEnd") \
+ V(CLUSTER_SETUP_START, "clusterSetupStart") \
+ V(CLUSTER_SETUP_END, "clusterSetupEnd") \
+ V(MODULE_LOAD_START, "moduleLoadStart") \
+ V(MODULE_LOAD_END, "moduleLoadEnd") \
+ V(PRELOAD_MODULE_LOAD_START, "preloadModulesLoadStart") \
+ V(PRELOAD_MODULE_LOAD_END, "preloadModulesLoadEnd")
+
+#define NODE_PERFORMANCE_ENTRY_TYPES(V) \
+ V(NODE, "node") \
+ V(MARK, "mark") \
+ V(MEASURE, "measure") \
+ V(GC, "gc") \
+ V(FUNCTION, "function")
+
+enum PerformanceMilestone {
+#define V(name, _) NODE_PERFORMANCE_MILESTONE_##name,
+ NODE_PERFORMANCE_MILESTONES(V)
+#undef V
+ NODE_PERFORMANCE_MILESTONE_INVALID
+};
+
+enum PerformanceEntryType {
+#define V(name, _) NODE_PERFORMANCE_ENTRY_TYPE_##name,
+ NODE_PERFORMANCE_ENTRY_TYPES(V)
+#undef V
+ NODE_PERFORMANCE_ENTRY_TYPE_INVALID
+};
+
+#define PERFORMANCE_MARK(env, n) \
+ do { \
+ node::performance::MarkPerformanceMilestone(env, \
+ node::performance::NODE_PERFORMANCE_MILESTONE_##n); \
+ } while (0);
+
+struct performance_state {
+ uint32_t observers[NODE_PERFORMANCE_ENTRY_TYPE_INVALID];
+ double milestones[NODE_PERFORMANCE_MILESTONE_INVALID];
+};
+
+} // namespace performance
+} // namespace node
+
+#endif // SRC_NODE_PERF_COMMON_H_