[PATCH v2] taskmgr: Implement process page sorting.
Nikolay Sivov
nsivov at codeweavers.com
Tue Apr 6 05:02:17 CDT 2021
On 4/6/21 12:45 PM, Haoyang Chen wrote:
> +static BOOL bSortAscending = TRUE;
> +static UINT ColumnDataHintIndex = 0;
> +static INT ProcessPageCompareFunc(const VOID* first, const VOID* second)
You could probably use qsort_s() to pack that, also please fix prototype.
> + switch (ColumnDataHintIndex)
> + {
> + case COLUMN_IMAGENAME:
> + return lstrcmpW(pPerfData1->ImageName, pPerfData2->ImageName);
> + case COLUMN_PID:
> + return pPerfData1->ProcessId > pPerfData2->ProcessId;
> + case COLUMN_USERNAME:
> + return lstrcmpW(pPerfData1->UserName, pPerfData2->UserName);
> + case COLUMN_SESSIONID:
> + return pPerfData1->SessionId > pPerfData2->SessionId;
> + case COLUMN_CPUUSAGE:
> + return pPerfData1->CPUUsage > pPerfData2->CPUUsage;
> + case COLUMN_CPUTIME:
> + return pPerfData1->CPUTime.QuadPart > pPerfData2->CPUTime.QuadPart;
> + case COLUMN_MEMORYUSAGE:
> + return pPerfData1->vmCounters.WorkingSetSize > pPerfData2->vmCounters.WorkingSetSize;
> + case COLUMN_PEAKMEMORYUSAGE:
> + return pPerfData1->vmCounters.PeakWorkingSetSize > pPerfData2->vmCounters.PeakWorkingSetSize;
> + case COLUMN_MEMORYUSAGEDELTA:
> + return pPerfData1->WorkingSetSizeDelta > pPerfData2->WorkingSetSizeDelta;
> + case COLUMN_PAGEFAULTS:
> + return pPerfData1->vmCounters.PageFaultCount > pPerfData2->vmCounters.PageFaultCount;
> + case COLUMN_PAGEFAULTSDELTA:
> + return pPerfData1->PageFaultCountDelta > pPerfData2->PageFaultCountDelta;
> + case COLUMN_VIRTUALMEMORYSIZE:
> + return pPerfData1->vmCounters.VirtualSize > pPerfData2->vmCounters.VirtualSize;
> + case COLUMN_PAGEDPOOL:
> + return pPerfData1->vmCounters.QuotaPagedPoolUsage > pPerfData2->vmCounters.QuotaPagedPoolUsage;
> + case COLUMN_NONPAGEDPOOL:
> + return pPerfData1->vmCounters.QuotaNonPagedPoolUsage > pPerfData2->vmCounters.QuotaNonPagedPoolUsage;
> + case COLUMN_BASEPRIORITY:
> + return pPerfData1->BasePriority > pPerfData2->BasePriority;
> + case COLUMN_HANDLECOUNT:
> + return pPerfData1->HandleCount > pPerfData2->HandleCount;
> + case COLUMN_THREADCOUNT:
> + return pPerfData1->ThreadCount > pPerfData2->ThreadCount;
> + case COLUMN_USEROBJECTS:
> + return pPerfData1->USERObjectCount > pPerfData2->USERObjectCount;
> + case COLUMN_GDIOBJECTS:
> + return pPerfData1->GDIObjectCount > pPerfData2->GDIObjectCount;
> + case COLUMN_IOREADS:
> + return pPerfData1->IOCounters.ReadOperationCount > pPerfData2->IOCounters.ReadOperationCount;
> + case COLUMN_IOWRITES:
> + return pPerfData1->IOCounters.WriteOperationCount > pPerfData2->IOCounters.WriteOperationCount;
> + case COLUMN_IOREADBYTES:
> + return pPerfData1->IOCounters.ReadTransferCount > pPerfData2->IOCounters.ReadTransferCount;
> + case COLUMN_IOWRITEBYTES:
> + return pPerfData1->IOCounters.WriteTransferCount > pPerfData2->IOCounters.WriteTransferCount;
> + case COLUMN_IOOTHERBYTES:
> + return pPerfData1->IOCounters.OtherTransferCount > pPerfData2->IOCounters.OtherTransferCount;
> + }
Have you tested this? I looks like it will only work correctly for
string fields.
> static void ProcessPageOnNotify(LPARAM lParam)
> {
> - LPNMHDR pnmh;
> + LPNMHEADERW pnmh;
This is incorrect.
> - else if (pnmh->hwndFrom == hProcessPageHeaderCtrl)
> + else if (pnmh->hdr.hwndFrom == hProcessPageHeaderCtrl)
> {
> - switch (pnmh->code)
> + switch (pnmh->hdr.code)
> {
> case HDN_ITEMCLICKW:
>
> - /*
> - * FIXME: Fix the column sorting
> - *
> - *ListView_SortItems(hApplicationPageListCtrl, ApplicationPageCompareFunc, NULL);
> - *bSortAscending = !bSortAscending;
> - */
> + PerDataSort(ColumnDataHints[pnmh->iItem]);
> + InvalidateRect(hProcessPageListCtrl, NULL, TRUE);
>
> break;
Again, why do you sort only on user clicks? How should it work?
More information about the wine-devel
mailing list