• Witold Baryluk's avatar
    ntdll: Speed up NtQueryVirtualMemory(MemoryWorkingSetExInformation) by conditional page check. · ee706c3e
    Witold Baryluk authored
    Legends game periodically (every 30 seconds) calls this function
    with up to 22k virtual addresses. All but 1 of them is valid. Due to
    amount of queries addresses, and cost of seek+read, this causes this
    function to take up to about 50ms. So framerate drops from ~150 FPS to
    20FPS for about a second.
    
    As far as I can see, returning 0 entries from this function, still makes
    Apex Legend work.
    
    But keep code correct, and optimise it by only performing pagemap read
    when the address is valid.
    
    This change get_working_set_ex reduces peek wall clock runtime from 57ms
    to 0.29ms.
    
    Tested on Linux, but similar change done for the BSD part.
    Signed-off-by: 's avatarWitold Baryluk <witold.baryluk@gmail.com>
    ee706c3e
virtual.c 173 KB