## 10.8.2 HotProfile Class

This profiler is the fastest derived profile example. It does not calculate caller-callee relationships, and does not calculate cumulative time under a function. It only calculates time spent in a function, so it runs very quickly (re: very low overhead). In truth, the basic profiler is so fast, that is probably not worth the savings to give up the data, but this class still provides a nice example.

    class HotProfile(Profile):

        def trace_dispatch_exception(self, frame, t):
            rt, rtt, rfn, rframe, rcur = self.cur
            if rcur and not rframe is frame:
                return self.trace_dispatch_return(rframe, t)
            return 0

        def trace_dispatch_call(self, frame, t):
            self.cur = (t, 0, frame, self.cur)
            return 1

        def trace_dispatch_return(self, frame, t):
            rt, rtt, frame, rcur = self.cur

            rfn = `frame.f_code`

            pt, ptt, pframe, pcur = rcur
            self.cur = pt, ptt+rt, pframe, pcur

            if self.timings.has_key(rfn):
                nc, tt = self.timings[rfn]
                self.timings[rfn] = nc + 1, rt + rtt + tt
            else:
                self.timings[rfn] =      1, rt + rtt

            return 1

        def snapshot_stats(self):
            self.stats = {}
            for func in self.timings.keys():
                nc, tt = self.timings[func]
                nor_func = self.func_normalize(func)
                self.stats[nor_func] = nc, nc, tt, 0, {}