we implemented a chart control and there we are drawing curves by using the render method in the Control. we are drawing through the drawing context using a PolylineGeometry.
somehow if we running our application with the chart that is growing over an hour after about 40 mins we get a access violation in hit testing and having a hard time to debug that further.
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Repeat 2 times:
--------------------------------
at SkiaSharp.SkiaApi.sk_path_contains(IntPtr, Single, Single)
--------------------------------
at SkiaSharp.SKPath.Contains(Single, Single)
at Avalonia.Skia.GeometryImpl.PathContainsCore(SkiaSharp.SKPath, Avalonia.Point)
at Avalonia.Skia.GeometryImpl.StrokeContains(Avalonia.Media.IPen, Avalonia.Point)
at Avalonia.Rendering.Composition.Drawing.Nodes.RenderDataGeometryNode.HitTest(Avalonia.Point)
at Avalonia.Rendering.Composition.Drawing.CompositionRenderData.HitTest(Avalonia.Point)
at Avalonia.Rendering.Composition.CompositionDrawListVisual.HitTest(Avalonia.Point)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.HitTestCore(Avalonia.Rendering.Composition.CompositionVisual, Avalonia.Point, Avalonia.Collections.Pooled.PooledList`1<Avalonia.Rendering.Composition.CompositionVisual>, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositionTarget.TryHitTest(Avalonia.Point, Avalonia.Rendering.Composition.CompositionVisual, System.Func`2<Avalonia.Rendering.Composition.CompositionVisual,Boolean>)
at Avalonia.Rendering.Composition.CompositingRenderer+<HitTest>d__24.MoveNext()
at System.Linq.Enumerable.TryGetFirst[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>, Boolean ByRef)
at System.Linq.Enumerable.FirstOrDefault[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at Avalonia.Rendering.Composition.CompositingRenderer.HitTestFirst(Avalonia.Point, Avalonia.Visual, System.Func`2<Avalonia.Visual,Boolean>)
at Avalonia.VisualTree.VisualExtensions.GetVisualAt(Avalonia.Visual, Avalonia.Point, System.Func`2<Avalonia.Visual,Boolean>)
at Avalonia.Input.InputExtensions.InputHitTest(Avalonia.Input.IInputElement, Avalonia.Point)
at Avalonia.Input.PointerOverPreProcessor.SceneInvalidated(Avalonia.Rect)
at Avalonia.Controls.TopLevel.SceneInvalidated(System.Object, Avalonia.Rendering.SceneInvalidatedEventArgs)
at Avalonia.Rendering.Composition.CompositingRenderer+<TriggerSceneInvalidatedOnBatchCompletion>d__28.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Avalonia.Rendering.Composition.CompositingRenderer+<TriggerSceneInvalidatedOnBatchCompletion>d__28, Avalonia.Base, Version=11.0.4.0, Culture=neutral, PublicKeyToken=c8d484a7012f9a8b]].ExecutionContextCallback(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Avalonia.Rendering.Composition.CompositingRenderer+<TriggerSceneInvalidatedOnBatchCompletion>d__28, Avalonia.Base, Version=11.0.4.0, Culture=neutral, PublicKeyToken=c8d484a7012f9a8b]].MoveNext(System.Threading.Thread)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Avalonia.Rendering.Composition.CompositingRenderer+<TriggerSceneInvalidatedOnBatchCompletion>d__28, Avalonia.Base, Version=11.0.4.0, Culture=neutral, PublicKeyToken=c8d484a7012f9a8b]].MoveNext()
at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation+<>c.<.cctor>b__8_0(System.Object)
at Avalonia.Threading.SendOrPostCallbackDispatcherOperation.InvokeCore()
at Avalonia.Threading.DispatcherOperation.Execute()
at Avalonia.Threading.Dispatcher.ExecuteJob(Avalonia.Threading.DispatcherOperation)
at Avalonia.Threading.Dispatcher.ExecuteJobsCore(Boolean)
at Avalonia.Threading.Dispatcher.Signaled()
at Avalonia.Win32.Win32DispatcherImpl.DispatchWorkItem()
at Avalonia.Win32.Win32Platform.WndProc(IntPtr, UInt32, IntPtr, IntPtr)
at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG ByRef)
at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG ByRef)
at Avalonia.Win32.Win32DispatcherImpl.RunLoop(System.Threading.CancellationToken)
at Avalonia.Threading.DispatcherFrame.Run(Avalonia.Threading.IControlledDispatcherImpl)
at Avalonia.Threading.Dispatcher.PushFrame(Avalonia.Threading.DispatcherFrame)
at Avalonia.Threading.Dispatcher.MainLoop(System.Threading.CancellationToken)
at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(System.String[])
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(Avalonia.AppBuilder, System.String[], Avalonia.Controls.ShutdownMode)
at Baur.Fami.Application.Program.Main(System.String[])
after seeing this output in the debug console of the IDE we tried to deactivate hit testing for the curve and gave it another try and were able to run for an hour successfully. it was just a single try so it could have been just lucky but it seems there might be an issue with hit testing here.
does anyone have an idea how to debug that further?
Describe the bug
we implemented a chart control and there we are drawing curves by using the render method in the Control. we are drawing through the drawing context using a PolylineGeometry. somehow if we running our application with the chart that is growing over an hour after about 40 mins we get a access violation in hit testing and having a hard time to debug that further.
after seeing this output in the debug console of the IDE we tried to deactivate hit testing for the curve and gave it another try and were able to run for an hour successfully. it was just a single try so it could have been just lucky but it seems there might be an issue with hit testing here.
does anyone have an idea how to debug that further?