mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
ExtendedTools: fixed node bitmap updates
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4922 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
@@ -412,8 +412,12 @@ PPH_STRING EtGetGpuAdapterDescription(
|
||||
__in ULONG Index
|
||||
);
|
||||
|
||||
VOID EtAllocateGpuNodeBitMap(
|
||||
__out PRTL_BITMAP BitMap
|
||||
);
|
||||
|
||||
VOID EtUpdateGpuNodeBitMap(
|
||||
VOID
|
||||
__in PRTL_BITMAP NewBitMap
|
||||
);
|
||||
|
||||
VOID EtQueryProcessGpuStatistics(
|
||||
|
||||
@@ -48,6 +48,7 @@ ULONG EtGpuNextNodeIndex = 0;
|
||||
RTL_BITMAP EtGpuNodeBitMap;
|
||||
PULONG EtGpuNodeBitMapBuffer;
|
||||
ULONG EtGpuNodeBitMapBitsSet;
|
||||
PULONG EtGpuNewNodeBitMapBuffer;
|
||||
|
||||
PH_UINT64_DELTA EtClockTotalRunningTimeDelta;
|
||||
LARGE_INTEGER EtClockTotalRunningTimeFrequency;
|
||||
@@ -561,6 +562,23 @@ static VOID NTAPI ProcessesUpdatedCallback(
|
||||
if (EtGpuNodeUsage > 1)
|
||||
EtGpuNodeUsage = 1;
|
||||
|
||||
// Do the update of the node bitmap if needed.
|
||||
if (EtGpuNewNodeBitMapBuffer)
|
||||
{
|
||||
PULONG newBuffer;
|
||||
|
||||
newBuffer = _InterlockedExchangePointer(&EtGpuNewNodeBitMapBuffer, NULL);
|
||||
|
||||
if (newBuffer)
|
||||
{
|
||||
PhFree(EtGpuNodeBitMap.Buffer);
|
||||
EtGpuNodeBitMap.Buffer = newBuffer;
|
||||
EtGpuNodeBitMapBuffer = newBuffer;
|
||||
EtGpuNodeBitMapBitsSet = RtlNumberOfSetBits(&EtGpuNodeBitMap);
|
||||
EtSaveGpuMonitorSettings();
|
||||
}
|
||||
}
|
||||
|
||||
// Update per-process statistics.
|
||||
// Note: no lock is needed because we only ever modify the list on this same thread.
|
||||
|
||||
@@ -668,11 +686,29 @@ PPH_STRING EtGetGpuAdapterDescription(
|
||||
}
|
||||
}
|
||||
|
||||
VOID EtUpdateGpuNodeBitMap(
|
||||
VOID
|
||||
VOID EtAllocateGpuNodeBitMap(
|
||||
__out PRTL_BITMAP BitMap
|
||||
)
|
||||
{
|
||||
EtGpuNodeBitMapBitsSet = RtlNumberOfSetBits(&EtGpuNodeBitMap);
|
||||
SIZE_T numberOfBytes;
|
||||
|
||||
numberOfBytes = BYTES_NEEDED_FOR_BITS(EtGpuTotalNodeCount);
|
||||
|
||||
BitMap->Buffer = PhAllocate(numberOfBytes);
|
||||
BitMap->SizeOfBitMap = EtGpuTotalNodeCount;
|
||||
memset(BitMap->Buffer, 0, numberOfBytes);
|
||||
}
|
||||
|
||||
VOID EtUpdateGpuNodeBitMap(
|
||||
__in PRTL_BITMAP NewBitMap
|
||||
)
|
||||
{
|
||||
PULONG buffer;
|
||||
|
||||
buffer = _InterlockedExchangePointer(&EtGpuNewNodeBitMapBuffer, NewBitMap->Buffer);
|
||||
|
||||
if (buffer)
|
||||
PhFree(buffer);
|
||||
}
|
||||
|
||||
VOID EtQueryProcessGpuStatistics(
|
||||
|
||||
@@ -86,21 +86,21 @@ VOID EtpSaveNodeBitMap(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
RTL_BITMAP newBitMap;
|
||||
ULONG i;
|
||||
|
||||
RtlClearAllBits(&EtGpuNodeBitMap);
|
||||
EtAllocateGpuNodeBitMap(&newBitMap);
|
||||
|
||||
for (i = 0; i < EtGpuTotalNodeCount; i++)
|
||||
{
|
||||
if (Button_GetCheck(CheckBoxHandle[i]) == BST_CHECKED)
|
||||
RtlSetBits(&EtGpuNodeBitMap, i, 1);
|
||||
RtlSetBits(&newBitMap, i, 1);
|
||||
}
|
||||
|
||||
if (RtlNumberOfSetBits(&EtGpuNodeBitMap) == 0)
|
||||
RtlSetBits(&EtGpuNodeBitMap, 0, 1);
|
||||
if (RtlNumberOfSetBits(&newBitMap) == 0)
|
||||
RtlSetBits(&newBitMap, 0, 1);
|
||||
|
||||
EtUpdateGpuNodeBitMap();
|
||||
EtSaveGpuMonitorSettings();
|
||||
EtUpdateGpuNodeBitMap(&newBitMap);
|
||||
}
|
||||
|
||||
INT_PTR CALLBACK EtpGpuNodesDlgProc(
|
||||
|
||||
Reference in New Issue
Block a user