This is a long-ago patch I submitted to SF (1100924) to time the gc passes.
Barry approved it awhile ago. Been sitting in my sandbox for awhile as well.
This commit is contained in:
parent
f75225b448
commit
c34b931d78
|
@ -734,6 +734,8 @@ collect(int generation)
|
||||||
PyGC_Head unreachable; /* non-problematic unreachable trash */
|
PyGC_Head unreachable; /* non-problematic unreachable trash */
|
||||||
PyGC_Head finalizers; /* objects with, & reachable from, __del__ */
|
PyGC_Head finalizers; /* objects with, & reachable from, __del__ */
|
||||||
PyGC_Head *gc;
|
PyGC_Head *gc;
|
||||||
|
static PyObject *tmod = NULL;
|
||||||
|
double t1 = 0.0;
|
||||||
|
|
||||||
if (delstr == NULL) {
|
if (delstr == NULL) {
|
||||||
delstr = PyString_InternFromString("__del__");
|
delstr = PyString_InternFromString("__del__");
|
||||||
|
@ -741,7 +743,23 @@ collect(int generation)
|
||||||
Py_FatalError("gc couldn't allocate \"__del__\"");
|
Py_FatalError("gc couldn't allocate \"__del__\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tmod == NULL) {
|
||||||
|
tmod = PyImport_ImportModule("time");
|
||||||
|
if (tmod == NULL)
|
||||||
|
PyErr_Clear();
|
||||||
|
}
|
||||||
|
|
||||||
if (debug & DEBUG_STATS) {
|
if (debug & DEBUG_STATS) {
|
||||||
|
if (tmod != NULL) {
|
||||||
|
PyObject *f = PyObject_CallMethod(tmod, "time", NULL);
|
||||||
|
if (f == NULL) {
|
||||||
|
PyErr_Clear();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
t1 = PyFloat_AsDouble(f);
|
||||||
|
Py_DECREF(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
PySys_WriteStderr("gc: collecting generation %d...\n",
|
PySys_WriteStderr("gc: collecting generation %d...\n",
|
||||||
generation);
|
generation);
|
||||||
PySys_WriteStderr("gc: objects in each generation:");
|
PySys_WriteStderr("gc: objects in each generation:");
|
||||||
|
@ -814,6 +832,17 @@ collect(int generation)
|
||||||
if (debug & DEBUG_COLLECTABLE) {
|
if (debug & DEBUG_COLLECTABLE) {
|
||||||
debug_cycle("collectable", FROM_GC(gc));
|
debug_cycle("collectable", FROM_GC(gc));
|
||||||
}
|
}
|
||||||
|
if (tmod != NULL && (debug & DEBUG_STATS)) {
|
||||||
|
PyObject *f = PyObject_CallMethod(tmod, "time", NULL);
|
||||||
|
if (f == NULL) {
|
||||||
|
PyErr_Clear();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
t1 = PyFloat_AsDouble(f)-t1;
|
||||||
|
Py_DECREF(f);
|
||||||
|
PySys_WriteStderr("gc: %.4fs elapsed.\n", t1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear weakrefs and invoke callbacks as necessary. */
|
/* Clear weakrefs and invoke callbacks as necessary. */
|
||||||
|
|
Loading…
Reference in New Issue