/// <summary> /// Construct a CasEntries from a another CanEntries without copying the /// array since both are read-only. /// </summary> /// <param name="casEntries">The source CasEntries</param> /// <param name="determinism">The new determinism flag</param> /// <remarks> /// This is for taking a CasEntries item and producing a new /// one with a different deterministic setting /// </remarks> public CasEntries(CasEntries casEntries, CacheDeterminism determinism = default(CacheDeterminism)) { Contract.Requires(casEntries.IsValid); m_hashes = casEntries.m_hashes; Determinism = determinism; }
public void BuildXLCacheDeterminismRoundTrip(int determinism) { BuildXLCacheDeterminism buildXLCacheDeterminism = m_buildXLDeterminism[determinism]; BuildXLCacheDeterminism roundTrip = buildXLCacheDeterminism.ToMemoization().FromMemoization(); AssertDeterminismEqualEnough(buildXLCacheDeterminism, roundTrip); }
public void MemoizationCacheDeterminismFromMemoization(int determinism) { MemoizationCacheDeterminism memoizationCacheDeterminism = m_memoizationDeterminism[determinism]; BuildXLCacheDeterminism buildXLCacheDeterminism = memoizationCacheDeterminism.FromMemoization(); AssertDeterminismEqualEnough(buildXLCacheDeterminism, memoizationCacheDeterminism); }
public void BuildXLCacheDeterminismToMemoization(int determinism) { BuildXLCacheDeterminism buildXLCacheDeterminism = m_buildXLDeterminism[determinism]; MemoizationCacheDeterminism memoizationCacheDeterminism = buildXLCacheDeterminism.ToMemoization(); AssertDeterminismEqualEnough(buildXLCacheDeterminism, memoizationCacheDeterminism); }
/// <summary> /// Construct a CasHash entries read-only array from the given array /// </summary> /// <param name="casHashes">The ordred list of CasHashes</param> /// <param name="determinism">The CacheDeterminism value for this CasEntries</param> /// <remarks> /// The isDeterministic flag defaults to CacheDeterminism.None but if the /// buildengine knows that the content produced by the build transform /// is deterministic, it can set this to CacheDeterminism.Tool to help /// (a) the cache operate better and /// (b) catch bugs where determinism was not achieved even when expected /// /// Cache Agregators may use this flag in order to flag a "deterministic" /// result that was achieved via a shared cache (cache based determinism /// recovery) and will also help catch failures of that to work correctly. /// </remarks> public CasEntries(IEnumerable <CasHash> casHashes, CacheDeterminism determinism = default(CacheDeterminism)) { Contract.Requires(casHashes != null); // The extension method here does the most efficient copy it can m_hashes = casHashes.ToArray(); Determinism = determinism; }
private static void AssertDeterminismEqualEnough(BuildXLCacheDeterminism expected, BuildXLCacheDeterminism actual) { if (!expected.IsDeterministic) { Assert.Equal(expected.EffectiveGuid, actual.EffectiveGuid); } else { Assert.Equal(expected, actual); } }
private static void AssertDeterminismEqualEnough(BuildXLCacheDeterminism buildXL, MemoizationCacheDeterminism memoization) { if (!buildXL.IsDeterministic) { Assert.Equal(buildXL.EffectiveGuid, memoization.EffectiveGuid); } else { Assert.Equal(buildXL.Guid, memoization.Guid); Assert.Equal(buildXL.ExpirationUtc, memoization.ExpirationUtc); } }
/// <summary> /// Initializes a new instance of the <see cref="FullCacheRecordWithDeterminism"/> struct. /// </summary> public FullCacheRecordWithDeterminism(CacheDeterminism determinism) { Record = null; Determinism = determinism; }