Browse Source

In `Avalonia.Base`, private fields that are never modified were made `readonly` (#13020)

Co-authored-by: Lehonti Ramos <lehonti@ramos>
pull/13069/head
Lehonti Ramos 2 years ago
committed by GitHub
parent
commit
b48cf37bfe
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      src/Avalonia.Base/Animation/AnimationInstance`1.cs
  2. 6
      src/Avalonia.Base/Animation/Animators/BoxShadowAnimator.cs
  3. 10
      src/Avalonia.Base/Animation/DisposeAnimationInstanceSubject.cs
  4. 2
      src/Avalonia.Base/AvaloniaObjectExtensions.cs
  5. 2
      src/Avalonia.Base/Collections/NotifyCollectionChangedExtensions.cs
  6. 2
      src/Avalonia.Base/Data/BindingChainException.cs
  7. 4
      src/Avalonia.Base/Data/Core/ExpressionObserver.cs
  8. 4
      src/Avalonia.Base/Data/Core/Parsers/ExpressionVisitorNodeBuilder.cs
  9. 2
      src/Avalonia.Base/Data/Core/Plugins/PropertyError.cs
  10. 2
      src/Avalonia.Base/Data/Core/PropertyAccessorNode.cs
  11. 2
      src/Avalonia.Base/Data/Core/StreamNode.cs
  12. 2
      src/Avalonia.Base/Input/Cursor.cs
  13. 2
      src/Avalonia.Base/Layout/LayoutManager.cs
  14. 2
      src/Avalonia.Base/Media/BoxShadow.cs
  15. 2
      src/Avalonia.Base/Media/BoxShadows.cs
  16. 4
      src/Avalonia.Base/Media/FormattedText.cs
  17. 2
      src/Avalonia.Base/Media/Geometry.cs
  18. 2
      src/Avalonia.Base/Media/Imaging/Bitmap.cs
  19. 2
      src/Avalonia.Base/Media/Imaging/PixelFormatReaders.cs
  20. 2
      src/Avalonia.Base/Media/Imaging/WriteableBitmap.cs
  21. 4
      src/Avalonia.Base/Media/MediaContext.Clock.cs
  22. 4
      src/Avalonia.Base/Media/MediaContext.cs
  23. 2
      src/Avalonia.Base/Media/UnicodeRange.cs
  24. 2
      src/Avalonia.Base/PropertyStore/EffectiveValue`1.cs
  25. 2
      src/Avalonia.Base/Reactive/Operators/Sink.cs
  26. 4
      src/Avalonia.Base/Rendering/Composition/Animations/ImplicitAnimationCollection.cs
  27. 16
      src/Avalonia.Base/Rendering/Composition/Compositor.cs
  28. 2
      src/Avalonia.Base/Rendering/Composition/Drawing/CompositionRenderDataSceneBrushContent.cs
  29. 6
      src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionTrackedValues.cs
  30. 2
      src/Avalonia.Base/Rendering/Composition/Server/DrawingContextProxy.cs
  31. 6
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs
  32. 4
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.RenderResources.cs
  33. 12
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.cs
  34. 2
      src/Avalonia.Base/Rendering/Composition/Transport/Batch.cs
  35. 2
      src/Avalonia.Base/Rendering/Composition/Transport/BatchStreamArrayPool.cs
  36. 2
      src/Avalonia.Base/Rendering/Composition/VisualCollection.cs
  37. 6
      src/Avalonia.Base/Rendering/RenderLoop.cs
  38. 2
      src/Avalonia.Base/Rendering/SwapchainBase.cs
  39. 2
      src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs
  40. 2
      src/Avalonia.Base/Threading/Dispatcher.Queue.cs
  41. 2
      src/Avalonia.Base/Threading/Dispatcher.Timers.cs
  42. 2
      src/Avalonia.Base/Threading/DispatcherFrame.cs
  43. 4
      src/Avalonia.Base/Threading/DispatcherOperation.cs
  44. 6
      src/Avalonia.Base/Threading/DispatcherTimer.cs
  45. 2
      src/Avalonia.Base/Threading/IDispatcherImpl.cs
  46. 2
      src/Avalonia.Base/Threading/ThreadSafeObjectPool.cs
  47. 4
      src/Avalonia.Base/Utilities/PooledInlineList.cs
  48. 4
      src/Avalonia.Base/Utilities/Ref.cs
  49. 2
      src/Avalonia.Base/Utilities/SingleOrDictionary.cs
  50. 2
      src/Avalonia.Base/Utilities/SmallDictionary.cs
  51. 10
      src/Avalonia.Base/Utilities/SpringSolver.cs

10
src/Avalonia.Base/Animation/AnimationInstance`1.cs

@ -20,17 +20,17 @@ namespace Avalonia.Animation
private bool _playbackReversed;
private FillMode _fillMode;
private PlaybackDirection _playbackDirection;
private Animator<T> _animator;
private Animation _animation;
private Animatable _targetControl;
private readonly Animator<T> _animator;
private readonly Animation _animation;
private readonly Animatable _targetControl;
private T _neutralValue;
private double _speedRatioConv;
private TimeSpan _initialDelay;
private TimeSpan _iterationDelay;
private TimeSpan _duration;
private Easings.Easing? _easeFunc;
private Action? _onCompleteAction;
private Func<double, T, T> _interpolator;
private readonly Action? _onCompleteAction;
private readonly Func<double, T, T> _interpolator;
private IDisposable? _timerSub;
private readonly IClock _baseClock;
private IClock? _clock;

6
src/Avalonia.Base/Animation/Animators/BoxShadowAnimator.cs

@ -4,9 +4,9 @@ namespace Avalonia.Animation.Animators
{
internal class BoxShadowAnimator : Animator<BoxShadow>
{
static ColorAnimator s_colorAnimator = new ColorAnimator();
static DoubleAnimator s_doubleAnimator = new DoubleAnimator();
static BoolAnimator s_boolAnimator = new BoolAnimator();
static readonly ColorAnimator s_colorAnimator = new ColorAnimator();
static readonly DoubleAnimator s_doubleAnimator = new DoubleAnimator();
static readonly BoolAnimator s_boolAnimator = new BoolAnimator();
public override BoxShadow Interpolate(double progress, BoxShadow oldValue, BoxShadow newValue)
{
return new BoxShadow

10
src/Avalonia.Base/Animation/DisposeAnimationInstanceSubject.cs

@ -10,11 +10,11 @@ namespace Avalonia.Animation
{
private IDisposable? _lastInstance;
private bool _lastMatch;
private Animator<T> _animator;
private Animation _animation;
private Animatable _control;
private Action? _onComplete;
private IClock? _clock;
private readonly Animator<T> _animator;
private readonly Animation _animation;
private readonly Animatable _control;
private readonly Action? _onComplete;
private readonly IClock? _clock;
public DisposeAnimationInstanceSubject(Animator<T> animator, Animation animation, Animatable control, IClock? clock, Action? onComplete)
{

2
src/Avalonia.Base/AvaloniaObjectExtensions.cs

@ -369,7 +369,7 @@ namespace Avalonia
private class BindingAdaptor : IBinding
{
private IObservable<object?> _source;
private readonly IObservable<object?> _source;
public BindingAdaptor(IObservable<object?> source)
{

2
src/Avalonia.Base/Collections/NotifyCollectionChangedExtensions.cs

@ -60,7 +60,7 @@ namespace Avalonia.Collections
private class WeakCollectionChangedObservable : LightweightObservableBase<NotifyCollectionChangedEventArgs>,
IWeakEventSubscriber<NotifyCollectionChangedEventArgs>
{
private WeakReference<INotifyCollectionChanged> _sourceReference;
private readonly WeakReference<INotifyCollectionChanged> _sourceReference;
public WeakCollectionChangedObservable(WeakReference<INotifyCollectionChanged> source)
{

2
src/Avalonia.Base/Data/BindingChainException.cs

@ -9,7 +9,7 @@ namespace Avalonia.Data
/// </summary>
public class BindingChainException : Exception
{
private string _message;
private readonly string _message;
/// <summary>
/// Initializes a new instance of the <see cref="BindingChainException"/> class.

4
src/Avalonia.Base/Data/Core/ExpressionObserver.cs

@ -48,8 +48,8 @@ namespace Avalonia.Data.Core
new ObservableStreamPlugin(),
};
private readonly ExpressionNode _node;
private object? _root;
private Func<object?>? _rootGetter;
private readonly object? _root;
private readonly Func<object?>? _rootGetter;
private IDisposable? _rootSubscription;
private WeakReference<object?>? _value;
private IReadOnlyList<ITransformNode>? _transformNodes;

4
src/Avalonia.Base/Data/Core/Parsers/ExpressionVisitorNodeBuilder.cs

@ -11,8 +11,8 @@ namespace Avalonia.Data.Core.Parsers
class ExpressionVisitorNodeBuilder : ExpressionVisitor
{
private const string MultiDimensionalArrayGetterMethodName = "Get";
private static PropertyInfo AvaloniaObjectIndexer;
private static MethodInfo CreateDelegateMethod;
private static readonly PropertyInfo AvaloniaObjectIndexer;
private static readonly MethodInfo CreateDelegateMethod;
private readonly bool _enableDataValidation;

2
src/Avalonia.Base/Data/Core/Plugins/PropertyError.cs

@ -7,7 +7,7 @@ namespace Avalonia.Data.Core.Plugins
/// </summary>
public class PropertyError : IPropertyAccessor
{
private BindingNotification _error;
private readonly BindingNotification _error;
/// <summary>
/// Initializes a new instance of the <see cref="PropertyError"/> class.

2
src/Avalonia.Base/Data/Core/PropertyAccessorNode.cs

@ -8,7 +8,7 @@ namespace Avalonia.Data.Core
internal class PropertyAccessorNode : SettableNode
{
private readonly bool _enableValidation;
private IPropertyAccessorPlugin? _customPlugin;
private readonly IPropertyAccessorPlugin? _customPlugin;
private IPropertyAccessor? _accessor;
public PropertyAccessorNode(string propertyName, bool enableValidation)

2
src/Avalonia.Base/Data/Core/StreamNode.cs

@ -8,7 +8,7 @@ namespace Avalonia.Data.Core
[RequiresUnreferencedCode(TrimmingMessages.ExpressionNodeRequiresUnreferencedCodeMessage)]
internal class StreamNode : ExpressionNode
{
private IStreamPlugin? _customPlugin = null;
private readonly IStreamPlugin? _customPlugin = null;
private IDisposable? _subscription;
public override string Description => "^";

2
src/Avalonia.Base/Input/Cursor.cs

@ -42,7 +42,7 @@ namespace Avalonia.Input
public class Cursor : IDisposable
{
public static readonly Cursor Default = new Cursor(StandardCursorType.Arrow);
private string _name;
private readonly string _name;
private Cursor(ICursorImpl platformImpl, string name)
{

2
src/Avalonia.Base/Layout/LayoutManager.cs

@ -29,7 +29,7 @@ namespace Avalonia.Layout
private bool _queued;
private bool _running;
private int _totalPassCount;
private Action _invokeOnRender;
private readonly Action _invokeOnRender;
public LayoutManager(ILayoutRoot owner)
{

2
src/Avalonia.Base/Media/BoxShadow.cs

@ -44,7 +44,7 @@ namespace Avalonia.Media
struct ArrayReader
{
private int _index;
private string[] _arr;
private readonly string[] _arr;
public ArrayReader(string[] arr)
{

2
src/Avalonia.Base/Media/BoxShadows.cs

@ -61,7 +61,7 @@ namespace Avalonia.Media
#pragma warning restore CA1815 // Override equals and operator equals on value types
{
private int _index;
private BoxShadows _shadows;
private readonly BoxShadows _shadows;
public BoxShadowsEnumerator(BoxShadows shadows)
{

4
src/Avalonia.Base/Media/FormattedText.cs

@ -23,11 +23,11 @@ namespace Avalonia.Media
private const double MaxFontEmSize = RealInfiniteWidth / GreatestMultiplierOfEm;
// properties and format runs
private string _text;
private readonly string _text;
private readonly SpanVector _formatRuns = new SpanVector(null);
private SpanPosition _latestPosition;
private GenericTextParagraphProperties _defaultParaProps;
private readonly GenericTextParagraphProperties _defaultParaProps;
private double _maxTextWidth = double.PositiveInfinity;
private double[]? _maxTextWidths;

2
src/Avalonia.Base/Media/Geometry.cs

@ -21,7 +21,7 @@ namespace Avalonia.Media
AvaloniaProperty.Register<Geometry, Transform?>(nameof(Transform));
private bool _isDirty = true;
private bool _canInvaldate = true;
private readonly bool _canInvaldate = true;
private IGeometryImpl? _platformImpl;
static Geometry()

2
src/Avalonia.Base/Media/Imaging/Bitmap.cs

@ -12,7 +12,7 @@ namespace Avalonia.Media.Imaging
/// </summary>
public class Bitmap : IBitmap, IImageBrushSource
{
private bool _isTranscoded;
private readonly bool _isTranscoded;
/// <summary>
/// Loads a Bitmap from a stream and decodes at the desired width. Aspect ratio is maintained.
/// This is more efficient than loading and then resizing.

2
src/Avalonia.Base/Media/Imaging/PixelFormatReaders.cs

@ -94,7 +94,7 @@ internal static unsafe class PixelFormatReader
_bit = 0;
}
private static Rgba8888Pixel[] Palette = new[]
private static readonly Rgba8888Pixel[] Palette = new[]
{
s_black,
new Rgba8888Pixel

2
src/Avalonia.Base/Media/Imaging/WriteableBitmap.cs

@ -11,7 +11,7 @@ namespace Avalonia.Media.Imaging
public class WriteableBitmap : Bitmap
{
// Holds a buffer with pixel format that requires transcoding
private BitmapMemory? _pixelFormatMemory = null;
private readonly BitmapMemory? _pixelFormatMemory = null;
/// <summary>
/// Initializes a new instance of the <see cref="WriteableBitmap"/> class.

4
src/Avalonia.Base/Media/MediaContext.Clock.cs

@ -15,8 +15,8 @@ internal partial class MediaContext
class MediaContextClock : IGlobalClock
{
private readonly MediaContext _parent;
private List<IObserver<TimeSpan>> _observers = new();
private List<IObserver<TimeSpan>> _newObservers = new();
private readonly List<IObserver<TimeSpan>> _observers = new();
private readonly List<IObserver<TimeSpan>> _newObservers = new();
private Queue<Action<TimeSpan>> _queuedAnimationFrames = new();
private Queue<Action<TimeSpan>> _queuedAnimationFramesNext = new();
private TimeSpan _currentAnimationTimestamp;

4
src/Avalonia.Base/Media/MediaContext.cs

@ -26,7 +26,7 @@ internal partial class MediaContext : ICompositorScheduler
private List<Action>? _invokeOnRenderCallbacks;
private readonly Stack<List<Action>> _invokeOnRenderCallbackListPool = new();
private DispatcherTimer _animationsTimer = new(DispatcherPriority.Render)
private readonly DispatcherTimer _animationsTimer = new(DispatcherPriority.Render)
{
// Since this timer is used to drive animations that didn't contribute to the previous frame at all
// We can safely use 16ms interval until we fix our animation system to actually report the next expected
@ -34,7 +34,7 @@ internal partial class MediaContext : ICompositorScheduler
Interval = TimeSpan.FromMilliseconds(16)
};
private Dictionary<object, TopLevelInfo> _topLevels = new();
private readonly Dictionary<object, TopLevelInfo> _topLevels = new();
private MediaContext(Dispatcher dispatcher)
{

2
src/Avalonia.Base/Media/UnicodeRange.cs

@ -104,7 +104,7 @@ namespace Avalonia.Media
public readonly record struct UnicodeRangeSegment
{
private static Regex s_regex = new Regex(@"^(?:[uU]\+)?(?:([0-9a-fA-F](?:[0-9a-fA-F?]{1,5})?))$", RegexOptions.Compiled);
private static readonly Regex s_regex = new Regex(@"^(?:[uU]\+)?(?:([0-9a-fA-F](?:[0-9a-fA-F?]{1,5})?))$", RegexOptions.Compiled);
public UnicodeRangeSegment(int start, int end)
{

2
src/Avalonia.Base/PropertyStore/EffectiveValue`1.cs

@ -17,7 +17,7 @@ namespace Avalonia.PropertyStore
{
private readonly StyledPropertyMetadata<T> _metadata;
private T? _baseValue;
private UncommonFields? _uncommon;
private readonly UncommonFields? _uncommon;
public EffectiveValue(
AvaloniaObject owner,

2
src/Avalonia.Base/Reactive/Operators/Sink.cs

@ -8,7 +8,7 @@ namespace Avalonia.Reactive.Operators;
internal abstract class Sink<TTarget> : IDisposable
{
private IDisposable? _upstream;
private volatile IObserver<TTarget> _observer;
private readonly IObserver<TTarget> _observer;
protected Sink(IObserver<TTarget> observer)
{

4
src/Avalonia.Base/Rendering/Composition/Animations/ImplicitAnimationCollection.cs

@ -19,8 +19,8 @@ namespace Avalonia.Rendering.Composition.Animations
/// </remarks>
public class ImplicitAnimationCollection : CompositionObject, IDictionary<string, ICompositionAnimationBase>
{
private Dictionary<string, ICompositionAnimationBase> _inner = new Dictionary<string, ICompositionAnimationBase>();
private IDictionary<string, ICompositionAnimationBase> _innerface;
private readonly Dictionary<string, ICompositionAnimationBase> _inner = new Dictionary<string, ICompositionAnimationBase>();
private readonly IDictionary<string, ICompositionAnimationBase> _innerface;
internal ImplicitAnimationCollection(Compositor compositor) : base(compositor, null)
{
_innerface = _inner;

16
src/Avalonia.Base/Rendering/Composition/Compositor.cs

@ -20,20 +20,20 @@ namespace Avalonia.Rendering.Composition
{
internal IRenderLoop Loop { get; }
internal bool UseUiThreadForSynchronousCommits { get; }
private ServerCompositor _server;
private readonly ServerCompositor _server;
private CompositionBatch? _nextCommit;
private BatchStreamObjectPool<object?> _batchObjectPool;
private BatchStreamMemoryPool _batchMemoryPool;
private Queue<ICompositorSerializable> _objectSerializationQueue = new();
private HashSet<ICompositorSerializable> _objectSerializationHashSet = new();
private readonly BatchStreamObjectPool<object?> _batchObjectPool;
private readonly BatchStreamMemoryPool _batchMemoryPool;
private readonly Queue<ICompositorSerializable> _objectSerializationQueue = new();
private readonly HashSet<ICompositorSerializable> _objectSerializationHashSet = new();
private Queue<Action> _invokeBeforeCommitWrite = new(), _invokeBeforeCommitRead = new();
private HashSet<IDisposable> _disposeOnNextBatch = new();
private readonly HashSet<IDisposable> _disposeOnNextBatch = new();
internal ServerCompositor Server => _server;
private CompositionBatch? _pendingBatch;
private readonly object _pendingBatchLock = new();
private List<Action> _pendingServerCompositorJobs = new();
private readonly List<Action> _pendingServerCompositorJobs = new();
private DiagnosticTextRenderer? _diagnosticTextRenderer;
private Action _triggerCommitRequested;
private readonly Action _triggerCommitRequested;
internal IEasing DefaultEasing { get; }

2
src/Avalonia.Base/Rendering/Composition/Drawing/CompositionRenderDataSceneBrushContent.cs

@ -7,7 +7,7 @@ namespace Avalonia.Rendering.Composition.Drawing;
internal class CompositionRenderDataSceneBrushContent : ISceneBrushContent
{
public CompositionRenderData RenderData { get; }
private Rect? _rect;
private readonly Rect? _rect;
public CompositionRenderDataSceneBrushContent(ITileBrush brush, CompositionRenderData renderData, Rect? rect,
bool useScalableRasterization)

6
src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionTrackedValues.cs

@ -6,8 +6,8 @@ namespace Avalonia.Rendering.Composition.Expressions;
internal class ExpressionTrackedObjects : IEnumerable<IExpressionObject>
{
private List<IExpressionObject> _list = new();
private HashSet<IExpressionObject> _hashSet = new();
private readonly List<IExpressionObject> _list = new();
private readonly HashSet<IExpressionObject> _hashSet = new();
public void Add(IExpressionObject obj, string member)
{
@ -35,7 +35,7 @@ internal class ExpressionTrackedObjects : IEnumerable<IExpressionObject>
public struct Pool
{
private Stack<ExpressionTrackedObjects> _stack = new();
private readonly Stack<ExpressionTrackedObjects> _stack = new();
public Pool()
{

2
src/Avalonia.Base/Rendering/Composition/Server/DrawingContextProxy.cs

@ -20,7 +20,7 @@ namespace Avalonia.Rendering.Composition.Server;
internal class CompositorDrawingContextProxy : IDrawingContextImpl,
IDrawingContextWithAcrylicLikeSupport, IDrawingContextImplWithEffects
{
private IDrawingContextImpl _impl;
private readonly IDrawingContextImpl _impl;
public CompositorDrawingContextProxy(IDrawingContextImpl impl)
{

6
src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs

@ -26,13 +26,13 @@ namespace Avalonia.Rendering.Composition.Server
private FrameTimeGraph? _renderTimeGraph;
private FrameTimeGraph? _layoutTimeGraph;
private Rect _dirtyRect;
private Random _random = new();
private readonly Random _random = new();
private Size _layerSize;
private IDrawingContextLayerImpl? _layer;
private bool _redrawRequested;
private bool _disposed;
private HashSet<ServerCompositionVisual> _attachedVisuals = new();
private Queue<ServerCompositionVisual> _adornerUpdateQueue = new();
private readonly HashSet<ServerCompositionVisual> _attachedVisuals = new();
private readonly Queue<ServerCompositionVisual> _adornerUpdateQueue = new();
public long Id { get; }
public ulong Revision { get; private set; }

4
src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.RenderResources.cs

@ -4,8 +4,8 @@ namespace Avalonia.Rendering.Composition.Server;
partial class ServerCompositor
{
private Queue<IServerRenderResource> _renderResourcesInvalidationQueue = new();
private HashSet<IServerRenderResource> _renderResourcesInvalidationSet = new();
private readonly Queue<IServerRenderResource> _renderResourcesInvalidationQueue = new();
private readonly HashSet<IServerRenderResource> _renderResourcesInvalidationSet = new();
public void ApplyEnqueuedRenderResourceChanges()
{

12
src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.cs

@ -26,12 +26,12 @@ namespace Avalonia.Rendering.Composition.Server
public long LastBatchId { get; private set; }
public Stopwatch Clock { get; } = Stopwatch.StartNew();
public TimeSpan ServerNow { get; private set; }
private List<ServerCompositionTarget> _activeTargets = new();
private HashSet<IServerClockItem> _clockItems = new();
private List<IServerClockItem> _clockItemsToUpdate = new();
private readonly List<ServerCompositionTarget> _activeTargets = new();
private readonly HashSet<IServerClockItem> _clockItems = new();
private readonly List<IServerClockItem> _clockItemsToUpdate = new();
internal BatchStreamObjectPool<object?> BatchObjectPool;
internal BatchStreamMemoryPool BatchMemoryPool;
private object _lock = new object();
private readonly object _lock = new object();
private Thread? _safeThread;
private bool _uiThreadIsInsideRender;
public PlatformRenderInterfaceContextManager RenderInterface { get; }
@ -57,8 +57,8 @@ namespace Avalonia.Rendering.Composition.Server
internal void UpdateServerTime() => ServerNow = Clock.Elapsed;
List<CompositionBatch> _reusableToNotifyProcessedList = new();
List<CompositionBatch> _reusableToNotifyRenderedList = new();
readonly List<CompositionBatch> _reusableToNotifyProcessedList = new();
readonly List<CompositionBatch> _reusableToNotifyRenderedList = new();
void ApplyPendingBatches()
{
while (true)

2
src/Avalonia.Base/Rendering/Composition/Transport/Batch.cs

@ -12,7 +12,7 @@ namespace Avalonia.Rendering.Composition.Transport
public class CompositionBatch
{
private static long _nextSequenceId = 1;
private static ConcurrentBag<BatchStreamData> _pool = new();
private static readonly ConcurrentBag<BatchStreamData> _pool = new();
private readonly TaskCompletionSource<int> _acceptedTcs = new();
private readonly TaskCompletionSource<int> _renderedTcs = new();

2
src/Avalonia.Base/Rendering/Composition/Transport/BatchStreamArrayPool.cs

@ -17,7 +17,7 @@ internal abstract class BatchStreamPoolBase<T> : IDisposable
int _usage;
readonly int[] _usageStatistics = new int[10];
int _usageStatisticsSlot;
bool _reclaimImmediately;
readonly bool _reclaimImmediately;
public int CurrentUsage => _usage;
public int CurrentPool => _pool.Count;

2
src/Avalonia.Base/Rendering/Composition/VisualCollection.cs

@ -8,7 +8,7 @@ namespace Avalonia.Rendering.Composition
/// </summary>
public partial class CompositionVisualCollection : CompositionObject
{
private CompositionVisual _owner;
private readonly CompositionVisual _owner;
internal CompositionVisualCollection(CompositionVisual parent, ServerCompositionVisualCollection server) : base(parent.Compositor, server)
{
_owner = parent;

6
src/Avalonia.Base/Rendering/RenderLoop.cs

@ -16,11 +16,11 @@ namespace Avalonia.Rendering
/// </remarks>
internal class RenderLoop : IRenderLoop
{
private List<IRenderLoopTask> _items = new List<IRenderLoopTask>();
private List<IRenderLoopTask> _itemsCopy = new List<IRenderLoopTask>();
private readonly List<IRenderLoopTask> _items = new List<IRenderLoopTask>();
private readonly List<IRenderLoopTask> _itemsCopy = new List<IRenderLoopTask>();
private IRenderTimer? _timer;
private int _inTick;
private int _inUpdate;
private readonly int _inUpdate;
public static IRenderLoop LocatorAutoInstance
{

2
src/Avalonia.Base/Rendering/SwapchainBase.cs

@ -13,7 +13,7 @@ abstract class SwapchainBase<TImage> : IAsyncDisposable where TImage : class, IS
{
protected ICompositionGpuInterop Interop { get; }
protected CompositionDrawingSurface Target { get; }
private List<TImage> _pendingImages = new();
private readonly List<TImage> _pendingImages = new();
public SwapchainBase(ICompositionGpuInterop interop, CompositionDrawingSurface target)
{

2
src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs

@ -13,7 +13,7 @@ public partial class Dispatcher
private bool _hasShutdownFinished;
private bool _startingShutdown;
private Stack<DispatcherFrame> _frames = new();
private readonly Stack<DispatcherFrame> _frames = new();
/// <summary>

2
src/Avalonia.Base/Threading/Dispatcher.Queue.cs

@ -11,7 +11,7 @@ public partial class Dispatcher
private bool _explicitBackgroundProcessingRequested;
private const int MaximumInputStarvationTimeInFallbackMode = 50;
private const int MaximumInputStarvationTimeInExplicitProcessingExplicitMode = 50;
private int _maximumInputStarvationTime;
private readonly int _maximumInputStarvationTime;
void RequestBackgroundProcessing()
{

2
src/Avalonia.Base/Threading/Dispatcher.Timers.cs

@ -6,7 +6,7 @@ namespace Avalonia.Threading;
public partial class Dispatcher
{
private List<DispatcherTimer> _timers = new();
private readonly List<DispatcherTimer> _timers = new();
private long _timersVersion;
private bool _dueTimeFound;
private long _dueTimeInMs;

2
src/Avalonia.Base/Threading/DispatcherFrame.cs

@ -8,7 +8,7 @@ namespace Avalonia.Threading;
/// </summary>
public class DispatcherFrame
{
private bool _exitWhenRequested;
private readonly bool _exitWhenRequested;
private bool _continue;
private bool _isRunning;
private CancellationTokenSource? _cancellationTokenSource;

4
src/Avalonia.Base/Threading/DispatcherOperation.cs

@ -224,8 +224,8 @@ public class DispatcherOperation
private void OnCompletedOrAborted(object? sender, EventArgs e) => Exit();
private DispatcherOperation _operation;
private Timer? _waitTimer;
private readonly DispatcherOperation _operation;
private readonly Timer? _waitTimer;
}
public Task GetTask() => GetTaskCore();

6
src/Avalonia.Base/Threading/DispatcherTimer.cs

@ -334,15 +334,15 @@ public partial class DispatcherTimer
}
// This is the object we use to synchronize access.
private object _instanceLock = new object();
private readonly object _instanceLock = new object();
// Note: We cannot BE a dispatcher-affinity object because we can be
// created by a worker thread. We are still associated with a
// dispatcher (where we post the item) but we can be accessed
// by any thread.
private Dispatcher _dispatcher;
private readonly Dispatcher _dispatcher;
private DispatcherPriority _priority; // NOTE: should be Priority
private readonly DispatcherPriority _priority; // NOTE: should be Priority
private TimeSpan _interval;
private DispatcherOperation? _operation;
private bool _isEnabled;

2
src/Avalonia.Base/Threading/IDispatcherImpl.cs

@ -46,7 +46,7 @@ internal class LegacyDispatcherImpl : IDispatcherImpl
{
private readonly IPlatformThreadingInterface _platformThreading;
private IDisposable? _timer;
private Stopwatch _clock = Stopwatch.StartNew();
private readonly Stopwatch _clock = Stopwatch.StartNew();
public LegacyDispatcherImpl(IPlatformThreadingInterface platformThreading)
{

2
src/Avalonia.Base/Threading/ThreadSafeObjectPool.cs

@ -4,7 +4,7 @@ namespace Avalonia.Threading
{
internal class ThreadSafeObjectPool<T> where T : class, new()
{
private Stack<T> _stack = new Stack<T>();
private readonly Stack<T> _stack = new Stack<T>();
public static ThreadSafeObjectPool<T> Default { get; } = new ThreadSafeObjectPool<T>();
public T Get()

4
src/Avalonia.Base/Utilities/PooledInlineList.cs

@ -150,9 +150,9 @@ internal struct PooledInlineList<T> : IDisposable, IEnumerable<T> where T : clas
public struct Enumerator : IEnumerator<T>
{
private T? _singleItem;
private readonly T? _singleItem;
private int _index;
private SimplePooledList? _list;
private readonly SimplePooledList? _list;
public Enumerator(object? item)
{

4
src/Avalonia.Base/Utilities/Ref.cs

@ -105,8 +105,8 @@ namespace Avalonia.Utilities
class Ref<T> : CriticalFinalizerObject, IRef<T> where T : class
{
private T? _item;
private RefCounter _counter;
private object _lock = new object();
private readonly RefCounter _counter;
private readonly object _lock = new object();
public Ref(T item, RefCounter counter)
{

2
src/Avalonia.Base/Utilities/SingleOrDictionary.cs

@ -99,7 +99,7 @@ namespace Avalonia.Utilities
private class SingleEnumerator<T> : IEnumerator<T>
{
private T value;
private readonly T value;
private int index = -1;
public SingleEnumerator(T value)

2
src/Avalonia.Base/Utilities/SmallDictionary.cs

@ -294,7 +294,7 @@ internal struct InlineDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey,
private readonly KeyValuePair[]? _arr;
private KeyValuePair<TKey, TValue> _first;
private int _index;
private Type _type;
private readonly Type _type;
enum Type
{
Empty, Single, Array, Dictionary

10
src/Avalonia.Base/Utilities/SpringSolver.cs

@ -31,11 +31,11 @@ namespace Avalonia.Utilities;
internal struct SpringSolver
{
private double m_w0;
private double m_zeta;
private double m_wd;
private double m_A;
private double m_B;
private readonly double m_w0;
private readonly double m_zeta;
private readonly double m_wd;
private readonly double m_A;
private readonly double m_B;
/// <summary>
///

Loading…
Cancel
Save