async void OnStarted(object sender, EventArgs e) { TaskCompletionSource <bool> tcs = null; _startButton.IsEnabled = false; _listView.ScrollTo(_testData[0], ScrollToPosition.MakeVisible, false); await Task.Delay(100); var animator = DependencyService.Get <IEcoreAnimator>(DependencyFetchTarget.GlobalInstance); _started = true; _frameCount = 0; _animationCount = 0; object target = null; _stopWatch.Reset(); _animationStopWatch.Reset(); _listView.ItemAppearing += itemAppearing; animator.Animation += OnAnimation; for (int i = 10; i < 300; i += 20) { tcs = new TaskCompletionSource <bool>(); target = _testData[i]; _listView.ScrollTo(target, ScrollToPosition.MakeVisible, true); await tcs.Task; } _listView.ItemAppearing -= itemAppearing; animator.Animation -= OnAnimation; _stopWatch.Stop(); _animationStopWatch.Stop(); if (_stopWatch.ElapsedMilliseconds > 0) { double fps = (_frameCount * 1000.0) / _stopWatch.ElapsedMilliseconds; double aniFps = (_animationCount * 1000.0) / _animationStopWatch.ElapsedMilliseconds; _ = DisplayAlert("FPS", $"EvasFPS {fps:f2} fps \nAnimator FPS : {aniFps:f2} fps", "OK"); } _started = false; _startButton.IsEnabled = true; void itemAppearing(object s, ItemVisibilityEventArgs evt) { if (evt.Item == target) { tcs.TrySetResult(true); } } }
private void OnCheckEnteringSpeed(object sender, EventArgs e) { _listView.RenderPost -= OnCheckEnteringSpeed; double currentTime = EcoreAnimator.CurrentTime; _enteringSpeed = (currentTime - _enteringSpeed) * 1000.0; Console.WriteLine($"OnCheckEnteringSpeed currentTime:{currentTime}, _enteringSpeed:{_enteringSpeed}"); _frameSet = GlobalScrollConfig.BringInScrollFriction; GlobalScrollConfig.BringInScrollFriction = TimeSet; Console.WriteLine($"OnCheckEnteringSpeed _frameSet:{_frameSet}, TimeSet:{TimeSet}"); _listView.ScrollTo(ItemTarget, ScrollToPosition.MakeVisible, true); }