Apache-Scoreboard
view release on metacpan or search on metacpan
Scoreboard.xs view on Meta::CPAN
if (!found) {
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
Apache::ScoreboardWorkerScore
next_active_worker_score(self, mws)
Apache::ScoreboardParentScore self
Apache::ScoreboardWorkerScore mws
PREINIT:
int next_idx;
int found = 0;
CODE:
next_idx = mws->worker_idx;
while (++next_idx < self->image->thread_limit) {
worker_score *ws = my_get_scoreboard_worker(aTHX_ self->image,
mws->parent_idx, next_idx);
if (ACTIVE_WORKER(ws)) {
RETVAL = (modperl_worker_score_t *)apr_pcalloc(self->image->pool,
sizeof(*RETVAL));
RETVAL->record = ws;
RETVAL->parent_idx = mws->parent_idx;
RETVAL->worker_idx = next_idx;
found++;
break;
}
}
if (!found) {
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
pid_t
parent_score_pid(self)
Apache::ScoreboardParentScore self
MODULE = Apache::Scoreboard PACKAGE = Apache::ScoreboardWorkerScore PREFIX = worker_score_
void
times(self)
Apache::ScoreboardWorkerScore self
PPCODE:
if (GIMME == G_ARRAY) {
/* same return values as CORE::times() */
EXTEND(sp, 4);
PUSHs(sv_2mortal(newSViv(self->record->times.tms_utime)));
PUSHs(sv_2mortal(newSViv(self->record->times.tms_stime)));
PUSHs(sv_2mortal(newSViv(self->record->times.tms_cutime)));
PUSHs(sv_2mortal(newSViv(self->record->times.tms_cstime)));
}
else {
#ifdef _SC_CLK_TCK
float tick = sysconf(_SC_CLK_TCK);
#else
float tick = HZ;
#endif
if (self->record->access_count) {
/* cpu %, same value mod_status displays */
float RETVAL = (self->record->times.tms_utime +
self->record->times.tms_stime +
self->record->times.tms_cutime +
self->record->times.tms_cstime);
XPUSHs(sv_2mortal(newSVnv((double)RETVAL/tick)));
}
else {
XPUSHs(sv_2mortal(newSViv((0))));
}
}
void
start_time(self)
Apache::ScoreboardWorkerScore self
ALIAS:
stop_time = 1
PREINIT:
apr_time_t tp;
PPCODE:
ix = ix; /* warnings */
tp = (XSANY.any_i32 == 0) ?
self->record->start_time : self->record->stop_time;
SB_TRACE(MP_FUNC, "%s_time: %5" APR_TIME_T_FMT "\n",
(XSANY.any_i32 == 0 ? "start" : "stop"), tp);
{
SB_TRACE(MP_FUNC, "start: %5" APR_TIME_T_FMT "\n"
"stop: %5" APR_TIME_T_FMT "\n"
"last used: %5" APR_TIME_T_FMT "\n",
self->record->start_time,
self->record->stop_time,
self->record->last_used);
}
/* do the same as Time::HiRes::gettimeofday */
if (GIMME == G_ARRAY) {
EXTEND(sp, 2);
PUSHs(sv_2mortal(newSViv(apr_time_sec(tp))));
PUSHs(sv_2mortal(newSViv(apr_time_usec(tp))));
}
else {
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSVnv(apr_time_sec(tp))));
}
long
req_time(self)
Apache::ScoreboardWorkerScore self
CODE:
if (self->record->start_time == 0L) {
RETVAL = 0L;
}
else {
RETVAL = (long)
((self->record->stop_time - self->record->start_time) / 1000);
}
if (RETVAL < 0L || !self->record->access_count) {
RETVAL = 0L;
}
OUTPUT:
RETVAL
SV *
worker_score_status(self)
Apache::ScoreboardWorkerScore self
CODE:
RETVAL = newSV(0);
sv_setnv(RETVAL, (double)self->record->status);
Perl_sv_setpvf(aTHX_ RETVAL, "%c", status_flags[self->record->status]);
SvNOK_on(RETVAL); /* dual-var */
OUTPUT:
RETVAL
# at the moment always gives 0 (blame httpd)
( run in 1.108 second using v1.01-cache-2.11-cpan-71847e10f99 )