Skip to content

Commit 508c792

Browse files
authored
Ignore DR Optimization preferences (#10794)
1 parent 28f1901 commit 508c792

File tree

3 files changed

+36
-109
lines changed

3 files changed

+36
-109
lines changed

src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/AppContextDefaultValues.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ static partial void PopulateDefaultValuesPartial(string platformIdentifier, stri
3131
LocalAppContext.DefineSwitchDefault(FrameworkAppContextSwitches.KeyboardNavigationFromHyperlinkInItemsControlIsNotRelativeToFocusedElementSwitchName, false);
3232
LocalAppContext.DefineSwitchDefault(FrameworkAppContextSwitches.ItemAutomationPeerKeepsItsItemAliveSwitchName, false);
3333
LocalAppContext.DefineSwitchDefault(FrameworkAppContextSwitches.DisableFluentThemeWindowBackdropSwitchName, false);
34-
LocalAppContext.DefineSwitchDefault(FrameworkAppContextSwitches.DisableDynamicResourceOptimizationSwitchName, true);
34+
LocalAppContext.DefineSwitchDefault(FrameworkAppContextSwitches.DisableDynamicResourceOptimizationSwitchName, false);
3535

3636
#pragma warning restore CS0436 // Type conflicts with imported type
3737
}

src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/ResourceDictionary.cs

Lines changed: 30 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,33 +1785,11 @@ private object FetchResource(
17851785
DeferredResourceReference deferredResourceReference;
17861786
if (!IsThemeDictionary)
17871787
{
1788-
if (FrameworkAppContextSwitches.DisableDynamicResourceOptimization)
1789-
{
1790-
if (_ownerApps is not null)
1791-
{
1792-
deferredResourceReference = new DeferredAppResourceReference(this, resourceKey);
1793-
}
1794-
else
1795-
{
1796-
deferredResourceReference = new DeferredResourceReference(this, resourceKey);
1797-
}
1798-
1799-
// Cache the deferredResourceReference so that it can be validated
1800-
// in case of a dictionary change prior to its inflation
1801-
if (_weakDeferredResourceReferences is null)
1802-
{
1803-
_weakDeferredResourceReferences = new WeakReferenceList();
1804-
}
1805-
1806-
_weakDeferredResourceReferences.Add(deferredResourceReference, true /*SkipFind*/);
1807-
}
1808-
else
1809-
{
1810-
// Cache the deferredResourceReference so that it can be validated
1811-
// in case of a dictionary change prior to its inflation
1812-
deferredResourceReference = _ownerApps is not null ? new DeferredAppResourceReference(this, resourceKey) : new DeferredResourceReference(this, resourceKey);
1813-
GetOrCreateWeakReferenceList(resourceKey).Add(deferredResourceReference, true /*SkipFind*/);
1814-
}
1788+
1789+
// Cache the deferredResourceReference so that it can be validated
1790+
// in case of a dictionary change prior to its inflation
1791+
deferredResourceReference = _ownerApps is not null ? new DeferredAppResourceReference(this, resourceKey) : new DeferredResourceReference(this, resourceKey);
1792+
GetOrCreateWeakReferenceList(resourceKey).Add(deferredResourceReference, true /*SkipFind*/);
18151793
}
18161794
else
18171795
{
@@ -1842,17 +1820,10 @@ private WeakReferenceList GetOrCreateWeakReferenceList(object resourceKey)
18421820

18431821
internal void RemoveDeferredResourceReference(DeferredResourceReference deferredResourceReference)
18441822
{
1845-
if (FrameworkAppContextSwitches.DisableDynamicResourceOptimization)
1823+
1824+
if (this._weakDeferredResourceReferencesMap?.TryGetValue(deferredResourceReference.Key, out var weakDeferredResourceReferences) is true)
18461825
{
1847-
_weakDeferredResourceReferences?.Remove(deferredResourceReference);
1848-
}
1849-
else
1850-
{
1851-
//GetWeakReferenceList(deferredResourceReference.Key)?.Remove(deferredResourceReference);
1852-
if (this._weakDeferredResourceReferencesMap?.TryGetValue(deferredResourceReference.Key, out var weakDeferredResourceReferences) is true)
1853-
{
1854-
weakDeferredResourceReferences.Remove(deferredResourceReference);
1855-
}
1826+
weakDeferredResourceReferences.Remove(deferredResourceReference);
18561827
}
18571828
}
18581829

@@ -1862,52 +1833,33 @@ internal void RemoveDeferredResourceReference(DeferredResourceReference deferred
18621833
/// </summary>
18631834
private void ValidateDeferredResourceReferences(object resourceKey)
18641835
{
1865-
if (FrameworkAppContextSwitches.DisableDynamicResourceOptimization)
1836+
1837+
if (_weakDeferredResourceReferencesMap is null)
18661838
{
1867-
if (_weakDeferredResourceReferences != null)
1868-
{
1869-
foreach (Object o in _weakDeferredResourceReferences)
1870-
{
1871-
DeferredResourceReference deferredResourceReference = o as DeferredResourceReference;
1872-
if (deferredResourceReference != null && (resourceKey == null || Object.Equals(resourceKey, deferredResourceReference.Key)))
1873-
{
1874-
// This will inflate the deferred reference, causing it
1875-
// to be removed from the list. The list may also be
1876-
// purged of dead references.
1877-
deferredResourceReference.GetValue(BaseValueSourceInternal.Unknown);
1878-
}
1879-
}
1880-
}
1839+
return;
18811840
}
1882-
else
1883-
{
1884-
if (_weakDeferredResourceReferencesMap is null)
1885-
{
1886-
return;
1887-
}
18881841

1889-
if (resourceKey is null)
1842+
if (resourceKey is null)
1843+
{
1844+
foreach (var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap.Values)
18901845
{
1891-
foreach (var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap.Values)
1846+
foreach (var weakResourceReference in weakDeferredResourceReferences)
18921847
{
1893-
foreach (var weakResourceReference in weakDeferredResourceReferences)
1894-
{
1895-
DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference;
1848+
DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference;
18961849

1897-
Inflate(deferredResourceReference);
1898-
}
1850+
Inflate(deferredResourceReference);
18991851
}
19001852
}
1901-
else
1853+
}
1854+
else
1855+
{
1856+
if (_weakDeferredResourceReferencesMap.TryGetValue(resourceKey, out var weakDeferredResourceReferences))
19021857
{
1903-
if (_weakDeferredResourceReferencesMap.TryGetValue(resourceKey, out var weakDeferredResourceReferences))
1858+
foreach (var weakResourceReference in weakDeferredResourceReferences)
19041859
{
1905-
foreach (var weakResourceReference in weakDeferredResourceReferences)
1906-
{
1907-
DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference;
1860+
DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference;
19081861

1909-
Inflate(deferredResourceReference);
1910-
}
1862+
Inflate(deferredResourceReference);
19111863
}
19121864
}
19131865
}
@@ -2595,37 +2547,20 @@ private void CopyDeferredContentFrom(ResourceDictionary loadedRD)
25952547

25962548
private void MoveDeferredResourceReferencesFrom(ResourceDictionary loadedRD)
25972549
{
2598-
if (FrameworkAppContextSwitches.DisableDynamicResourceOptimization)
2599-
{
2600-
// move the list
2601-
_weakDeferredResourceReferences = loadedRD._weakDeferredResourceReferences;
2550+
// move the map and thus the lists
2551+
_weakDeferredResourceReferencesMap = loadedRD._weakDeferredResourceReferencesMap;
26022552

2553+
if (_weakDeferredResourceReferencesMap is not null)
2554+
{
26032555
// redirect each entry toward its new owner
2604-
if (_weakDeferredResourceReferences != null)
2556+
foreach (var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap.Values)
26052557
{
2606-
foreach (DeferredResourceReference drr in _weakDeferredResourceReferences)
2558+
foreach (DeferredResourceReference drr in weakDeferredResourceReferences)
26072559
{
26082560
drr.Dictionary = this;
26092561
}
26102562
}
26112563
}
2612-
else
2613-
{
2614-
// move the map and thus the lists
2615-
_weakDeferredResourceReferencesMap = loadedRD._weakDeferredResourceReferencesMap;
2616-
2617-
if (_weakDeferredResourceReferencesMap is not null)
2618-
{
2619-
// redirect each entry toward its new owner
2620-
foreach (var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap.Values)
2621-
{
2622-
foreach (DeferredResourceReference drr in weakDeferredResourceReferences)
2623-
{
2624-
drr.Dictionary = this;
2625-
}
2626-
}
2627-
}
2628-
}
26292564
}
26302565

26312566
#endregion PrivateMethods
@@ -2691,7 +2626,6 @@ private enum FallbackState
26912626
private WeakReferenceList _ownerFEs = null;
26922627
private WeakReferenceList _ownerFCEs = null;
26932628
private WeakReferenceList _ownerApps = null;
2694-
private WeakReferenceList _weakDeferredResourceReferences = null;
26952629
private Dictionary<object, WeakReferenceList> _weakDeferredResourceReferencesMap = null;
26962630
private ObservableCollection<ResourceDictionary> _mergedDictionaries = null;
26972631
private Uri _source = null;

src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/ResourceReferenceExpression.cs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -275,18 +275,11 @@ private void InvalidateCacheValue()
275275
WriteInternalState(InternalState.IsListeningForInflated, false);
276276
}
277277
}
278-
279-
if (FrameworkAppContextSwitches.DisableDynamicResourceOptimization)
280-
{
281-
deferredResourceReference.RemoveFromDictionary();
282-
}
283-
else
284-
{
285-
// This will inflate the deferred reference, causing it
286-
// to be removed from the list. The list may also be
287-
// purged of dead references.
288-
deferredResourceReference.GetValue(BaseValueSourceInternal.Unknown);
289-
}
278+
279+
// This will inflate the deferred reference, causing it
280+
// to be removed from the list. The list may also be
281+
// purged of dead references.
282+
deferredResourceReference.GetValue(BaseValueSourceInternal.Unknown);
290283
}
291284

292285
StopListeningForFreezableChanges(resource);

0 commit comments

Comments
 (0)