tabbed frametype filtering
This commit is contained in:
@@ -267,20 +267,46 @@ class SubFlowDetailsPanel(Vertical):
|
||||
sections.append(Text("Sub-Flow Timing", style="bold cyan"))
|
||||
sections.append(timing_table)
|
||||
|
||||
# Outlier details if any
|
||||
if subflow.outlier_frames and subflow.outlier_details:
|
||||
# Enhanced outlier details if any
|
||||
if subflow.outlier_frames:
|
||||
outlier_table = Table(show_header=True, box=None)
|
||||
outlier_table.add_column("Frame#", justify="right")
|
||||
outlier_table.add_column("Prev Frame#", justify="right")
|
||||
outlier_table.add_column("ΔT(ms)", justify="right")
|
||||
outlier_table.add_column("σ Dev", justify="right")
|
||||
|
||||
for frame_num, delta_t in subflow.outlier_details[:5]: # Show first 5 outliers
|
||||
# Use enhanced details if available, fallback to legacy details
|
||||
outlier_data = []
|
||||
if hasattr(subflow, 'enhanced_outlier_details') and subflow.enhanced_outlier_details:
|
||||
for frame_num, prev_frame_num, delta_t in subflow.enhanced_outlier_details[:5]:
|
||||
# Calculate sigma deviation
|
||||
sigma_dev = "N/A"
|
||||
if subflow.std_inter_arrival > 0 and subflow.avg_inter_arrival > 0:
|
||||
deviation = (delta_t - subflow.avg_inter_arrival) / subflow.std_inter_arrival
|
||||
sigma_dev = f"{deviation:.1f}σ"
|
||||
|
||||
outlier_data.append((frame_num, prev_frame_num, delta_t, sigma_dev))
|
||||
elif subflow.outlier_details:
|
||||
for frame_num, delta_t in subflow.outlier_details[:5]:
|
||||
# Calculate sigma deviation
|
||||
sigma_dev = "N/A"
|
||||
if subflow.std_inter_arrival > 0 and subflow.avg_inter_arrival > 0:
|
||||
deviation = (delta_t - subflow.avg_inter_arrival) / subflow.std_inter_arrival
|
||||
sigma_dev = f"{deviation:.1f}σ"
|
||||
|
||||
outlier_data.append((frame_num, "N/A", delta_t, sigma_dev))
|
||||
|
||||
for frame_num, prev_frame_num, delta_t, sigma_dev in outlier_data:
|
||||
outlier_table.add_row(
|
||||
str(frame_num),
|
||||
f"{delta_t * 1000:.1f}"
|
||||
str(prev_frame_num) if prev_frame_num != "N/A" else "N/A",
|
||||
f"{delta_t * 1000:.1f}",
|
||||
sigma_dev
|
||||
)
|
||||
|
||||
if len(subflow.outlier_details) > 5:
|
||||
outlier_table.add_row("...", f"+{len(subflow.outlier_details) - 5} more")
|
||||
total_outliers = len(subflow.enhanced_outlier_details) if hasattr(subflow, 'enhanced_outlier_details') else len(subflow.outlier_details)
|
||||
if total_outliers > 5:
|
||||
outlier_table.add_row("...", "...", f"+{total_outliers - 5}", "more")
|
||||
|
||||
sections.append(Text("Outlier Details", style="bold red"))
|
||||
sections.append(outlier_table)
|
||||
@@ -320,16 +346,40 @@ class SubFlowDetailsPanel(Vertical):
|
||||
reverse=True
|
||||
):
|
||||
percentage = (stats.count / total * 100) if total > 0 else 0
|
||||
delta_t = f"{stats.avg_inter_arrival * 1000:.1f}" if stats.avg_inter_arrival > 0 else "N/A"
|
||||
sigma = f"{stats.std_inter_arrival * 1000:.1f}" if stats.std_inter_arrival > 0 else "N/A"
|
||||
|
||||
# Use same logic as grid rows for consistency
|
||||
delta_t = ""
|
||||
if stats.avg_inter_arrival > 0:
|
||||
dt_ms = stats.avg_inter_arrival * 1000
|
||||
delta_t = f"{dt_ms:.1f}" if dt_ms < 1000 else f"{dt_ms/1000:.1f}s"
|
||||
elif len(stats.inter_arrival_times) >= 2:
|
||||
# Fallback calculation if stored avg is zero
|
||||
import statistics
|
||||
avg_arrival = statistics.mean(stats.inter_arrival_times)
|
||||
if avg_arrival > 0:
|
||||
dt_ms = avg_arrival * 1000
|
||||
delta_t = f"{dt_ms:.1f}" if dt_ms < 1000 else f"{dt_ms/1000:.1f}s"
|
||||
|
||||
sigma = ""
|
||||
if stats.std_inter_arrival > 0:
|
||||
sig_ms = stats.std_inter_arrival * 1000
|
||||
sigma = f"{sig_ms:.1f}" if sig_ms < 1000 else f"{sig_ms/1000:.1f}s"
|
||||
elif len(stats.inter_arrival_times) >= 2:
|
||||
# Fallback calculation if stored std is zero
|
||||
import statistics
|
||||
std_arrival = statistics.stdev(stats.inter_arrival_times)
|
||||
if std_arrival > 0:
|
||||
sig_ms = std_arrival * 1000
|
||||
sigma = f"{sig_ms:.1f}" if sig_ms < 1000 else f"{sig_ms/1000:.1f}s"
|
||||
|
||||
outliers = str(len(stats.outlier_frames))
|
||||
|
||||
frame_table.add_row(
|
||||
frame_type[:15],
|
||||
frame_type, # Show full frame type name
|
||||
f"{stats.count:,}",
|
||||
f"{percentage:.1f}%",
|
||||
delta_t,
|
||||
sigma,
|
||||
delta_t if delta_t else "N/A",
|
||||
sigma if sigma else "N/A",
|
||||
outliers
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user