PageRenderTime 33ms CodeModel.GetById 16ms app.highlight 12ms RepoModel.GetById 1ms app.codeStats 0ms

/Lib/test/profilee.py

http://unladen-swallow.googlecode.com/
Python | 115 lines | 81 code | 11 blank | 23 comment | 4 complexity | 2f446ca143b20108f806a45639b85b63 MD5 | raw file
  1"""
  2Input for test_profile.py and test_cprofile.py.
  3
  4IMPORTANT: This stuff is touchy. If you modify anything above the
  5test class you'll have to regenerate the stats by running the two
  6test files.
  7
  8*ALL* NUMBERS in the expected output are relevant.  If you change
  9the formatting of pstats, please don't just regenerate the expected
 10output without checking very carefully that not a single number has
 11changed.
 12"""
 13
 14import sys
 15
 16# In order to have reproducible time, we simulate a timer in the global
 17# variable 'TICKS', which represents simulated time in milliseconds.
 18# (We can't use a helper function increment the timer since it would be
 19# included in the profile and would appear to consume all the time.)
 20TICKS = 42000
 21
 22def timer():
 23    return TICKS
 24
 25def testfunc():
 26    # 1 call
 27    # 1000 ticks total: 270 ticks local, 730 ticks in subfunctions
 28    global TICKS
 29    TICKS += 99
 30    helper()                            # 300
 31    helper()                            # 300
 32    TICKS += 171
 33    factorial(14)                       # 130
 34
 35def factorial(n):
 36    # 23 calls total
 37    # 170 ticks total, 150 ticks local
 38    # 3 primitive calls, 130, 20 and 20 ticks total
 39    # including 116, 17, 17 ticks local
 40    global TICKS
 41    if n > 0:
 42        TICKS += n
 43        return mul(n, factorial(n-1))
 44    else:
 45        TICKS += 11
 46        return 1
 47
 48def mul(a, b):
 49    # 20 calls
 50    # 1 tick, local
 51    global TICKS
 52    TICKS += 1
 53    return a * b
 54
 55def helper():
 56    # 2 calls
 57    # 300 ticks total: 20 ticks local, 260 ticks in subfunctions
 58    global TICKS
 59    TICKS += 1
 60    helper1()                           # 30
 61    TICKS += 2
 62    helper1()                           # 30
 63    TICKS += 6
 64    helper2()                           # 50
 65    TICKS += 3
 66    helper2()                           # 50
 67    TICKS += 2
 68    helper2()                           # 50
 69    TICKS += 5
 70    helper2_indirect()                  # 70
 71    TICKS += 1
 72
 73def helper1():
 74    # 4 calls
 75    # 30 ticks total: 29 ticks local, 1 tick in subfunctions
 76    global TICKS
 77    TICKS += 10
 78    hasattr(C(), "foo")                 # 1
 79    TICKS += 19
 80    lst = []
 81    lst.append(42)                      # 0
 82    sys.exc_info()                      # 0
 83
 84def helper2_indirect():
 85    helper2()                           # 50
 86    factorial(3)                        # 20
 87
 88def helper2():
 89    # 8 calls
 90    # 50 ticks local: 39 ticks local, 11 ticks in subfunctions
 91    global TICKS
 92    TICKS += 11
 93    hasattr(C(), "bar")                 # 1
 94    TICKS += 13
 95    subhelper()                         # 10
 96    TICKS += 15
 97
 98def subhelper():
 99    # 8 calls
100    # 10 ticks total: 8 ticks local, 2 ticks in subfunctions
101    global TICKS
102    TICKS += 2
103    for i in range(2):                  # 0
104        try:
105            C().foo                     # 1 x 2
106        except AttributeError:
107            TICKS += 3                  # 3 x 2
108
109class C:
110    def __getattr__(self, name):
111        # 28 calls
112        # 1 tick, local
113        global TICKS
114        TICKS += 1
115        raise AttributeError