private void MeasurementsHistory_OnAddedNewMeasurement(SubtMeasurement m) // manager thread { if (_mainVM.EasyGuiTabIsSelected) { Dispatcher.CurrentDispatcher.Invoke(() => { RaisePropertyChanged(() => Measurements); OnAddedNewMeasurement?.Invoke(m); }); } }
private void EasyGuiView_OnAddedNewMeasurement(SubtMeasurement m) { Dispatcher.BeginInvoke(new Action(() => { if (VisualTreeHelper.GetChildrenCount(measurementsDataGrid) != 0) { var border = VisualTreeHelper.GetChild(measurementsDataGrid, 0) as Decorator; if (border != null) { var scroll = border.Child as ScrollViewer; if (scroll != null) { scroll.ScrollToEnd(); } } } // measurementsDataGrid.ScrollIntoView(m); })); }
internal void MeasurementsHistory_OnMeasured(SubtMeasurement m) // manager thread { _cstApp.BeginInvokeInGuiThread(() => { if (_currentFragment == null) { if (IsItUptime(m)) { _currentFragment = new UpDownTimeFragment { StartTime = m.MeasurementTime, StopTime = m.MeasurementTime, UpOrDown = true, }; _fragments.Insert(0, _currentFragment); RaisePropertyChanged(() => DisplayedFragmentsExist); } } else { var up = IsItUptime(m); if (_currentFragment.UpOrDown ^ up) { _currentFragment.SetStopTime(m.MeasurementTime); _currentFragment = new UpDownTimeFragment { StartTime = m.MeasurementTime, StopTime = m.MeasurementTime, UpOrDown = up, }; _fragments.Insert(0, _currentFragment); if (!up) { _downtimeOnlyFragments.Insert(0, _currentFragment); } RaisePropertyChanged(() => DisplayedFragmentsExist); } } }); }
UpDownTimeFragment _currentFragment = null; // accessed by manager thread public static bool IsItUptime(SubtMeasurement m) { if (m.RxBandwidth < m.TargetBandwidth * 0.1f) { return(false); } if (m.TxBandwidth < m.TargetBandwidth * 0.1f) { return(false); } if (m.BestRttToPeers > TimeSpan.FromMilliseconds(2000)) { return(false); } if (m.RxPacketLoss > 0.5) { return(false); } if (m.TxPacketLoss > 0.5) { return(false); } return(true); }
private static void MeasurementsHistory_OnAddedNewMeasurement(SubtMeasurement measurement) { Console.WriteLine($"measurement: download={measurement.RxBandwidthString} (packet loss={measurement.RxPacketLossString}), upload={measurement.TxBandwidthString} (packet loss={measurement.TxPacketLossString})"); }