|
|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
/* Copyright (C) 2007-2013 Open Information Security Foundation
|
|
|
|
|
/* Copyright (C) 2007-2015 Open Information Security Foundation
|
|
|
|
|
*
|
|
|
|
|
* You can copy, redistribute or modify this Program under the terms of
|
|
|
|
|
* the GNU General Public License version 2 as published by the Free
|
|
|
|
|
@ -88,14 +88,14 @@ typedef struct StatsGlobalContext_ {
|
|
|
|
|
} StatsGlobalContext;
|
|
|
|
|
|
|
|
|
|
static void *stats_thread_data = NULL;
|
|
|
|
|
static StatsGlobalContext *sc_perf_op_ctx = NULL;
|
|
|
|
|
static time_t sc_start_time;
|
|
|
|
|
static StatsGlobalContext *stats_ctx = NULL;
|
|
|
|
|
static time_t stats_start_time;
|
|
|
|
|
/** refresh interval in seconds */
|
|
|
|
|
static uint32_t sc_counter_tts = STATS_MGMTT_TTS;
|
|
|
|
|
static uint32_t stats_tts = STATS_MGMTT_TTS;
|
|
|
|
|
/** is the stats counter enabled? */
|
|
|
|
|
static char sc_counter_enabled = TRUE;
|
|
|
|
|
static char stats_enabled = TRUE;
|
|
|
|
|
|
|
|
|
|
static int SCPerfOutputCounterFileIface(ThreadVars *tv);
|
|
|
|
|
static int StatsOutput(ThreadVars *tv);
|
|
|
|
|
static int StatsThreadRegister(const char *thread_name, SCPerfPublicContext *);
|
|
|
|
|
|
|
|
|
|
/** stats table is filled each interval and passed to the
|
|
|
|
|
@ -104,14 +104,6 @@ static StatsTable stats_table = { NULL, NULL, 0, 0, 0, {0 , 0}};
|
|
|
|
|
|
|
|
|
|
static uint16_t counters_global_id = 0;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \brief The output interface dispatcher for the counter api
|
|
|
|
|
*/
|
|
|
|
|
void SCPerfOutputCounters(ThreadVars *tv)
|
|
|
|
|
{
|
|
|
|
|
SCPerfOutputCounterFileIface(tv);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \brief Adds a value of type uint64_t to the local counter.
|
|
|
|
|
*
|
|
|
|
|
@ -214,26 +206,26 @@ static void SCPerfInitOPCtx(void)
|
|
|
|
|
if (stats != NULL) {
|
|
|
|
|
const char *enabled = ConfNodeLookupChildValue(stats, "enabled");
|
|
|
|
|
if (enabled != NULL && ConfValIsFalse(enabled)) {
|
|
|
|
|
sc_counter_enabled = FALSE;
|
|
|
|
|
stats_enabled = FALSE;
|
|
|
|
|
SCLogDebug("Stats module has been disabled");
|
|
|
|
|
SCReturn;
|
|
|
|
|
}
|
|
|
|
|
const char *interval = ConfNodeLookupChildValue(stats, "interval");
|
|
|
|
|
if (interval != NULL)
|
|
|
|
|
sc_counter_tts = (uint32_t) atoi(interval);
|
|
|
|
|
stats_tts = (uint32_t) atoi(interval);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!OutputStatsLoggersRegistered()) {
|
|
|
|
|
SCLogWarning(SC_WARN_NO_STATS_LOGGERS, "stats are enabled but no loggers are active");
|
|
|
|
|
sc_counter_enabled = FALSE;
|
|
|
|
|
stats_enabled = FALSE;
|
|
|
|
|
SCReturn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Store the engine start time */
|
|
|
|
|
time(&sc_start_time);
|
|
|
|
|
time(&stats_start_time);
|
|
|
|
|
|
|
|
|
|
/* init the lock used by StatsThreadStore */
|
|
|
|
|
if (SCMutexInit(&sc_perf_op_ctx->sts_lock, NULL) != 0) {
|
|
|
|
|
if (SCMutexInit(&stats_ctx->sts_lock, NULL) != 0) {
|
|
|
|
|
SCLogError(SC_ERR_INITIALIZATION, "error initializing sts mutex");
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
}
|
|
|
|
|
@ -247,14 +239,14 @@ static void SCPerfInitOPCtx(void)
|
|
|
|
|
*/
|
|
|
|
|
static void SCPerfReleaseOPCtx()
|
|
|
|
|
{
|
|
|
|
|
if (sc_perf_op_ctx == NULL) {
|
|
|
|
|
if (stats_ctx == NULL) {
|
|
|
|
|
SCLogDebug("Counter module has been disabled");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StatsThreadStore *sts = NULL;
|
|
|
|
|
StatsThreadStore *temp = NULL;
|
|
|
|
|
sts = sc_perf_op_ctx->sts;
|
|
|
|
|
sts = stats_ctx->sts;
|
|
|
|
|
|
|
|
|
|
while (sts != NULL) {
|
|
|
|
|
if (sts->tm_name != NULL)
|
|
|
|
|
@ -268,8 +260,8 @@ static void SCPerfReleaseOPCtx()
|
|
|
|
|
sts = temp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCFree(sc_perf_op_ctx);
|
|
|
|
|
sc_perf_op_ctx = NULL;
|
|
|
|
|
SCFree(stats_ctx);
|
|
|
|
|
stats_ctx = NULL;
|
|
|
|
|
|
|
|
|
|
/* free stats table */
|
|
|
|
|
if (stats_table.stats != NULL) {
|
|
|
|
|
@ -310,7 +302,7 @@ static void *SCPerfMgmtThread(void *arg)
|
|
|
|
|
|
|
|
|
|
SCDropCaps(tv_local);
|
|
|
|
|
|
|
|
|
|
if (sc_perf_op_ctx == NULL) {
|
|
|
|
|
if (stats_ctx == NULL) {
|
|
|
|
|
SCLogError(SC_ERR_PERF_STATS_NOT_INIT, "Perf Counter API not init"
|
|
|
|
|
"SCPerfInitCounterApi() has to be called first");
|
|
|
|
|
TmThreadsSetFlag(tv_local, THV_CLOSED | THV_RUNNING_DONE);
|
|
|
|
|
@ -336,7 +328,7 @@ static void *SCPerfMgmtThread(void *arg)
|
|
|
|
|
TmThreadsUnsetFlag(tv_local, THV_PAUSED);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cond_time.tv_sec = time(NULL) + sc_counter_tts;
|
|
|
|
|
cond_time.tv_sec = time(NULL) + stats_tts;
|
|
|
|
|
cond_time.tv_nsec = 0;
|
|
|
|
|
|
|
|
|
|
/* wait for the set time, or until we are woken up by
|
|
|
|
|
@ -345,7 +337,7 @@ static void *SCPerfMgmtThread(void *arg)
|
|
|
|
|
SCCtrlCondTimedwait(tv_local->ctrl_cond, tv_local->ctrl_mutex, &cond_time);
|
|
|
|
|
SCCtrlMutexUnlock(tv_local->ctrl_mutex);
|
|
|
|
|
|
|
|
|
|
SCPerfOutputCounters(tv_local);
|
|
|
|
|
StatsOutput(tv_local);
|
|
|
|
|
|
|
|
|
|
if (TmThreadsCheckFlag(tv_local, THV_KILL)) {
|
|
|
|
|
run = 0;
|
|
|
|
|
@ -397,7 +389,7 @@ static void *SCPerfWakeupThread(void *arg)
|
|
|
|
|
|
|
|
|
|
SCDropCaps(tv_local);
|
|
|
|
|
|
|
|
|
|
if (sc_perf_op_ctx == NULL) {
|
|
|
|
|
if (stats_ctx == NULL) {
|
|
|
|
|
SCLogError(SC_ERR_PERF_STATS_NOT_INIT, "Perf Counter API not init"
|
|
|
|
|
"SCPerfInitCounterApi() has to be called first");
|
|
|
|
|
TmThreadsSetFlag(tv_local, THV_CLOSED | THV_RUNNING_DONE);
|
|
|
|
|
@ -588,16 +580,16 @@ static uint64_t SCPerfOutputCalculateCounterValue(SCPerfCounter *pc)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \brief The file output interface for the Perf Counter api
|
|
|
|
|
* \brief The output interface for the Stats API
|
|
|
|
|
*/
|
|
|
|
|
static int SCPerfOutputCounterFileIface(ThreadVars *tv)
|
|
|
|
|
static int StatsOutput(ThreadVars *tv)
|
|
|
|
|
{
|
|
|
|
|
const StatsThreadStore *sts = NULL;
|
|
|
|
|
const SCPerfCounter *pc = NULL;
|
|
|
|
|
void *td = stats_thread_data;
|
|
|
|
|
|
|
|
|
|
if (stats_table.nstats == 0) {
|
|
|
|
|
StatsThreadRegister("Global", &sc_perf_op_ctx->global_counter_ctx);
|
|
|
|
|
StatsThreadRegister("Global", &stats_ctx->global_counter_ctx);
|
|
|
|
|
|
|
|
|
|
uint32_t nstats = counters_global_id;
|
|
|
|
|
|
|
|
|
|
@ -609,7 +601,7 @@ static int SCPerfOutputCounterFileIface(ThreadVars *tv)
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stats_table.ntstats = sc_perf_op_ctx->sts_cnt;
|
|
|
|
|
stats_table.ntstats = stats_ctx->sts_cnt;
|
|
|
|
|
uint32_t array_size = stats_table.nstats * sizeof(StatsRecord);
|
|
|
|
|
stats_table.tstats = SCCalloc(stats_table.ntstats, array_size);
|
|
|
|
|
if (stats_table.tstats == NULL) {
|
|
|
|
|
@ -618,7 +610,7 @@ static int SCPerfOutputCounterFileIface(ThreadVars *tv)
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stats_table.start_time = sc_start_time;
|
|
|
|
|
stats_table.start_time = stats_start_time;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** temporary local table to merge the per thread counters,
|
|
|
|
|
@ -631,12 +623,12 @@ static int SCPerfOutputCounterFileIface(ThreadVars *tv)
|
|
|
|
|
memset(&merge_table, 0x00,
|
|
|
|
|
counters_global_id * sizeof(struct CountersMergeTable));
|
|
|
|
|
|
|
|
|
|
int thread = sc_perf_op_ctx->sts_cnt - 1;
|
|
|
|
|
int thread = stats_ctx->sts_cnt - 1;
|
|
|
|
|
StatsRecord *table = stats_table.stats;
|
|
|
|
|
|
|
|
|
|
/* Loop through the thread counter stores. The global counters
|
|
|
|
|
* are in a separate store inside this list. */
|
|
|
|
|
sts = sc_perf_op_ctx->sts;
|
|
|
|
|
sts = stats_ctx->sts;
|
|
|
|
|
SCLogDebug("sts %p", sts);
|
|
|
|
|
while (sts != NULL) {
|
|
|
|
|
BUG_ON(thread < 0);
|
|
|
|
|
@ -777,7 +769,7 @@ TmEcode SCPerfOutputCounterSocket(json_t *cmd,
|
|
|
|
|
uint32_t u = 0;
|
|
|
|
|
int flag = 0;
|
|
|
|
|
|
|
|
|
|
if (sc_perf_op_ctx == NULL) {
|
|
|
|
|
if (stats_ctx == NULL) {
|
|
|
|
|
json_object_set_new(answer, "message",
|
|
|
|
|
json_string("No performance counter context"));
|
|
|
|
|
return TM_ECODE_FAILED;
|
|
|
|
|
@ -792,7 +784,7 @@ TmEcode SCPerfOutputCounterSocket(json_t *cmd,
|
|
|
|
|
return TM_ECODE_FAILED;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sts = sc_perf_op_ctx->sts;
|
|
|
|
|
sts = stats_ctx->sts;
|
|
|
|
|
while (sts != NULL) {
|
|
|
|
|
json_t *jdata;
|
|
|
|
|
int filled = 0;
|
|
|
|
|
@ -863,12 +855,12 @@ TmEcode SCPerfOutputCounterSocket(json_t *cmd,
|
|
|
|
|
*/
|
|
|
|
|
void StatsInit(void)
|
|
|
|
|
{
|
|
|
|
|
BUG_ON(sc_perf_op_ctx != NULL);
|
|
|
|
|
if ( (sc_perf_op_ctx = SCMalloc(sizeof(StatsGlobalContext))) == NULL) {
|
|
|
|
|
BUG_ON(stats_ctx != NULL);
|
|
|
|
|
if ( (stats_ctx = SCMalloc(sizeof(StatsGlobalContext))) == NULL) {
|
|
|
|
|
SCLogError(SC_ERR_FATAL, "Fatal error encountered in SCPerfInitOPCtx. Exiting...");
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
}
|
|
|
|
|
memset(sc_perf_op_ctx, 0, sizeof(StatsGlobalContext));
|
|
|
|
|
memset(stats_ctx, 0, sizeof(StatsGlobalContext));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StatsSetupPostConfig(void)
|
|
|
|
|
@ -887,7 +879,7 @@ void SCPerfSpawnThreads(void)
|
|
|
|
|
{
|
|
|
|
|
SCEnter();
|
|
|
|
|
|
|
|
|
|
if (!sc_counter_enabled) {
|
|
|
|
|
if (!stats_enabled) {
|
|
|
|
|
SCReturn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1001,40 +993,18 @@ uint16_t StatsRegisterMaxCounter(char *cname, struct ThreadVars_ *tv)
|
|
|
|
|
uint16_t StatsRegisterGlobalCounter(char *cname, uint64_t (*Func)(void))
|
|
|
|
|
{
|
|
|
|
|
#ifdef UNITTESTS
|
|
|
|
|
if (sc_perf_op_ctx == NULL)
|
|
|
|
|
if (stats_ctx == NULL)
|
|
|
|
|
return 0;
|
|
|
|
|
#else
|
|
|
|
|
BUG_ON(sc_perf_op_ctx == NULL);
|
|
|
|
|
BUG_ON(stats_ctx == NULL);
|
|
|
|
|
#endif
|
|
|
|
|
uint16_t id = StatsRegisterQualifiedCounter(cname, NULL,
|
|
|
|
|
&(sc_perf_op_ctx->global_counter_ctx),
|
|
|
|
|
&(stats_ctx->global_counter_ctx),
|
|
|
|
|
STATS_TYPE_FUNC,
|
|
|
|
|
Func);
|
|
|
|
|
return id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* \brief Registers a normal, unqualified counter
|
|
|
|
|
*
|
|
|
|
|
* \param cname Name of the counter, to be registered
|
|
|
|
|
* \param tm_name Name of the engine module under which the counter has to be
|
|
|
|
|
* registered
|
|
|
|
|
* \param type Datatype of this counter variable
|
|
|
|
|
* \param pctx SCPerfPublicContext corresponding to the tm_name key under which the
|
|
|
|
|
* key has to be registered
|
|
|
|
|
*
|
|
|
|
|
* \retval id Counter id for the newly registered counter, or the already
|
|
|
|
|
* present counter
|
|
|
|
|
*/
|
|
|
|
|
static uint16_t SCPerfRegisterCounter(char *cname, char *tm_name,
|
|
|
|
|
SCPerfPublicContext *pctx)
|
|
|
|
|
{
|
|
|
|
|
uint16_t id = StatsRegisterQualifiedCounter(cname, tm_name, pctx,
|
|
|
|
|
STATS_TYPE_NORMAL, NULL);
|
|
|
|
|
|
|
|
|
|
return id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
typedef struct CountersIdType_ {
|
|
|
|
|
uint16_t id;
|
|
|
|
|
const char *string;
|
|
|
|
|
@ -1097,7 +1067,7 @@ void CountersIdHashFreeFunc(void *data)
|
|
|
|
|
*/
|
|
|
|
|
static int StatsThreadRegister(const char *thread_name, SCPerfPublicContext *pctx)
|
|
|
|
|
{
|
|
|
|
|
if (sc_perf_op_ctx == NULL) {
|
|
|
|
|
if (stats_ctx == NULL) {
|
|
|
|
|
SCLogDebug("Counter module has been disabled");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
@ -1109,23 +1079,23 @@ static int StatsThreadRegister(const char *thread_name, SCPerfPublicContext *pct
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCMutexLock(&sc_perf_op_ctx->sts_lock);
|
|
|
|
|
if (sc_perf_op_ctx->counters_id_hash == NULL) {
|
|
|
|
|
sc_perf_op_ctx->counters_id_hash = HashTableInit(256, CountersIdHashFunc,
|
|
|
|
|
SCMutexLock(&stats_ctx->sts_lock);
|
|
|
|
|
if (stats_ctx->counters_id_hash == NULL) {
|
|
|
|
|
stats_ctx->counters_id_hash = HashTableInit(256, CountersIdHashFunc,
|
|
|
|
|
CountersIdHashCompareFunc,
|
|
|
|
|
CountersIdHashFreeFunc);
|
|
|
|
|
BUG_ON(sc_perf_op_ctx->counters_id_hash == NULL);
|
|
|
|
|
BUG_ON(stats_ctx->counters_id_hash == NULL);
|
|
|
|
|
}
|
|
|
|
|
SCPerfCounter *pc = pctx->head;
|
|
|
|
|
while (pc != NULL) {
|
|
|
|
|
CountersIdType t = { 0, pc->cname }, *id = NULL;
|
|
|
|
|
id = HashTableLookup(sc_perf_op_ctx->counters_id_hash, &t, sizeof(t));
|
|
|
|
|
id = HashTableLookup(stats_ctx->counters_id_hash, &t, sizeof(t));
|
|
|
|
|
if (id == NULL) {
|
|
|
|
|
id = SCCalloc(1, sizeof(*id));
|
|
|
|
|
BUG_ON(id == NULL);
|
|
|
|
|
id->id = counters_global_id++;
|
|
|
|
|
id->string = pc->cname;
|
|
|
|
|
BUG_ON(HashTableAdd(sc_perf_op_ctx->counters_id_hash, id, sizeof(*id)) < 0);
|
|
|
|
|
BUG_ON(HashTableAdd(stats_ctx->counters_id_hash, id, sizeof(*id)) < 0);
|
|
|
|
|
}
|
|
|
|
|
pc->gid = id->id;
|
|
|
|
|
pc = pc->next;
|
|
|
|
|
@ -1133,7 +1103,7 @@ static int StatsThreadRegister(const char *thread_name, SCPerfPublicContext *pct
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( (temp = SCMalloc(sizeof(StatsThreadStore))) == NULL) {
|
|
|
|
|
SCMutexUnlock(&sc_perf_op_ctx->sts_lock);
|
|
|
|
|
SCMutexUnlock(&stats_ctx->sts_lock);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
memset(temp, 0, sizeof(StatsThreadStore));
|
|
|
|
|
@ -1143,16 +1113,16 @@ static int StatsThreadRegister(const char *thread_name, SCPerfPublicContext *pct
|
|
|
|
|
temp->name = SCStrdup(thread_name);
|
|
|
|
|
if (unlikely(temp->name == NULL)) {
|
|
|
|
|
SCFree(temp);
|
|
|
|
|
SCMutexUnlock(&sc_perf_op_ctx->sts_lock);
|
|
|
|
|
SCMutexUnlock(&stats_ctx->sts_lock);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
temp->next = sc_perf_op_ctx->sts;
|
|
|
|
|
sc_perf_op_ctx->sts = temp;
|
|
|
|
|
sc_perf_op_ctx->sts_cnt++;
|
|
|
|
|
SCLogDebug("sc_perf_op_ctx->sts %p", sc_perf_op_ctx->sts);
|
|
|
|
|
temp->next = stats_ctx->sts;
|
|
|
|
|
stats_ctx->sts = temp;
|
|
|
|
|
stats_ctx->sts_cnt++;
|
|
|
|
|
SCLogDebug("stats_ctx->sts %p", stats_ctx->sts);
|
|
|
|
|
|
|
|
|
|
SCMutexUnlock(&sc_perf_op_ctx->sts_lock);
|
|
|
|
|
SCMutexUnlock(&stats_ctx->sts_lock);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1336,13 +1306,34 @@ void SCPerfReleasePCA(SCPerfPrivateContext *pca)
|
|
|
|
|
/*----------------------------------Unit_Tests--------------------------------*/
|
|
|
|
|
|
|
|
|
|
#ifdef UNITTESTS
|
|
|
|
|
/** \internal
|
|
|
|
|
* \brief Registers a normal, unqualified counter
|
|
|
|
|
*
|
|
|
|
|
* \param cname Name of the counter, to be registered
|
|
|
|
|
* \param tm_name Name of the engine module under which the counter has to be
|
|
|
|
|
* registered
|
|
|
|
|
* \param type Datatype of this counter variable
|
|
|
|
|
* \param pctx SCPerfPublicContext corresponding to the tm_name key under which the
|
|
|
|
|
* key has to be registered
|
|
|
|
|
*
|
|
|
|
|
* \retval id Counter id for the newly registered counter, or the already
|
|
|
|
|
* present counter
|
|
|
|
|
*/
|
|
|
|
|
static uint16_t RegisterCounter(char *cname, char *tm_name,
|
|
|
|
|
SCPerfPublicContext *pctx)
|
|
|
|
|
{
|
|
|
|
|
uint16_t id = StatsRegisterQualifiedCounter(cname, tm_name, pctx,
|
|
|
|
|
STATS_TYPE_NORMAL, NULL);
|
|
|
|
|
return id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int SCPerfTestCounterReg02()
|
|
|
|
|
{
|
|
|
|
|
SCPerfPublicContext pctx;
|
|
|
|
|
|
|
|
|
|
memset(&pctx, 0, sizeof(SCPerfPublicContext));
|
|
|
|
|
|
|
|
|
|
return SCPerfRegisterCounter(NULL, NULL, &pctx);
|
|
|
|
|
return RegisterCounter(NULL, NULL, &pctx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int SCPerfTestCounterReg03()
|
|
|
|
|
@ -1352,7 +1343,7 @@ static int SCPerfTestCounterReg03()
|
|
|
|
|
|
|
|
|
|
memset(&pctx, 0, sizeof(SCPerfPublicContext));
|
|
|
|
|
|
|
|
|
|
result = SCPerfRegisterCounter("t1", "c1", &pctx);
|
|
|
|
|
result = RegisterCounter("t1", "c1", &pctx);
|
|
|
|
|
|
|
|
|
|
SCPerfReleasePerfCounterS(pctx.head);
|
|
|
|
|
|
|
|
|
|
@ -1366,11 +1357,11 @@ static int SCPerfTestCounterReg04()
|
|
|
|
|
|
|
|
|
|
memset(&pctx, 0, sizeof(SCPerfPublicContext));
|
|
|
|
|
|
|
|
|
|
SCPerfRegisterCounter("t1", "c1", &pctx);
|
|
|
|
|
SCPerfRegisterCounter("t2", "c2", &pctx);
|
|
|
|
|
SCPerfRegisterCounter("t3", "c3", &pctx);
|
|
|
|
|
RegisterCounter("t1", "c1", &pctx);
|
|
|
|
|
RegisterCounter("t2", "c2", &pctx);
|
|
|
|
|
RegisterCounter("t3", "c3", &pctx);
|
|
|
|
|
|
|
|
|
|
result = SCPerfRegisterCounter("t1", "c1", &pctx);
|
|
|
|
|
result = RegisterCounter("t1", "c1", &pctx);
|
|
|
|
|
|
|
|
|
|
SCPerfReleasePerfCounterS(pctx.head);
|
|
|
|
|
|
|
|
|
|
@ -1384,7 +1375,7 @@ static int SCPerfTestGetCntArray05()
|
|
|
|
|
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
id = SCPerfRegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
id = RegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
if (id != 1) {
|
|
|
|
|
printf("id %d: ", id);
|
|
|
|
|
return 0;
|
|
|
|
|
@ -1402,7 +1393,7 @@ static int SCPerfTestGetCntArray06()
|
|
|
|
|
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
id = SCPerfRegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
id = RegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
if (id != 1)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
@ -1426,8 +1417,8 @@ static int SCPerfTestCntArraySize07()
|
|
|
|
|
|
|
|
|
|
//pca = (SCPerfPrivateContext *)&tv.perf_private_ctx;
|
|
|
|
|
|
|
|
|
|
SCPerfRegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
SCPerfRegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
RegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
RegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
|
|
|
|
|
SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
|
|
|
|
|
pca = &tv.perf_private_ctx;
|
|
|
|
|
@ -1452,7 +1443,7 @@ static int SCPerfTestUpdateCounter08()
|
|
|
|
|
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
id = SCPerfRegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
id = RegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
|
|
|
|
|
SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
|
|
|
|
|
pca = &tv.perf_private_ctx;
|
|
|
|
|
@ -1477,11 +1468,11 @@ static int SCPerfTestUpdateCounter09()
|
|
|
|
|
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
id1 = SCPerfRegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
SCPerfRegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
SCPerfRegisterCounter("t3", "c3", &tv.perf_public_ctx);
|
|
|
|
|
SCPerfRegisterCounter("t4", "c4", &tv.perf_public_ctx);
|
|
|
|
|
id2 = SCPerfRegisterCounter("t5", "c5", &tv.perf_public_ctx);
|
|
|
|
|
id1 = RegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
RegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
RegisterCounter("t3", "c3", &tv.perf_public_ctx);
|
|
|
|
|
RegisterCounter("t4", "c4", &tv.perf_public_ctx);
|
|
|
|
|
id2 = RegisterCounter("t5", "c5", &tv.perf_public_ctx);
|
|
|
|
|
|
|
|
|
|
SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
|
|
|
|
|
pca = &tv.perf_private_ctx;
|
|
|
|
|
@ -1507,9 +1498,9 @@ static int SCPerfTestUpdateGlobalCounter10()
|
|
|
|
|
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
id1 = SCPerfRegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
id2 = SCPerfRegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
id3 = SCPerfRegisterCounter("t3", "c3", &tv.perf_public_ctx);
|
|
|
|
|
id1 = RegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
id2 = RegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
id3 = RegisterCounter("t3", "c3", &tv.perf_public_ctx);
|
|
|
|
|
|
|
|
|
|
SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
|
|
|
|
|
pca = &tv.perf_private_ctx;
|
|
|
|
|
@ -1541,10 +1532,10 @@ static int SCPerfTestCounterValues11()
|
|
|
|
|
|
|
|
|
|
memset(&tv, 0, sizeof(ThreadVars));
|
|
|
|
|
|
|
|
|
|
id1 = SCPerfRegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
id2 = SCPerfRegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
id3 = SCPerfRegisterCounter("t3", "c3", &tv.perf_public_ctx);
|
|
|
|
|
id4 = SCPerfRegisterCounter("t4", "c4", &tv.perf_public_ctx);
|
|
|
|
|
id1 = RegisterCounter("t1", "c1", &tv.perf_public_ctx);
|
|
|
|
|
id2 = RegisterCounter("t2", "c2", &tv.perf_public_ctx);
|
|
|
|
|
id3 = RegisterCounter("t3", "c3", &tv.perf_public_ctx);
|
|
|
|
|
id4 = RegisterCounter("t4", "c4", &tv.perf_public_ctx);
|
|
|
|
|
|
|
|
|
|
SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
|
|
|
|
|
pca = &tv.perf_private_ctx;
|
|
|
|
|
|