Nobody on python-dev seemed particularly bothered that Hotshot generates half-
meaningless numbers, but I figured out I would fix that bug anyway.
This commit is contained in:
parent
28b32ac6bc
commit
de5f05f3b1
@ -843,38 +843,6 @@ get_tdelta(ProfilerObject *self)
|
|||||||
|
|
||||||
/* The workhorse: the profiler callback function. */
|
/* The workhorse: the profiler callback function. */
|
||||||
|
|
||||||
static int
|
|
||||||
profiler_callback(ProfilerObject *self, PyFrameObject *frame, int what,
|
|
||||||
PyObject *arg)
|
|
||||||
{
|
|
||||||
int tdelta = -1;
|
|
||||||
int fileno;
|
|
||||||
|
|
||||||
if (self->frametimings)
|
|
||||||
tdelta = get_tdelta(self);
|
|
||||||
switch (what) {
|
|
||||||
case PyTrace_CALL:
|
|
||||||
fileno = get_fileno(self, frame->f_code);
|
|
||||||
if (fileno < 0)
|
|
||||||
return -1;
|
|
||||||
if (pack_enter(self, fileno, tdelta,
|
|
||||||
frame->f_code->co_firstlineno) < 0)
|
|
||||||
return -1;
|
|
||||||
break;
|
|
||||||
case PyTrace_RETURN:
|
|
||||||
if (pack_exit(self, tdelta) < 0)
|
|
||||||
return -1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* should never get here */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Alternate callback when we want PyTrace_LINE events */
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
tracer_callback(ProfilerObject *self, PyFrameObject *frame, int what,
|
tracer_callback(ProfilerObject *self, PyFrameObject *frame, int what,
|
||||||
PyObject *arg)
|
PyObject *arg)
|
||||||
@ -893,7 +861,7 @@ tracer_callback(ProfilerObject *self, PyFrameObject *frame, int what,
|
|||||||
case PyTrace_RETURN:
|
case PyTrace_RETURN:
|
||||||
return pack_exit(self, get_tdelta(self));
|
return pack_exit(self, get_tdelta(self));
|
||||||
|
|
||||||
case PyTrace_LINE:
|
case PyTrace_LINE: /* we only get these events if we asked for them */
|
||||||
if (self->linetimings)
|
if (self->linetimings)
|
||||||
return pack_lineno_tdelta(self, frame->f_lineno,
|
return pack_lineno_tdelta(self, frame->f_lineno,
|
||||||
get_tdelta(self));
|
get_tdelta(self));
|
||||||
@ -987,7 +955,7 @@ do_start(ProfilerObject *self)
|
|||||||
if (self->lineevents)
|
if (self->lineevents)
|
||||||
PyEval_SetTrace((Py_tracefunc) tracer_callback, (PyObject *)self);
|
PyEval_SetTrace((Py_tracefunc) tracer_callback, (PyObject *)self);
|
||||||
else
|
else
|
||||||
PyEval_SetProfile((Py_tracefunc) profiler_callback, (PyObject *)self);
|
PyEval_SetProfile((Py_tracefunc) tracer_callback, (PyObject *)self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user