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:
wj32
2011-11-25 22:38:09 +00:00
parent 031b722e29
commit de73355fda
3 changed files with 50 additions and 10 deletions
+5 -1
View File
@@ -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(
+39 -3
View File
@@ -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(
+6 -6
View File
@@ -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(