~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/lsprof.py

  • Committer: Michael Hudson
  • Date: 2009-03-16 19:00:16 UTC
  • mfrom: (297.1.11 ajaxy-changelog)
  • Revision ID: michael.hudson@canonical.com-20090316190016-uo56yypv8st02nqa
* load the information shown by the disclosure triangles in the changelog via
  xhr (this addresses bug #253950 somewhat)
* improve the reveal animation a bunch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
 
27
27
 
28
28
def profile(f, *args, **kwds):
29
 
    """XXX docstring"""
 
29
    """FIXME: docstring"""
30
30
    global _g_threadmap
31
31
    p = Profiler()
32
32
    p.enable(subcalls=True)
47
47
 
48
48
 
49
49
class Stats(object):
50
 
    """XXX docstring"""
 
50
    """FIXME: docstring"""
51
51
 
52
52
    def __init__(self, data, threads):
53
53
        self.data = data
54
54
        self.threads = threads
55
55
 
56
56
    def sort(self, crit="inlinetime"):
57
 
        """XXX docstring"""
 
57
        """FIXME: docstring"""
58
58
        if crit not in profiler_entry.__dict__:
59
 
            raise ValueError, "Can't sort by %s" % crit
 
59
            raise ValueError("Can't sort by %s" % crit)
60
60
        self.data.sort(lambda b, a: cmp(getattr(a, crit),
61
61
                                        getattr(b, crit)))
62
62
        for e in self.data:
65
65
                                              getattr(b, crit)))
66
66
 
67
67
    def pprint(self, top=None, file=None):
68
 
        """XXX docstring"""
 
68
        """FIXME: docstring"""
69
69
        if file is None:
70
70
            file = sys.stdout
71
71
        d = self.data
93
93
        for i in range(len(self.data)):
94
94
            e = self.data[i]
95
95
            if not isinstance(e.code, str):
96
 
                self.data[i] = type(e)((label(e.code),) + e[1:])
 
96
                self.data[i] = type(e)((label(e.code)) + e[1:])
97
97
            if e.calls:
98
98
                for j in range(len(e.calls)):
99
99
                    se = e.calls[j]
100
100
                    if not isinstance(se.code, str):
101
 
                        e.calls[j] = type(se)((label(se.code),) + se[1:])
 
101
                        e.calls[j] = type(se)((label(se.code)) + se[1:])
102
102
        for s in self.threads.values():
103
103
            s.freeze()
104
104
 
125
125
        for entry in self.data:
126
126
            totaltime = int(entry.totaltime * 1000)
127
127
            max_cost = max(max_cost, totaltime)
128
 
        print >> self.out_file, 'summary: %d' % (max_cost,)
 
128
        print >> self.out_file, 'summary: %d' % (max_cost)
129
129
 
130
130
    def _entry(self, entry):
131
131
        out_file = self.out_file
132
132
        code = entry.code
133
133
        inlinetime = int(entry.inlinetime * 1000)
134
134
        #print >> out_file, 'ob=%s' % (code.co_filename,)
135
 
        print >> out_file, 'fi=%s' % (code.co_filename,)
136
 
        print >> out_file, 'fn=%s' % (label(code, True),)
 
135
        print >> out_file, 'fi=%s' % (code.co_filename)
 
136
        print >> out_file, 'fn=%s' % (label(code, True))
137
137
        print >> out_file, '%d %d' % (code.co_firstlineno, inlinetime)
138
138
        # recursive calls are counted in entry.calls
139
139
        if entry.calls:
149
149
        code = subentry.code
150
150
        totaltime = int(subentry.totaltime * 1000)
151
151
        #print >> out_file, 'cob=%s' % (code.co_filename,)
152
 
        print >> out_file, 'cfn=%s' % (label(code, True),)
153
 
        print >> out_file, 'cfi=%s' % (code.co_filename,)
 
152
        print >> out_file, 'cfn=%s' % (label(code, True))
 
153
        print >> out_file, 'cfi=%s' % (code.co_filename)
154
154
        print >> out_file, 'calls=%d %d' % (
155
155
            subentry.callcount, code.co_firstlineno)
156
156
        print >> out_file, '%d %d' % (lineno, totaltime)
158
158
 
159
159
_fn2mod = {}
160
160
 
 
161
 
161
162
def label(code, calltree=False):
162
163
    if isinstance(code, str):
163
164
        return code