#ifdef SER #ifdef DO_PROFILE #include #include "dprint.h" #include #include #include DEFINE_PROF_POINT(pa_handle_subscription) DEFINE_PROF_POINT(pa_timer_presentity) DEFINE_PROF_POINT(pa_timer_pdomain) DEFINE_PROF_POINT(pa_response_generation) DEFINE_PROF_POINT(rls_handle_subscription) DEFINE_PROF_POINT(rls_timer_cb) DEFINE_PROF_POINT(rls_is_simple_rls_target) DEFINE_PROF_POINT(rls_query_rls_sevices) DEFINE_PROF_POINT(rls_query_resource_list) DEFINE_PROF_POINT(rls_have_flat_list) DEFINE_PROF_POINT(tem_timer_cb) DEFINE_PROF_POINT(tem_add_event) DEFINE_PROF_POINT(tem_remove_event) DEFINE_PROF_POINT(tem_do_step) DEFINE_PROF_POINT(b2b_handle_notify) void prof_trace(FILE *f, int pid, const char *s, profile_data_t a) { fprintf(f, "%d\t%30s\t%d\t%u\n", pid, s, a.count, a.spent_time); if (a.start_count != a.stop_count) fprintf(f, "%s, %d start_count != stop_count (%d != %d)\n", s, pid, a.start_count, a.stop_count); } void prof_trace_nested(FILE *f, int pid, const char *s, profile_data_t a) { fprintf(f, "%d\t%29s*\t%d\t%u\n", pid, s, a.count, a.spent_time); if (a.start_count != a.stop_count) fprintf(f, "%s, %d start_count != stop_count (%d != %d)\n", s, pid, a.start_count, a.stop_count); } #define trace(f, p, name) prof_trace(f, p, #name , prof_point(name)) #define trace_nested(f, p, name) prof_trace_nested(f, p, #name , prof_point(name)) void trace_func() { pid_t p = getpid(); FILE *f; f = fopen("/tmp/ser.profile", "at"); if (!f) ERR("can't write into profile file\n"); else { trace(f, p, pa_handle_subscription); trace(f, p, pa_timer_pdomain); trace_nested(f, p, pa_timer_presentity); trace_nested(f, p, pa_response_generation); trace(f, p, rls_handle_subscription); trace(f, p, rls_timer_cb); trace(f, p, rls_is_simple_rls_target); trace(f, p, rls_query_rls_sevices); trace(f, p, rls_query_resource_list); trace(f, p, rls_have_flat_list); /* trace_nested(f, p, tem_timer_cb); */ trace(f, p, tem_add_event); trace(f, p, tem_remove_event); trace(f, p, tem_do_step); trace(f, p, b2b_handle_notify); fprintf(f, "%d\t%30s\t1\t%u\n", p, "all", get_prof_time()); fclose(f); } } void ser_profile_init() { WARN("initializing profiler\n"); start_profile(trace_func); } #endif /* DO_PROFILE */ #endif /* SER */