CDS
view release on metacpan or search on metacpan
lib/CDS/C.pm view on Meta::CPAN
SV * performanceStart() {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
SV * obj = newSVpvn((char *) &ts, sizeof(struct timespec));
SvREADONLY_on(obj);
return obj;
}
static struct timespec * timerFromSV(SV * sv) {
if (! SvPOK(sv)) return NULL;
STRLEN length;
struct timespec * ts = (struct timespec *) SvPV(sv, length);
return length == sizeof(struct timespec) ? ts : NULL;
}
SV * performanceElapsed(SV * svThis) {
struct timespec * this = timerFromSV(svThis);
if (this == NULL) return &PL_sv_undef;
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
time_t dsec = ts.tv_sec - this->tv_sec;
long dnano = ts.tv_nsec - this->tv_nsec;
long diff = (long) dsec * 1000 * 1000 + dnano / 1000;
return newSViv(diff);
}
( run in 0.616 second using v1.01-cache-2.11-cpan-49f99fa48dc )