~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/middleware/profile.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2008-03-10 06:05:21 UTC
  • mfrom: (151.1.7 clearer-argument-passing)
  • Revision ID: launchpad@pqm.canonical.com-20080310060521-29xe8hy1hmc3d1xl
[r=jamesh] show revisions which merge a change to a file when filtering on changes that touch files and don't reuse the 'file_id' argument name when doing so

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
'''Profiling middleware for paste.'''
2
 
import cgi
3
 
import logging
4
 
import sys
5
 
import threading
6
 
 
7
 
from bzrlib.lsprof import profile
8
 
from guppy import hpy
9
 
 
10
 
class LSProfMiddleware(object):
11
 
    '''Paste middleware for profiling with lsprof.'''
12
 
 
13
 
    def __init__(self, app, global_conf=None):
14
 
        self.app = app
15
 
        self.lock = threading.Lock()
16
 
        self.__count = 0
17
 
 
18
 
    def __run_app(self, environ, start_response):
19
 
        app_iter = self.app(environ, start_response)
20
 
        try:
21
 
            return list(app_iter)
22
 
        finally:
23
 
            if getattr(app_iter, 'close', None):
24
 
                app_iter.close()
25
 
 
26
 
    def __call__(self, environ, start_response):
27
 
        """Run a request."""
28
 
        self.lock.acquire()
29
 
        try:
30
 
            ret, stats = profile(self.__run_app, environ, start_response)
31
 
            self.__count += 1
32
 
            stats.save("%d-stats.callgrind" % self.__count, format="callgrind")
33
 
            return ret
34
 
        finally:
35
 
            self.lock.release()
36
 
 
37