Devel-NYTProf
view release on metacpan or search on metacpan
{"NYTP_FIDi_SUBS_CALLED", NYTP_FIDi_SUBS_CALLED},
{"NYTP_FIDi_elements", NYTP_FIDi_elements},
/* NYTP_SIi_* */
{"NYTP_SIi_FID", NYTP_SIi_FID},
{"NYTP_SIi_FIRST_LINE", NYTP_SIi_FIRST_LINE},
{"NYTP_SIi_LAST_LINE", NYTP_SIi_LAST_LINE},
{"NYTP_SIi_CALL_COUNT", NYTP_SIi_CALL_COUNT},
{"NYTP_SIi_INCL_RTIME", NYTP_SIi_INCL_RTIME},
{"NYTP_SIi_EXCL_RTIME", NYTP_SIi_EXCL_RTIME},
{"NYTP_SIi_SUB_NAME", NYTP_SIi_SUB_NAME},
{"NYTP_SIi_PROFILE", NYTP_SIi_PROFILE},
{"NYTP_SIi_REC_DEPTH", NYTP_SIi_REC_DEPTH},
{"NYTP_SIi_RECI_RTIME", NYTP_SIi_RECI_RTIME},
{"NYTP_SIi_CALLED_BY", NYTP_SIi_CALLED_BY},
{"NYTP_SIi_elements", NYTP_SIi_elements},
/* NYTP_SCi_* */
{"NYTP_SCi_CALL_COUNT", NYTP_SCi_CALL_COUNT},
{"NYTP_SCi_INCL_RTIME", NYTP_SCi_INCL_RTIME},
{"NYTP_SCi_EXCL_RTIME", NYTP_SCi_EXCL_RTIME},
{"NYTP_SCi_INCL_TICKS", NYTP_SCi_INCL_TICKS},
{"NYTP_SCi_EXCL_TICKS", NYTP_SCi_EXCL_TICKS},
{"NYTP_SCi_RECI_RTIME", NYTP_SCi_RECI_RTIME},
{"NYTP_SCi_REC_DEPTH", NYTP_SCi_REC_DEPTH},
{"NYTP_SCi_CALLING_SUB", NYTP_SCi_CALLING_SUB},
{"NYTP_SCi_elements", NYTP_SCi_elements},
/* others */
{"NYTP_DEFAULT_COMPRESSION", default_compression_level},
{"NYTP_FILE_MAJOR_VERSION", NYTP_FILE_MAJOR_VERSION},
{"NYTP_FILE_MINOR_VERSION", NYTP_FILE_MINOR_VERSION},
};
/***********************************
* Perl XS Code Below Here *
***********************************/
MODULE = Devel::NYTProf PACKAGE = Devel::NYTProf::Constants
PROTOTYPES: DISABLE
BOOT:
{
HV *stash = gv_stashpv("Devel::NYTProf::Constants", GV_ADDWARN);
struct int_constants_t *constant = int_constants;
const struct int_constants_t *end = constant + C_ARRAY_LENGTH(int_constants);
do {
/* 5.8.x and earlier don't declare newCONSTSUB() as const char *, even
though it is. */
newCONSTSUB(stash, (char *) constant->name, newSViv(constant->value));
} while (++constant < end);
newCONSTSUB(stash, "NYTP_ZLIB_VERSION", newSVpv(ZLIB_VERSION, 0));
}
MODULE = Devel::NYTProf PACKAGE = Devel::NYTProf::Util
PROTOTYPES: DISABLE
void
trace_level()
PPCODE:
XSRETURN_IV(trace_level);
MODULE = Devel::NYTProf PACKAGE = Devel::NYTProf::Test
PROTOTYPES: DISABLE
void
example_xsub(const char *unused="", SV *action=Nullsv, SV *arg=Nullsv)
CODE:
PERL_UNUSED_VAR(unused);
if (!action)
XSRETURN(0);
if (SvROK(action) && SvTYPE(SvRV(action))==SVt_PVCV) {
/* perl <= 5.8.8 doesn't use OP_ENTERSUB so won't be seen by NYTProf */
PUSHMARK(SP);
call_sv(action, G_VOID|G_DISCARD);
}
else if (strEQ(SvPV_nolen(action),"eval"))
eval_pv(SvPV_nolen(arg), TRUE);
else if (strEQ(SvPV_nolen(action),"die"))
croak("example_xsub(die)");
logwarn("example_xsub: unknown action '%s'\n", SvPV_nolen(action));
void
example_xsub_eval(...)
CODE:
PERL_UNUSED_VAR(items);
/* to enable testing of string evals in embedded environments
* where there's no caller file information available.
* Only it doesn't actually do that because perl knows
* what it's executing at the time eval_pv() gets called.
* We need a better test, closer to true embedded.
*/
eval_pv("Devel::NYTProf::Test::example_xsub()", 1);
void
set_errno(int e)
CODE:
SETERRNO(e, 0);
void
ticks_for_usleep(long u_seconds)
PPCODE:
NV elapsed = -1;
NV overflow = -1;
#ifdef HAS_SELECT
time_of_day_t s_time;
time_of_day_t e_time;
struct timeval timebuf;
timebuf.tv_sec = (long)(u_seconds / 1000000);
timebuf.tv_usec = u_seconds - (timebuf.tv_sec * 1000000);
if (!last_pid)
_init_profiler_clock(aTHX);
get_time_of_day(s_time);
PerlSock_select(0, 0, 0, 0, &timebuf);
get_time_of_day(e_time);
get_NV_ticks_between(s_time, e_time, elapsed, overflow);
#else
PERL_UNUSED_VAR(u_seconds);
#endif
EXTEND(SP, 4);
PUSHs(sv_2mortal(newSVnv(elapsed)));
PUSHs(sv_2mortal(newSVnv(overflow)));
PUSHs(sv_2mortal(newSVnv(ticks_per_sec)));
PUSHs(sv_2mortal(newSViv(profile_clock)));
MODULE = Devel::NYTProf PACKAGE = DB
PROTOTYPES: DISABLE
void
DB_profiler(...)
CODE:
/* this sub gets aliased as "DB::DB" by NYTProf.pm if use_db_sub is true */
PERL_UNUSED_VAR(items);
if (opt_use_db_sub)
DB_stmt(aTHX_ NULL, PL_op);
else
logwarn("DB::DB called unexpectedly\n");
void
set_option(const char *opt, const char *value)
C_ARGS:
aTHX_ opt, value
int
init_profiler()
C_ARGS:
aTHX
int
enable_profile(char *file = NULL)
C_ARGS:
aTHX_ file
POSTCALL:
/* if profiler was previously disabled */
/* then arrange for the enable_profile call to be noted */
if (!RETVAL) {
DB_stmt(aTHX_ PL_curcop, PL_op);
}
( run in 0.862 second using v1.01-cache-2.11-cpan-5511b514fd6 )