@@ -505,6 +505,7 @@ def test_flamegraph_collector_basic(self):
505505 self .assertIn ("func1 (file.py:10)" , resolve_name (child , strings ))
506506 self .assertEqual (child ["value" ], 1 )
507507 self .assertEqual (child ["self" ], 1 ) # leaf: all time is self
508+ self .assertEqual (data ["stats" ]["sample_interval_usec" ], 1000 )
508509
509510 def test_flamegraph_collector_export (self ):
510511 """Test flamegraph HTML export functionality."""
@@ -1556,6 +1557,57 @@ def test_diff_flamegraph_scale_factor(self):
15561557 self .assertAlmostEqual (func1_node ["diff" ], 0.0 )
15571558 self .assertAlmostEqual (func1_node ["diff_pct" ], 0.0 )
15581559
1560+ def test_diff_flamegraph_scale_factor_with_different_intervals (self ):
1561+ """Scale factor normalizes profiles sampled at different rates."""
1562+ frames = [
1563+ MockInterpreterInfo (0 , [
1564+ MockThreadInfo (1 , [MockFrameInfo ("file.py" , 10 , "func1" )])
1565+ ])
1566+ ]
1567+
1568+ diff = make_diff_collector_with_mock_baseline (
1569+ [frames ] * 10 ,
1570+ baseline_interval = 1000 ,
1571+ current_interval = 10000 ,
1572+ )
1573+ diff .collect (frames )
1574+
1575+ data = diff ._convert_to_flamegraph_format ()
1576+ self .assertAlmostEqual (data ["stats" ]["baseline_scale" ], 0.1 )
1577+ self .assertEqual (data ["stats" ]["sample_interval_usec" ], 10000 )
1578+ self .assertAlmostEqual (data ["baseline" ], 1.0 )
1579+ self .assertEqual (data ["self_time" ], 1 )
1580+ self .assertAlmostEqual (data ["diff" ], 0.0 )
1581+ self .assertAlmostEqual (data ["diff_pct" ], 0.0 )
1582+
1583+ def test_diff_flamegraph_elided_scale_with_different_intervals (self ):
1584+ """Elided values use the current profile's sample units."""
1585+ baseline_frames = [
1586+ MockInterpreterInfo (0 , [
1587+ MockThreadInfo (1 , [MockFrameInfo ("file.py" , 10 , "old_func" )])
1588+ ])
1589+ ]
1590+ current_frames = [
1591+ MockInterpreterInfo (0 , [
1592+ MockThreadInfo (1 , [MockFrameInfo ("file.py" , 20 , "new_func" )])
1593+ ])
1594+ ]
1595+
1596+ diff = make_diff_collector_with_mock_baseline (
1597+ [baseline_frames ] * 10 ,
1598+ baseline_interval = 1000 ,
1599+ current_interval = 10000 ,
1600+ )
1601+ diff .collect (current_frames )
1602+
1603+ data = diff ._convert_to_flamegraph_format ()
1604+ elided = data ["stats" ]["elided_flamegraph" ]
1605+ self .assertEqual (elided ["stats" ]["sample_interval_usec" ], 10000 )
1606+ self .assertAlmostEqual (elided ["value" ], 1.0 )
1607+ self .assertAlmostEqual (elided ["self" ], 1.0 )
1608+ self .assertAlmostEqual (elided ["baseline" ], 1.0 )
1609+ self .assertAlmostEqual (elided ["diff" ], - 1.0 )
1610+
15591611 def test_diff_flamegraph_elided_stacks (self ):
15601612 """Paths in baseline but not current produce elided stacks."""
15611613 baseline_frames_1 = [
0 commit comments