Skip to content

Commit 7f1fc96

Browse files
Use cache to make type threadsafe
1 parent f134e1f commit 7f1fc96

File tree

4 files changed

+8
-19
lines changed

4 files changed

+8
-19
lines changed

src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public LinearRgb Adapt(in LinearRgb color)
129129
}
130130

131131
// Conversion to XYZ
132-
LinearRgbToCieXyzConverter converterToXYZ = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace);
132+
LinearRgbToCieXyzConverter converterToXYZ = GetLinearRgbToCieXyzConverter(color.WorkingSpace);
133133
CieXyz unadapted = converterToXYZ.Convert(color);
134134

135135
// Adaptation

src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Six Labors.
22
// Licensed under the Six Labors Split License.
33

4+
using System.Collections.Concurrent;
45
using System.Runtime.CompilerServices;
56
using System.Runtime.InteropServices;
67

@@ -11,9 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
1112
/// </content>
1213
public partial class ColorSpaceConverter
1314
{
14-
private static readonly HunterLabToCieXyzConverter HunterLabToCieXyzConverter = new();
15-
16-
private LinearRgbToCieXyzConverter? linearRgbToCieXyzConverter;
15+
private static readonly ConcurrentDictionary<RgbWorkingSpace, LinearRgbToCieXyzConverter> ConverterCache = new();
1716

1817
/// <summary>
1918
/// Converts a <see cref="CieLab"/> into a <see cref="CieXyz"/>.
@@ -327,7 +326,7 @@ public void Convert(ReadOnlySpan<HunterLab> source, Span<CieXyz> destination)
327326
public CieXyz ToCieXyz(in LinearRgb color)
328327
{
329328
// Conversion
330-
LinearRgbToCieXyzConverter converter = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace);
329+
LinearRgbToCieXyzConverter converter = GetLinearRgbToCieXyzConverter(color.WorkingSpace);
331330
CieXyz unadapted = converter.Convert(color);
332331

333332
return this.Adapt(unadapted, color.WorkingSpace.WhitePoint);
@@ -454,13 +453,6 @@ public void Convert(ReadOnlySpan<YCbCr> source, Span<CieXyz> destination)
454453
/// </summary>
455454
/// <param name="workingSpace">The source working space</param>
456455
/// <returns>The <see cref="LinearRgbToCieXyzConverter"/></returns>
457-
private LinearRgbToCieXyzConverter GetLinearRgbToCieXyzConverter(RgbWorkingSpace workingSpace)
458-
{
459-
if (this.linearRgbToCieXyzConverter?.SourceWorkingSpace.Equals(workingSpace) == true)
460-
{
461-
return this.linearRgbToCieXyzConverter;
462-
}
463-
464-
return this.linearRgbToCieXyzConverter = new LinearRgbToCieXyzConverter(workingSpace);
465-
}
456+
private static LinearRgbToCieXyzConverter GetLinearRgbToCieXyzConverter(RgbWorkingSpace workingSpace)
457+
=> ConverterCache.GetOrAdd(workingSpace, (key) => new LinearRgbToCieXyzConverter(key));
466458
}

src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Copyright (c) Six Labors.
22
// Licensed under the Six Labors Split License.
33

4-
using System.Diagnostics.CodeAnalysis;
54
using System.Numerics;
65

76
namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
@@ -12,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
1211
public partial class ColorSpaceConverter
1312
{
1413
// Options.
15-
private static readonly ColorSpaceConverterOptions DefaultOptions = new ColorSpaceConverterOptions();
14+
private static readonly ColorSpaceConverterOptions DefaultOptions = new();
1615
private readonly Matrix4x4 lmsAdaptationMatrix;
1716
private readonly CieXyz whitePoint;
1817
private readonly CieXyz targetLuvWhitePoint;

src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,5 @@ public override bool Equals(object? obj)
7575

7676
/// <inheritdoc/>
7777
public override int GetHashCode()
78-
{
79-
return HashCode.Combine(this.WhitePoint, this.ChromaticityCoordinates);
80-
}
78+
=> HashCode.Combine(this.WhitePoint, this.ChromaticityCoordinates);
8179
}

0 commit comments

Comments
 (0)