@ -11,6 +11,8 @@
#include < algorithm >
#include < algorithm >
#include < vector >
#include < vector >
#include < boost / container / deque . hpp >
#include "common/address_space.h"
#include "common/address_space.h"
#include "common/address_space.inc"
#include "common/address_space.inc"
#include "common/alignment.h"
#include "common/alignment.h"
@ -33,21 +35,23 @@ public:
void GatherValues ( u32 start_entry , Common : : ScratchBuffer < u32 > & buffer ) {
void GatherValues ( u32 start_entry , Common : : ScratchBuffer < u32 > & buffer ) {
buffer . resize ( 8 ) ;
buffer . resize ( 8 ) ;
buffer . resize ( 0 ) ;
size_t index = 0 ;
const auto add_value = [ & ] ( u32 value ) {
buffer . resize ( index + 1 ) ;
const auto add_value = [ & buffer ] ( u32 value , size_t index ) {
if ( buffer . size ( ) < index + 1 )
buffer . resize ( index + 8 ) ;
buffer [ index + + ] = value ;
buffer [ index + + ] = value ;
return index ;
} ;
} ;
size_t index = 0 ;
u32 iter_entry = start_entry ;
u32 iter_entry = start_entry ;
Entry * current = & storage [ iter_entry - 1 ] ;
Entry * current = & storage [ iter_entry - 1 ] ;
add_value ( current - > value ) ;
index = add_value ( current - > value , index ) ;
while ( current - > next_entry ! = 0 ) {
while ( current - > next_entry ! = 0 ) {
iter_entry = current - > next_entry ;
iter_entry = current - > next_entry ;
current = & storage [ iter_entry - 1 ] ;
current = & storage [ iter_entry - 1 ] ;
add_value ( current - > value ) ;
index = add_value ( current - > value , index ) ;
}
}
buffer . resize ( index ) ;
}
}
u32 Register ( u32 value ) {
u32 Register ( u32 value ) {
@ -124,8 +128,8 @@ private:
u32 value { } ;
u32 value { } ;
} ;
} ;
std : : deque < Entry > storage ;
std : : deque < u32 > free_entries ;
std : : vector < Entry > storage ;
boost : : container : : deque < u32 > free_entries ;
} ;
} ;
struct EmptyAllocator {
struct EmptyAllocator {
@ -619,7 +623,7 @@ template <typename Traits>
void DeviceMemoryManager < Traits > : : UpdatePagesCachedCount ( DAddr addr , size_t size , s32 delta ) {
void DeviceMemoryManager < Traits > : : UpdatePagesCachedCount ( DAddr addr , size_t size , s32 delta ) {
Common : : ScopedRangeLock lk ( counter_guard , addr , size ) ;
Common : : ScopedRangeLock lk ( counter_guard , addr , size ) ;
UpdatePagesCachedCountNoLock ( addr , size , delta ) ;
UpdatePagesCachedCountNoLock ( addr , size , delta ) ;
}
}
template < typename Traits >
template < typename Traits >
void DeviceMemoryManager < Traits > : : UpdatePagesCachedBatch ( std : : span < const std : : pair < DAddr , size_t > > ranges , s32 delta ) {
void DeviceMemoryManager < Traits > : : UpdatePagesCachedBatch ( std : : span < const std : : pair < DAddr , size_t > > ranges , s32 delta ) {