1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
import inspect
import sys
import time
import pytest
from pyinstrument import Profiler
from pyinstrument.renderers import (
ConsoleRenderer,
HTMLRenderer,
JSONRenderer,
PstatsRenderer,
SpeedscopeRenderer,
)
# Utilities
def recurse(depth):
if depth <= 0:
time.sleep(0.1)
return
recurse(depth - 1)
def current_stack_depth():
depth = 0
frame = inspect.currentframe()
while frame:
frame = frame.f_back
depth += 1
return depth
# Fixtures
@pytest.fixture(scope="module")
def deep_profiler_session():
profiler = Profiler()
profiler.start()
# give 120 frames for pyinstrument to do its work.
recursion_depth = sys.getrecursionlimit() - current_stack_depth() - 120
recurse(recursion_depth)
profiler.stop()
return profiler.last_session
# Tests
def test_console(deep_profiler_session):
ConsoleRenderer().render(deep_profiler_session)
def test_html(deep_profiler_session):
HTMLRenderer().render(deep_profiler_session)
def test_json(deep_profiler_session):
JSONRenderer().render(deep_profiler_session)
def test_speedscope(deep_profiler_session):
SpeedscopeRenderer().render(deep_profiler_session)
def test_prof(deep_profiler_session):
PstatsRenderer().render(deep_profiler_session)
|