Stub out precise clock structure from the overall flow of timers.c so that

there are no ifdefs in the middle of structures of the main code path
pull/1267/head
Vijay Pai 10 years ago
parent 0b9d0da39f
commit 9cccb08311
  1. 2
      BUILD
  2. 1
      build.json
  3. 47
      src/core/profiling/timers.c
  4. 9
      src/core/profiling/timers.h
  5. 57
      src/core/profiling/timers_preciseclock.h

@ -187,6 +187,7 @@ cc_library(
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
"src/core/profiling/timers_preciseclock.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_log.h",
"src/core/statistics/census_rpc_stats.h",
@ -416,6 +417,7 @@ cc_library(
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
"src/core/profiling/timers_preciseclock.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_log.h",
"src/core/statistics/census_rpc_stats.h",

@ -138,6 +138,7 @@
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
"src/core/profiling/timers_preciseclock.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_log.h",
"src/core/statistics/census_rpc_stats.h",

@ -34,6 +34,7 @@
#ifdef GRPC_LATENCY_PROFILER
#include "timers.h"
#include "timers_preciseclock.h"
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
@ -42,12 +43,7 @@
#include <stdio.h>
typedef struct grpc_timer_entry {
#ifdef GRPC_TIMERS_RDTSC
#error Rdtsc timers not supported yet
/* TODO(vpai): Fill in rdtsc support if desired */
#else
gpr_timespec timer;
#endif
grpc_precise_clock tm;
const char* tag;
int seq;
const char* file;
@ -61,22 +57,11 @@ struct grpc_timers_log {
int capacity;
int capacity_limit;
FILE *fp;
const char *fmt;
};
grpc_timers_log* grpc_timers_log_global = NULL;
static int timer_now(grpc_timer_entry *tm) {
#ifdef GRPC_TIMERS_RDTSC
#error Rdtsc not supported yet
#else
tm->timer = gpr_now();
return(1);
#endif
}
grpc_timers_log* grpc_timers_log_create(int capacity_limit, FILE *dump,
const char *fmt) {
grpc_timers_log* grpc_timers_log_create(int capacity_limit, FILE *dump) {
grpc_timers_log* log = gpr_malloc(sizeof(*log));
/* TODO (vpai): Allow allocation below limit */
@ -89,24 +74,19 @@ grpc_timers_log* grpc_timers_log_create(int capacity_limit, FILE *dump,
log->capacity = log->capacity_limit = capacity_limit;
log->fp = dump;
log->fmt = fmt;
return log;
}
static void log_report_locked(grpc_timers_log *log) {
FILE *fp = log->fp;
const char *fmt = log->fmt;
int i;
for (i=0;i<log->num_entries;i++) {
grpc_timer_entry* entry = &(log->log[i]);
fprintf(fp, fmt,
#ifdef GRPC_TIMERS_RDTSC
#error Rdtsc not supported
#else
entry->timer.tv_sec, entry->timer.tv_nsec,
#endif
entry->tag, entry->seq, entry->file, entry->line);
fprintf(fp, "GRPC_LAT_PROF ");
grpc_precise_clock_print(&entry->tm, fp);
fprintf(fp, " %s#%d,%s:%d\n", entry->tag, entry->seq,
entry->file, entry->line);
}
/* Now clear out the log */
@ -136,7 +116,7 @@ void grpc_timers_log_add(grpc_timers_log *log, const char *tag, int seq,
entry = &log->log[log->num_entries++];
timer_now(entry);
grpc_precise_clock_now(&entry->tm);
entry->tag = tag;
entry->seq = seq;
entry->file = file;
@ -146,21 +126,12 @@ void grpc_timers_log_add(grpc_timers_log *log, const char *tag, int seq,
}
void grpc_timers_log_global_init(void) {
grpc_timers_log_global =
grpc_timers_log_create(100000, stdout,
#ifdef GRPC_TIMERS_RDTSC
#error Rdtsc not supported
#else
"TIMER %1$ld.%2$09d %3$s seq %4$d @ %5$s:%6$d\n"
#endif
);
/* Use positional arguments as an example for others to change fmt */
grpc_timers_log_global = grpc_timers_log_create(100000, stdout);
}
void grpc_timers_log_global_destroy(void) {
grpc_timers_log_destroy(grpc_timers_log_global);
}
#else /* !GRPC_LATENCY_PROFILER */
void grpc_timers_log_global_init(void) {
}

@ -31,8 +31,8 @@
*
*/
#ifndef GRPC_TIMERS_H
#define GRPC_TIMERS_H
#ifndef GRPC_CORE_PROFILING_TIMERS_H
#define GRPC_CORE_PROFILING_TIMERS_H
#include <stdio.h>
@ -44,8 +44,7 @@ extern "C" {
typedef struct grpc_timers_log grpc_timers_log;
grpc_timers_log* grpc_timers_log_create(int capacity_limit, FILE *dump,
const char *fmt);
grpc_timers_log* grpc_timers_log_create(int capacity_limit, FILE *dump);
void grpc_timers_log_add(grpc_timers_log *, const char *tag, int seq,
const char *file, int line);
void grpc_timers_log_destroy(grpc_timers_log *);
@ -66,4 +65,4 @@ void grpc_timers_log_global_destroy(void);
}
#endif
#endif /* GRPC_TIMERS_H */
#endif /* GRPC_CORE_PROFILING_TIMERS_H */

@ -0,0 +1,57 @@
/*
*
* Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
#define GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
#include <grpc/support/time.h>
#include <stdio.h>
typedef struct grpc_precise_clock grpc_precise_clock;
#ifdef GRPC_TIMERS_RDTSC
#error RDTSC timers not currently supported
#else
struct grpc_precise_clock {
gpr_timespec clock;
};
static void grpc_precise_clock_now(grpc_precise_clock* clk) {
clk->clock = gpr_now();
}
static void grpc_precise_clock_print(const grpc_precise_clock* clk, FILE* fp) {
fprintf(fp, "%ld.%09d", clk->clock.tv_sec, clk->clock.tv_nsec);
}
#endif /* GRPC_TIMERS_RDTSC */
#endif /* GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H */
Loading…
Cancel
Save