static ProfilerEntry* newProfilerEntry(ProfilerObject *pObj, void *key, PyObject *userObj) { ProfilerEntry *self; self = (ProfilerEntry*) malloc(sizeof(ProfilerEntry)); if (self == NULL) { pObj->flags |= POF_NOMEMORY; return NULL; } userObj = normalizeUserObj(userObj); if (userObj == NULL) { PyErr_Clear(); free(self); pObj->flags |= POF_NOMEMORY; return NULL; } self->header.key = key; self->userObj = userObj; self->tt = 0; self->it = 0; self->callcount = 0; self->recursivecallcount = 0; self->recursionLevel = 0; self->calls = EMPTY_ROTATING_TREE; RotatingTree_Add(&pObj->profilerEntries, &self->header); return self; }
static void SelectStackByKey(ProfilerObject *pObj, void *key) { ProfilerStack *old = pObj->currentProfilerStack; ProfilerStack *stack; if (old) { if (old->header.key == key) return; old->t0 = pObj->currentTime; } stack = (ProfilerStack*)RotatingTree_Get(&pObj->profilerStacks, key); if (stack) { if (stack->currentProfilerContext) stack->currentProfilerContext->paused += pObj->currentTime - stack->t0; } else { stack = (ProfilerStack*) malloc(sizeof(ProfilerStack)); if (stack != NULL) { stack->currentProfilerContext = NULL; stack->header.key = key; RotatingTree_Add(&pObj->profilerStacks, (rotating_node_t*)stack); ++pObj->nProfilerStacks; } } pObj->currentProfilerStack = stack; }
static ProfilerSubEntry * newSubEntry(ProfilerObject *pObj, ProfilerEntry *caller, ProfilerEntry* entry) { ProfilerSubEntry *self; self = (ProfilerSubEntry*) malloc(sizeof(ProfilerSubEntry)); if (self == NULL) { pObj->flags |= POF_NOMEMORY; return NULL; } self->header.key = (void *)entry; self->tt = 0; self->it = 0; self->callcount = 0; self->recursivecallcount = 0; self->recursionLevel = 0; RotatingTree_Add(&caller->calls, &self->header); return self; }