Updated to reflect the rationalized profiler event reporting.

This commit is contained in:
Fred Drake 2001-10-04 14:49:46 +00:00
parent 8f51f54319
commit 7c0a93d966
1 changed files with 27 additions and 46 deletions

View File

@ -37,7 +37,8 @@ class HookWatcher:
class ProfileSimulator(HookWatcher):
def __init__(self):
def __init__(self, testcase):
self.testcase = testcase
self.stack = []
HookWatcher.__init__(self)
@ -54,13 +55,8 @@ class ProfileSimulator(HookWatcher):
self.stack.pop()
def trace_exception(self, frame):
if len(self.stack) >= 2 and frame is self.stack[-2]:
self.add_event('propogate-from', self.stack[-1])
self.stack.pop()
else:
# Either an exception was raised in Python or a C function
# raised an exception; this does not represent propogation.
self.add_event('ignore', frame)
self.testcase.fail(
"the profiler should never receive exception events")
dispatch = {
'call': trace_call,
@ -94,8 +90,7 @@ class ProfileHookTestCase(TestCaseBase):
1/0
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'exception', f_ident),
(0, 'exception', protect_ident),
(1, 'return', f_ident),
])
def test_caught_exception(self):
@ -104,7 +99,6 @@ class ProfileHookTestCase(TestCaseBase):
except: pass
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'exception', f_ident),
(1, 'return', f_ident),
])
@ -114,7 +108,6 @@ class ProfileHookTestCase(TestCaseBase):
except: pass
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'exception', f_ident),
(1, 'return', f_ident),
])
@ -123,11 +116,10 @@ class ProfileHookTestCase(TestCaseBase):
1/0
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'exception', f_ident),
# This isn't what I expected:
(0, 'exception', protect_ident),
# (0, 'exception', protect_ident),
# I expected this again:
# (1, 'exception', f_ident),
(1, 'return', f_ident),
])
def test_exception_in_except_clause(self):
@ -143,11 +135,9 @@ class ProfileHookTestCase(TestCaseBase):
g_ident = ident(g)
self.check_events(g, [(1, 'call', g_ident),
(2, 'call', f_ident),
(2, 'exception', f_ident),
(1, 'exception', g_ident),
(2, 'return', f_ident),
(3, 'call', f_ident),
(3, 'exception', f_ident),
(1, 'exception', g_ident),
(3, 'return', f_ident),
(1, 'return', g_ident),
])
@ -161,10 +151,9 @@ class ProfileHookTestCase(TestCaseBase):
g_ident = ident(g)
self.check_events(g, [(1, 'call', g_ident),
(2, 'call', f_ident),
(2, 'exception', f_ident),
(1, 'exception', g_ident),
(2, 'return', f_ident),
(1, 'falling through', g_ident),
(0, 'exception', protect_ident),
(1, 'return', g_ident),
])
def test_raise_twice(self):
@ -173,9 +162,7 @@ class ProfileHookTestCase(TestCaseBase):
except: 1/0
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'exception', f_ident),
(1, 'exception', f_ident),
(0, 'exception', protect_ident)
(1, 'return', f_ident),
])
def test_raise_reraise(self):
@ -184,8 +171,7 @@ class ProfileHookTestCase(TestCaseBase):
except: raise
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'exception', f_ident),
(0, 'exception', protect_ident)
(1, 'return', f_ident),
])
def test_raise(self):
@ -193,8 +179,7 @@ class ProfileHookTestCase(TestCaseBase):
raise Exception()
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'exception', f_ident),
(0, 'exception', protect_ident)
(1, 'return', f_ident),
])
def test_distant_exception(self):
@ -218,12 +203,11 @@ class ProfileHookTestCase(TestCaseBase):
(3, 'call', h_ident),
(4, 'call', g_ident),
(5, 'call', f_ident),
(5, 'exception', f_ident),
(4, 'exception', g_ident),
(3, 'exception', h_ident),
(2, 'exception', i_ident),
(1, 'exception', j_ident),
(0, 'exception', protect_ident),
(5, 'return', f_ident),
(4, 'return', g_ident),
(3, 'return', h_ident),
(2, 'return', i_ident),
(1, 'return', j_ident),
])
def test_generator(self):
@ -266,14 +250,14 @@ class ProfileHookTestCase(TestCaseBase):
(2, 'return', f_ident),
# once more to hit the raise:
(2, 'call', f_ident),
(2, 'exception', f_ident),
(2, 'return', f_ident),
(1, 'return', g_ident),
])
class ProfileSimulatorTestCase(TestCaseBase):
def new_watcher(self):
return ProfileSimulator()
return ProfileSimulator(self)
def test_simple(self):
def f(p):
@ -288,8 +272,7 @@ class ProfileSimulatorTestCase(TestCaseBase):
1/0
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'ignore', f_ident),
(1, 'propogate-from', f_ident),
(1, 'return', f_ident),
])
def test_caught_exception(self):
@ -298,7 +281,6 @@ class ProfileSimulatorTestCase(TestCaseBase):
except: pass
f_ident = ident(f)
self.check_events(f, [(1, 'call', f_ident),
(1, 'ignore', f_ident),
(1, 'return', f_ident),
])
@ -323,12 +305,11 @@ class ProfileSimulatorTestCase(TestCaseBase):
(3, 'call', h_ident),
(4, 'call', g_ident),
(5, 'call', f_ident),
(5, 'ignore', f_ident),
(5, 'propogate-from', f_ident),
(4, 'propogate-from', g_ident),
(3, 'propogate-from', h_ident),
(2, 'propogate-from', i_ident),
(1, 'propogate-from', j_ident),
(5, 'return', f_ident),
(4, 'return', g_ident),
(3, 'return', h_ident),
(2, 'return', i_ident),
(1, 'return', j_ident),
])