mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
add skynet.stat 'time'
This commit is contained in:
@@ -48,6 +48,7 @@ struct skynet_context {
|
|||||||
struct message_queue *queue;
|
struct message_queue *queue;
|
||||||
FILE * logfile;
|
FILE * logfile;
|
||||||
uint64_t cpu_cost; // in microsec
|
uint64_t cpu_cost; // in microsec
|
||||||
|
uint64_t cpu_start; // in microsec
|
||||||
char result[32];
|
char result[32];
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
int session_id;
|
int session_id;
|
||||||
@@ -146,6 +147,7 @@ skynet_context_new(const char * name, const char *param) {
|
|||||||
ctx->endless = false;
|
ctx->endless = false;
|
||||||
|
|
||||||
ctx->cpu_cost = 0;
|
ctx->cpu_cost = 0;
|
||||||
|
ctx->cpu_start = 0;
|
||||||
ctx->message_count = 0;
|
ctx->message_count = 0;
|
||||||
ctx->profile = G_NODE.profile;
|
ctx->profile = G_NODE.profile;
|
||||||
// Should set to 0 first to avoid skynet_handle_retireall get an uninitialized handle
|
// Should set to 0 first to avoid skynet_handle_retireall get an uninitialized handle
|
||||||
@@ -268,9 +270,9 @@ dispatch_message(struct skynet_context *ctx, struct skynet_message *msg) {
|
|||||||
++ctx->message_count;
|
++ctx->message_count;
|
||||||
int reserve_msg;
|
int reserve_msg;
|
||||||
if (ctx->profile) {
|
if (ctx->profile) {
|
||||||
uint64_t start_time = skynet_thread_time();
|
ctx->cpu_start = skynet_thread_time();
|
||||||
reserve_msg = ctx->cb(ctx, ctx->cb_ud, type, msg->session, msg->source, msg->data, sz);
|
reserve_msg = ctx->cb(ctx, ctx->cb_ud, type, msg->session, msg->source, msg->data, sz);
|
||||||
uint64_t cost_time = skynet_thread_time() - start_time;
|
uint64_t cost_time = skynet_thread_time() - ctx->cpu_start;
|
||||||
ctx->cpu_cost += cost_time;
|
ctx->cpu_cost += cost_time;
|
||||||
} else {
|
} else {
|
||||||
reserve_msg = ctx->cb(ctx, ctx->cb_ud, type, msg->session, msg->source, msg->data, sz);
|
reserve_msg = ctx->cb(ctx, ctx->cb_ud, type, msg->session, msg->source, msg->data, sz);
|
||||||
@@ -562,6 +564,14 @@ cmd_stat(struct skynet_context * context, const char * param) {
|
|||||||
} else if (strcmp(param, "cpu") == 0) {
|
} else if (strcmp(param, "cpu") == 0) {
|
||||||
double t = (double)context->cpu_cost / 1000000.0; // microsec
|
double t = (double)context->cpu_cost / 1000000.0; // microsec
|
||||||
sprintf(context->result, "%lf", t);
|
sprintf(context->result, "%lf", t);
|
||||||
|
} else if (strcmp(param, "time") == 0) {
|
||||||
|
if (context->profile) {
|
||||||
|
uint64_t ti = skynet_thread_time() - context->cpu_start;
|
||||||
|
double t = (double)ti / 1000000.0; // microsec
|
||||||
|
sprintf(context->result, "%lf", t);
|
||||||
|
} else {
|
||||||
|
strcpy(context->result, "0");
|
||||||
|
}
|
||||||
} else if (strcmp(param, "message") == 0) {
|
} else if (strcmp(param, "message") == 0) {
|
||||||
sprintf(context->result, "%d", context->message_count);
|
sprintf(context->result, "%d", context->message_count);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
11
test/testendless.lua
Normal file
11
test/testendless.lua
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
local skynet = require "skynet"
|
||||||
|
|
||||||
|
skynet.start(function()
|
||||||
|
for i = 1, 1000000000 do -- very long loop
|
||||||
|
if i%100000000 == 0 then
|
||||||
|
print("Endless = ", skynet.stat "endless")
|
||||||
|
print("Cost time = ", skynet.stat "time")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
skynet.exit()
|
||||||
|
end)
|
||||||
Reference in New Issue
Block a user