[0.4.14][RTL] Optimize RtlpFindAndCommitPages CORE-14588

A squashed backmerge of 3 commits authored by Thomas Faber.
They do help to speed up RosBE2.1.6 within ReactOS.
'configure' runs faster by ~ factor 5.
'ninja bootcd -j1' runs faster by ~ factor 2.
I considered back-porting that a necessity because we
considerably lost speed over the last years in those scenarios.
I tested, and it works well also in the 0.4.14RC.

0.4.15-dev-309-g
10d23614d3
Use LastEntryInSegment to speed up RtlpFindAndCommitPages. CORE-14588
--------------------------
0.4.15-dev-307-g
1b7a4b3ebf
Add and populate LastEntryInSegment. CORE-14588
--------------------------
0.4.15-dev-306-g
78dddd125c
Create a define for the common members of HEAP and HEAP_SEGMENT. CORE-14588

The code relies on these members matching up, so it's confusing for them
to be duplicated.
This commit is contained in:
Thomas Faber 2020-02-01 21:34:03 +01:00 committed by Joachim Henze
parent 0e72f93687
commit 4111dfa8bf
2 changed files with 100 additions and 38 deletions

View file

@ -203,22 +203,26 @@ typedef struct _HEAP_LIST_LOOKUP
PLIST_ENTRY *ListHints;
} HEAP_LIST_LOOKUP, *PHEAP_LIST_LOOKUP;
#define HEAP_SEGMENT_MEMBERS \
HEAP_ENTRY Entry; \
ULONG SegmentSignature; \
ULONG SegmentFlags; \
LIST_ENTRY SegmentListEntry; \
struct _HEAP *Heap; \
PVOID BaseAddress; \
ULONG NumberOfPages; \
PHEAP_ENTRY FirstEntry; \
PHEAP_ENTRY LastValidEntry; \
ULONG NumberOfUnCommittedPages; \
ULONG NumberOfUnCommittedRanges; \
USHORT SegmentAllocatorBackTraceIndex; \
USHORT Reserved; \
LIST_ENTRY UCRSegmentList; \
PVOID LastEntryInSegment //FIXME: non-Vista
typedef struct _HEAP
{
HEAP_ENTRY Entry;
ULONG SegmentSignature;
ULONG SegmentFlags;
LIST_ENTRY SegmentListEntry;
struct _HEAP *Heap;
PVOID BaseAddress;
ULONG NumberOfPages;
PHEAP_ENTRY FirstEntry;
PHEAP_ENTRY LastValidEntry;
ULONG NumberOfUnCommittedPages;
ULONG NumberOfUnCommittedRanges;
USHORT SegmentAllocatorBackTraceIndex;
USHORT Reserved;
LIST_ENTRY UCRSegmentList;
HEAP_SEGMENT_MEMBERS;
ULONG Flags;
ULONG ForceFlags;
@ -271,20 +275,7 @@ typedef struct _HEAP
typedef struct _HEAP_SEGMENT
{
HEAP_ENTRY Entry;
ULONG SegmentSignature;
ULONG SegmentFlags;
LIST_ENTRY SegmentListEntry;
PHEAP Heap;
PVOID BaseAddress;
ULONG NumberOfPages;
PHEAP_ENTRY FirstEntry;
PHEAP_ENTRY LastValidEntry;
ULONG NumberOfUnCommittedPages;
ULONG NumberOfUnCommittedRanges;
USHORT SegmentAllocatorBackTraceIndex;
USHORT Reserved;
LIST_ENTRY UCRSegmentList;
HEAP_SEGMENT_MEMBERS;
} HEAP_SEGMENT, *PHEAP_SEGMENT;
typedef struct _HEAP_UCR_DESCRIPTOR