mirror of https://github.com/pyodide/pyodide.git
50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
import pytest
|
|
from pytest_pyodide import run_in_pyodide
|
|
|
|
|
|
@pytest.mark.skip_refcount_check
|
|
@run_in_pyodide(packages=["pyinstrument"])
|
|
async def test_pyinstrument(selenium, tmp_path):
|
|
"""Check that we can run the profiler on async code
|
|
|
|
without errors.
|
|
"""
|
|
import asyncio
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from pyinstrument.profiler import Profiler, Session
|
|
|
|
p1 = Profiler()
|
|
with p1:
|
|
await asyncio.sleep(0.1)
|
|
|
|
p1.print(show_all=True, timeline=True)
|
|
|
|
session_file = Path("foo.pysession")
|
|
s1 = p1.last_session
|
|
s1.save(session_file)
|
|
|
|
json_opts = dict(indent=2, sort_keys=True)
|
|
s1_data = json.load(session_file.open())
|
|
s1_json = json.dumps(s1_data, **json_opts) # type: ignore[arg-type]
|
|
|
|
# _all_ the keys as of 4.4.0, but presumably more could be added
|
|
expected_keys = {
|
|
"cpu_time",
|
|
"duration",
|
|
"frame_records",
|
|
"program",
|
|
"sample_count",
|
|
"start_call_stack",
|
|
"start_time",
|
|
}
|
|
missing_keys = expected_keys - set(s1_data)
|
|
|
|
assert not missing_keys, f"session JSON missing: {missing_keys}"
|
|
|
|
s2 = Session.load(session_file)
|
|
s2_json = json.dumps(s2.to_json(), **json_opts) # type: ignore[arg-type]
|
|
|
|
assert s1_json == s2_json, "loaded JSON did not match"
|