@@ -1738,6 +1738,80 @@ def test_jsonl_collector_export_exact_output(self):
17381738 ),
17391739 )
17401740
1741+ def test_jsonl_collector_export_includes_mode_in_meta (self ):
1742+ jsonl_out = tempfile .NamedTemporaryFile (delete = False )
1743+ self .addCleanup (close_and_unlink , jsonl_out )
1744+
1745+ collector = JsonlCollector (1000 , mode = PROFILING_MODE_CPU )
1746+ collector .collect (
1747+ [
1748+ MockInterpreterInfo (
1749+ 0 ,
1750+ [MockThreadInfo (1 , [MockFrameInfo ("file.py" , 10 , "func" )])],
1751+ )
1752+ ]
1753+ )
1754+ collector .export (jsonl_out .name )
1755+
1756+ with open (jsonl_out .name , "r" , encoding = "utf-8" ) as f :
1757+ records = [json .loads (line ) for line in f ]
1758+
1759+ meta_record = next (record for record in records if record ["type" ] == "meta" )
1760+ self .assertEqual (meta_record ["mode" ], "cpu" )
1761+
1762+ def test_jsonl_collector_export_empty_profile (self ):
1763+ jsonl_out = tempfile .NamedTemporaryFile (delete = False )
1764+ self .addCleanup (close_and_unlink , jsonl_out )
1765+
1766+ collector = JsonlCollector (1000 )
1767+ collector .run_id = "run-123"
1768+ collector .export (jsonl_out .name )
1769+
1770+ with open (jsonl_out .name , "r" , encoding = "utf-8" ) as f :
1771+ records = [json .loads (line ) for line in f ]
1772+
1773+ self .assertEqual ([record ["type" ] for record in records ], ["meta" , "end" ])
1774+ self .assertEqual (records [0 ]["sample_interval_usec" ], 1000 )
1775+ self .assertEqual (records [0 ]["run_id" ], "run-123" )
1776+ self .assertEqual (records [1 ]["samples_total" ], 0 )
1777+ self .assertEqual (records [1 ]["run_id" ], "run-123" )
1778+
1779+ def test_jsonl_collector_recursive_frames_counted_once_per_sample (self ):
1780+ jsonl_out = tempfile .NamedTemporaryFile (delete = False )
1781+ self .addCleanup (close_and_unlink , jsonl_out )
1782+
1783+ collector = JsonlCollector (1000 )
1784+ collector .collect (
1785+ [
1786+ MockInterpreterInfo (
1787+ 0 ,
1788+ [
1789+ MockThreadInfo (
1790+ 1 ,
1791+ [
1792+ MockFrameInfo ("recursive.py" , 10 , "recursive_func" ),
1793+ MockFrameInfo ("recursive.py" , 10 , "recursive_func" ),
1794+ MockFrameInfo ("recursive.py" , 10 , "recursive_func" ),
1795+ ],
1796+ )
1797+ ],
1798+ )
1799+ ]
1800+ )
1801+ collector .export (jsonl_out .name )
1802+
1803+ with open (jsonl_out .name , "r" , encoding = "utf-8" ) as f :
1804+ records = [json .loads (line ) for line in f ]
1805+
1806+ _ , _ , frame_defs , agg_record , end_record = _jsonl_tables (records )
1807+ self .assertEqual (len (frame_defs ), 1 )
1808+ self .assertEqual (
1809+ agg_record ["entries" ],
1810+ [{"frame_id" : frame_defs [0 ]["frame_id" ], "self" : 1 , "cumulative" : 1 }],
1811+ )
1812+ self .assertEqual (agg_record ["samples_total" ], 1 )
1813+ self .assertEqual (end_record ["samples_total" ], 1 )
1814+
17411815 def test_jsonl_collector_skip_idle_filters_threads (self ):
17421816 jsonl_out = tempfile .NamedTemporaryFile (delete = False )
17431817 self .addCleanup (close_and_unlink , jsonl_out )
0 commit comments