mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-03 09:46:54 +02:00
CmdPal: Adding a lock around perf monitor updates (#46061)
Based on reported bug in Teams. Added lock around OnLoadBasePage._loadCount and modified PerformanceWidgetPage to use Interlocked.Increment/Decrement on _loadCount. --------- Co-authored-by: leileizhang <leilzh@microsoft.com> Co-authored-by: Niels Laute <niels.laute@live.nl> Co-authored-by: moooyo <42196638+moooyo@users.noreply.github.com> Co-authored-by: Yu Leng <yuleng@microsoft.com> Co-authored-by: Kai Tao <69313318+vanzue@users.noreply.github.com> Co-authored-by: Jiří Polášek <me@jiripolasek.com> Co-authored-by: Shawn Yuan <128874481+shuaiyuanxx@users.noreply.github.com> Co-authored-by: Gordon Lam <73506701+yeelam-gordon@users.noreply.github.com> Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> Co-authored-by: Mike Hall <mikehall@microsoft.com> Co-authored-by: vanzue <vanzue@outlook.com> Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com> Co-authored-by: Thanh Nguyen <74597207+ThanhNguyxn@users.noreply.github.com> Co-authored-by: Zach Teutsch <88554871+zateutsch@users.noreply.github.com>
This commit is contained in:
61
.github/actions/spell-check/expect.txt
vendored
61
.github/actions/spell-check/expect.txt
vendored
@@ -16,6 +16,7 @@ adaptivecards
|
|||||||
ADDSTRING
|
ADDSTRING
|
||||||
ADDUNDORECORD
|
ADDUNDORECORD
|
||||||
ADifferent
|
ADifferent
|
||||||
|
ADMINS
|
||||||
adml
|
adml
|
||||||
admx
|
admx
|
||||||
advfirewall
|
advfirewall
|
||||||
@@ -169,7 +170,11 @@ cim
|
|||||||
CImage
|
CImage
|
||||||
cla
|
cla
|
||||||
CLASSDC
|
CLASSDC
|
||||||
|
classguid
|
||||||
|
classmethod
|
||||||
CLASSNOTAVAILABLE
|
CLASSNOTAVAILABLE
|
||||||
|
claude
|
||||||
|
CLEARTYPE
|
||||||
clickable
|
clickable
|
||||||
clickonce
|
clickonce
|
||||||
clientside
|
clientside
|
||||||
@@ -201,6 +206,7 @@ colorformat
|
|||||||
colorhistory
|
colorhistory
|
||||||
colorhistorylimit
|
colorhistorylimit
|
||||||
COLORKEY
|
COLORKEY
|
||||||
|
colorref
|
||||||
comctl
|
comctl
|
||||||
comdlg
|
comdlg
|
||||||
comexp
|
comexp
|
||||||
@@ -218,6 +224,7 @@ CONTEXTHELP
|
|||||||
CONTEXTMENUHANDLER
|
CONTEXTMENUHANDLER
|
||||||
contractversion
|
contractversion
|
||||||
CONTROLPARENT
|
CONTROLPARENT
|
||||||
|
Convs
|
||||||
cooldown
|
cooldown
|
||||||
copiedcolorrepresentation
|
copiedcolorrepresentation
|
||||||
COPYPEN
|
COPYPEN
|
||||||
@@ -229,6 +236,8 @@ cpcontrols
|
|||||||
cph
|
cph
|
||||||
cplusplus
|
cplusplus
|
||||||
CPower
|
CPower
|
||||||
|
cpptools
|
||||||
|
cppvsdbg
|
||||||
cppwinrt
|
cppwinrt
|
||||||
createdump
|
createdump
|
||||||
CREATEPROCESS
|
CREATEPROCESS
|
||||||
@@ -251,6 +260,8 @@ CTLCOLORSTATIC
|
|||||||
CURRENTDIR
|
CURRENTDIR
|
||||||
CURSORINFO
|
CURSORINFO
|
||||||
cursorpos
|
cursorpos
|
||||||
|
CURSORSHOWING
|
||||||
|
cursorwrap
|
||||||
customaction
|
customaction
|
||||||
CUSTOMACTIONTEST
|
CUSTOMACTIONTEST
|
||||||
CVal
|
CVal
|
||||||
@@ -267,12 +278,14 @@ dacl
|
|||||||
datareader
|
datareader
|
||||||
datatracker
|
datatracker
|
||||||
Dayof
|
Dayof
|
||||||
|
dbcc
|
||||||
DBID
|
DBID
|
||||||
DBLCLKS
|
DBLCLKS
|
||||||
DBLEPSILON
|
DBLEPSILON
|
||||||
DBPROP
|
DBPROP
|
||||||
DBPROPIDSET
|
DBPROPIDSET
|
||||||
DBPROPSET
|
DBPROPSET
|
||||||
|
DBT
|
||||||
DCBA
|
DCBA
|
||||||
DCOM
|
DCOM
|
||||||
DComposition
|
DComposition
|
||||||
@@ -288,6 +301,8 @@ DEFAULTFLAGS
|
|||||||
DEFAULTICON
|
DEFAULTICON
|
||||||
defaultlib
|
defaultlib
|
||||||
DEFAULTONLY
|
DEFAULTONLY
|
||||||
|
DEFAULTSIZE
|
||||||
|
defaulttonearest
|
||||||
DEFAULTTONULL
|
DEFAULTTONULL
|
||||||
DEFAULTTOPRIMARY
|
DEFAULTTOPRIMARY
|
||||||
DEFERERASE
|
DEFERERASE
|
||||||
@@ -307,11 +322,21 @@ DESKTOPABSOLUTEPARSING
|
|||||||
desktopshorcutinstalled
|
desktopshorcutinstalled
|
||||||
devblogs
|
devblogs
|
||||||
devdocs
|
devdocs
|
||||||
|
devenv
|
||||||
|
DEVICEINTERFACE
|
||||||
|
devicetype
|
||||||
|
DEVINTERFACE
|
||||||
devmgmt
|
devmgmt
|
||||||
DEVMODE
|
DEVMODE
|
||||||
DEVMODEW
|
DEVMODEW
|
||||||
|
DEVNODES
|
||||||
devpal
|
devpal
|
||||||
|
DEVTYP
|
||||||
|
dfx
|
||||||
DIALOGEX
|
DIALOGEX
|
||||||
|
diffs
|
||||||
|
digicert
|
||||||
|
DINORMAL
|
||||||
DISABLEASACTIONKEY
|
DISABLEASACTIONKEY
|
||||||
DISABLENOSCROLL
|
DISABLENOSCROLL
|
||||||
diskmgmt
|
diskmgmt
|
||||||
@@ -425,6 +450,12 @@ eyetracker
|
|||||||
FANCYZONESDRAWLAYOUTTEST
|
FANCYZONESDRAWLAYOUTTEST
|
||||||
FANCYZONESEDITOR
|
FANCYZONESEDITOR
|
||||||
FARPROC
|
FARPROC
|
||||||
|
fdw
|
||||||
|
fdx
|
||||||
|
FErase
|
||||||
|
fesf
|
||||||
|
FFFF
|
||||||
|
Figma
|
||||||
FILEEXPLORER
|
FILEEXPLORER
|
||||||
FILEFLAGS
|
FILEFLAGS
|
||||||
FILEFLAGSMASK
|
FILEFLAGSMASK
|
||||||
@@ -441,6 +472,7 @@ FILESYSPATH
|
|||||||
Filetime
|
Filetime
|
||||||
FILEVERSION
|
FILEVERSION
|
||||||
FILTERMODE
|
FILTERMODE
|
||||||
|
FInc
|
||||||
findfast
|
findfast
|
||||||
FIXEDFILEINFO
|
FIXEDFILEINFO
|
||||||
FIXEDSYS
|
FIXEDSYS
|
||||||
@@ -526,11 +558,13 @@ HCRYPTPROV
|
|||||||
hcursor
|
hcursor
|
||||||
hcwhite
|
hcwhite
|
||||||
hdc
|
hdc
|
||||||
|
HDEVNOTIFY
|
||||||
hdr
|
hdr
|
||||||
hdrop
|
hdrop
|
||||||
hdwwiz
|
hdwwiz
|
||||||
Helpline
|
Helpline
|
||||||
helptext
|
helptext
|
||||||
|
hgdiobj
|
||||||
HGFE
|
HGFE
|
||||||
hglobal
|
hglobal
|
||||||
hhk
|
hhk
|
||||||
@@ -675,6 +709,7 @@ jfif
|
|||||||
jgeosdfsdsgmkedfgdfgdfgbkmhcgcflmi
|
jgeosdfsdsgmkedfgdfgdfgbkmhcgcflmi
|
||||||
jjw
|
jjw
|
||||||
jobject
|
jobject
|
||||||
|
JOBOBJECT
|
||||||
jpe
|
jpe
|
||||||
jpnime
|
jpnime
|
||||||
Jsons
|
Jsons
|
||||||
@@ -709,6 +744,7 @@ Ldone
|
|||||||
Ldr
|
Ldr
|
||||||
LEFTSCROLLBAR
|
LEFTSCROLLBAR
|
||||||
LEFTTEXT
|
LEFTTEXT
|
||||||
|
leftclick
|
||||||
LError
|
LError
|
||||||
LEVELID
|
LEVELID
|
||||||
LExit
|
LExit
|
||||||
@@ -740,6 +776,8 @@ lowlevel
|
|||||||
LOWORD
|
LOWORD
|
||||||
lparam
|
lparam
|
||||||
LPBITMAPINFOHEADER
|
LPBITMAPINFOHEADER
|
||||||
|
LPCFHOOKPROC
|
||||||
|
lpch
|
||||||
LPCITEMIDLIST
|
LPCITEMIDLIST
|
||||||
LPCLSID
|
LPCLSID
|
||||||
lpcmi
|
lpcmi
|
||||||
@@ -757,6 +795,7 @@ LPMONITORINFO
|
|||||||
LPOSVERSIONINFOEXW
|
LPOSVERSIONINFOEXW
|
||||||
LPQUERY
|
LPQUERY
|
||||||
lprc
|
lprc
|
||||||
|
LPrivate
|
||||||
LPSAFEARRAY
|
LPSAFEARRAY
|
||||||
lpstr
|
lpstr
|
||||||
lpsz
|
lpsz
|
||||||
@@ -803,6 +842,8 @@ MAXSHORTCUTSIZE
|
|||||||
maxversiontested
|
maxversiontested
|
||||||
MBM
|
MBM
|
||||||
MBR
|
MBR
|
||||||
|
Mbuttondown
|
||||||
|
mcp
|
||||||
MDICHILD
|
MDICHILD
|
||||||
MDL
|
MDL
|
||||||
mdtext
|
mdtext
|
||||||
@@ -814,7 +855,10 @@ MENUITEMINFO
|
|||||||
MENUITEMINFOW
|
MENUITEMINFOW
|
||||||
MERGECOPY
|
MERGECOPY
|
||||||
MERGEPAINT
|
MERGEPAINT
|
||||||
|
Metacharacter
|
||||||
|
metadatamatters
|
||||||
Metadatas
|
Metadatas
|
||||||
|
Metacharacter
|
||||||
metafile
|
metafile
|
||||||
metapackage
|
metapackage
|
||||||
mfc
|
mfc
|
||||||
@@ -841,6 +885,7 @@ mmsys
|
|||||||
mobileredirect
|
mobileredirect
|
||||||
mockapi
|
mockapi
|
||||||
MODALFRAME
|
MODALFRAME
|
||||||
|
modelcontextprotocol
|
||||||
MODESPRUNED
|
MODESPRUNED
|
||||||
MONITORENUMPROC
|
MONITORENUMPROC
|
||||||
MONITORINFO
|
MONITORINFO
|
||||||
@@ -875,7 +920,9 @@ MSLLHOOKSTRUCT
|
|||||||
Mso
|
Mso
|
||||||
msrc
|
msrc
|
||||||
msstore
|
msstore
|
||||||
|
mstsc
|
||||||
msvcp
|
msvcp
|
||||||
|
MT
|
||||||
MTND
|
MTND
|
||||||
mtrue
|
mtrue
|
||||||
MULTIPLEUSE
|
MULTIPLEUSE
|
||||||
@@ -885,6 +932,8 @@ mvvm
|
|||||||
MVVMTK
|
MVVMTK
|
||||||
MWBEx
|
MWBEx
|
||||||
MYICON
|
MYICON
|
||||||
|
myorg
|
||||||
|
myrepo
|
||||||
NAMECHANGE
|
NAMECHANGE
|
||||||
namespaceanddescendants
|
namespaceanddescendants
|
||||||
nao
|
nao
|
||||||
@@ -1009,6 +1058,7 @@ openas
|
|||||||
opencode
|
opencode
|
||||||
OPENFILENAME
|
OPENFILENAME
|
||||||
opensource
|
opensource
|
||||||
|
openurl
|
||||||
openxmlformats
|
openxmlformats
|
||||||
OPTIMIZEFORINVOKE
|
OPTIMIZEFORINVOKE
|
||||||
ORPHANEDDIALOGTITLE
|
ORPHANEDDIALOGTITLE
|
||||||
@@ -1203,6 +1253,7 @@ RAWPATH
|
|||||||
rbhid
|
rbhid
|
||||||
rclsid
|
rclsid
|
||||||
RCZOOMIT
|
RCZOOMIT
|
||||||
|
rdp
|
||||||
RDW
|
RDW
|
||||||
READMODE
|
READMODE
|
||||||
READOBJECTS
|
READOBJECTS
|
||||||
@@ -1230,6 +1281,7 @@ remappings
|
|||||||
REMAPSUCCESSFUL
|
REMAPSUCCESSFUL
|
||||||
REMAPUNSUCCESSFUL
|
REMAPUNSUCCESSFUL
|
||||||
Remotable
|
Remotable
|
||||||
|
remotedesktop
|
||||||
remoteip
|
remoteip
|
||||||
Removelnk
|
Removelnk
|
||||||
renamable
|
renamable
|
||||||
@@ -1260,6 +1312,7 @@ RIGHTSCROLLBAR
|
|||||||
riid
|
riid
|
||||||
RKey
|
RKey
|
||||||
RNumber
|
RNumber
|
||||||
|
rollups
|
||||||
rop
|
rop
|
||||||
ROUNDSMALL
|
ROUNDSMALL
|
||||||
rpcrt
|
rpcrt
|
||||||
@@ -1471,6 +1524,9 @@ SVGIO
|
|||||||
svgz
|
svgz
|
||||||
SVSI
|
SVSI
|
||||||
SWFO
|
SWFO
|
||||||
|
swp
|
||||||
|
SWPNOSIZE
|
||||||
|
SWPNOZORDER
|
||||||
SWRESTORE
|
SWRESTORE
|
||||||
symbolrequestprod
|
symbolrequestprod
|
||||||
SYMCACHE
|
SYMCACHE
|
||||||
@@ -1487,6 +1543,8 @@ SYSKEY
|
|||||||
syskeydown
|
syskeydown
|
||||||
SYSKEYUP
|
SYSKEYUP
|
||||||
SYSLIB
|
SYSLIB
|
||||||
|
sysmenu
|
||||||
|
systemai
|
||||||
SYSTEMAPPS
|
SYSTEMAPPS
|
||||||
SYSTEMMODAL
|
SYSTEMMODAL
|
||||||
SYSTEMTIME
|
SYSTEMTIME
|
||||||
@@ -1573,6 +1631,9 @@ UHash
|
|||||||
UIA
|
UIA
|
||||||
UIEx
|
UIEx
|
||||||
ULONGLONG
|
ULONGLONG
|
||||||
|
Ultrawide
|
||||||
|
UMax
|
||||||
|
UMin
|
||||||
ums
|
ums
|
||||||
uncompilable
|
uncompilable
|
||||||
UNCPRIORITY
|
UNCPRIORITY
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<PackageVersion Include="CommunityToolkit.WinUI.Controls.Sizers" Version="8.2.250402" />
|
<PackageVersion Include="CommunityToolkit.WinUI.Controls.Sizers" Version="8.2.250402" />
|
||||||
<PackageVersion Include="CommunityToolkit.WinUI.Converters" Version="8.2.250402" />
|
<PackageVersion Include="CommunityToolkit.WinUI.Converters" Version="8.2.250402" />
|
||||||
<PackageVersion Include="CommunityToolkit.WinUI.Extensions" Version="8.2.250402" />
|
<PackageVersion Include="CommunityToolkit.WinUI.Extensions" Version="8.2.250402" />
|
||||||
<PackageVersion Include="CommunityToolkit.WinUI.UI.Controls.DataGrid" Version="7.1.2" />
|
<PackageVersion Include="CommunityToolkit.WinUI.UI.Controls.DataGrid" Version="7.1.2" />
|
||||||
<PackageVersion Include="CommunityToolkit.Labs.WinUI.Controls.MarkdownTextBlock" Version="0.1.260116-build.2514" />
|
<PackageVersion Include="CommunityToolkit.Labs.WinUI.Controls.MarkdownTextBlock" Version="0.1.260116-build.2514" />
|
||||||
<PackageVersion Include="ControlzEx" Version="6.0.0" />
|
<PackageVersion Include="ControlzEx" Version="6.0.0" />
|
||||||
<PackageVersion Include="HelixToolkit" Version="2.24.0" />
|
<PackageVersion Include="HelixToolkit" Version="2.24.0" />
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ void MonitorTopology::Initialize(const std::vector<MonitorInfo>& monitors)
|
|||||||
Logger::info(L"======= TOPOLOGY INITIALIZATION START =======");
|
Logger::info(L"======= TOPOLOGY INITIALIZATION START =======");
|
||||||
Logger::info(L"Initializing edge-based topology for {} monitors", monitors.size());
|
Logger::info(L"Initializing edge-based topology for {} monitors", monitors.size());
|
||||||
|
|
||||||
|
|
||||||
m_monitors = monitors;
|
m_monitors = monitors;
|
||||||
m_outerEdges.clear();
|
m_outerEdges.clear();
|
||||||
m_edgeMap.clear();
|
m_edgeMap.clear();
|
||||||
@@ -692,7 +691,6 @@ int MonitorTopology::GetAbsolutePosition(const MonitorEdge& edge, double relativ
|
|||||||
return static_cast<int>(result);
|
return static_cast<int>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<MonitorTopology::GapInfo> MonitorTopology::DetectMonitorGaps() const
|
std::vector<MonitorTopology::GapInfo> MonitorTopology::DetectMonitorGaps() const
|
||||||
{
|
{
|
||||||
std::vector<GapInfo> gaps;
|
std::vector<GapInfo> gaps;
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ public sealed partial class AppListItem : ListItem, IPrecomputedListItem
|
|||||||
{
|
{
|
||||||
private readonly AppCommand _appCommand;
|
private readonly AppCommand _appCommand;
|
||||||
private readonly AppItem _app;
|
private readonly AppItem _app;
|
||||||
|
|
||||||
private readonly Lazy<Task<IconInfo?>> _iconLoadTask;
|
private readonly Lazy<Task<IconInfo?>> _iconLoadTask;
|
||||||
private readonly Lazy<Task<Details>> _detailsLoadTask;
|
private readonly Lazy<Task<Details>> _detailsLoadTask;
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Threading;
|
||||||
using Microsoft.CommandPalette.Extensions;
|
using Microsoft.CommandPalette.Extensions;
|
||||||
using Microsoft.CommandPalette.Extensions.Toolkit;
|
using Microsoft.CommandPalette.Extensions.Toolkit;
|
||||||
using Windows.Foundation;
|
using Windows.Foundation;
|
||||||
@@ -70,6 +71,7 @@ internal abstract partial class OnLoadContentPage : OnLoadBasePage, IContentPage
|
|||||||
|
|
||||||
internal abstract partial class OnLoadBasePage : Page
|
internal abstract partial class OnLoadBasePage : Page
|
||||||
{
|
{
|
||||||
|
private readonly Lock _loadLock = new();
|
||||||
private int _loadCount;
|
private int _loadCount;
|
||||||
|
|
||||||
#pragma warning disable CS0067 // The event is never used
|
#pragma warning disable CS0067 // The event is never used
|
||||||
@@ -82,22 +84,28 @@ internal abstract partial class OnLoadBasePage : Page
|
|||||||
add
|
add
|
||||||
{
|
{
|
||||||
InternalItemsChanged += value;
|
InternalItemsChanged += value;
|
||||||
if (_loadCount == 0)
|
lock (_loadLock)
|
||||||
{
|
{
|
||||||
Loaded();
|
if (_loadCount == 0)
|
||||||
}
|
{
|
||||||
|
Loaded();
|
||||||
|
}
|
||||||
|
|
||||||
_loadCount++;
|
_loadCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
remove
|
remove
|
||||||
{
|
{
|
||||||
InternalItemsChanged -= value;
|
InternalItemsChanged -= value;
|
||||||
_loadCount--;
|
lock (_loadLock)
|
||||||
_loadCount = Math.Max(0, _loadCount);
|
|
||||||
if (_loadCount == 0)
|
|
||||||
{
|
{
|
||||||
Unloaded();
|
_loadCount--;
|
||||||
|
_loadCount = Math.Max(0, _loadCount);
|
||||||
|
if (_loadCount == 0)
|
||||||
|
{
|
||||||
|
Unloaded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using System.Globalization;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json.Nodes;
|
using System.Text.Json.Nodes;
|
||||||
|
using System.Threading;
|
||||||
using CoreWidgetProvider.Helpers;
|
using CoreWidgetProvider.Helpers;
|
||||||
using CoreWidgetProvider.Widgets.Enums;
|
using CoreWidgetProvider.Widgets.Enums;
|
||||||
using Microsoft.CmdPal.Common;
|
using Microsoft.CmdPal.Common;
|
||||||
@@ -262,17 +263,17 @@ internal abstract partial class WidgetPage : OnLoadContentPage
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
internal virtual void PushActivate()
|
internal virtual void PushActivate()
|
||||||
{
|
{
|
||||||
_loadCount++;
|
Interlocked.Increment(ref _loadCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal virtual void PopActivate()
|
internal virtual void PopActivate()
|
||||||
{
|
{
|
||||||
_loadCount--;
|
Interlocked.Decrement(ref _loadCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int _loadCount;
|
private int _loadCount;
|
||||||
|
|
||||||
protected bool IsActive => _loadCount > 0;
|
protected bool IsActive => Volatile.Read(ref _loadCount) > 0;
|
||||||
|
|
||||||
protected override void Loaded()
|
protected override void Loaded()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user