mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-09-07 02:24:55 -06:00
reorganizing repo
git-svn-id: svn://ultimatepp.org/upp/trunk@9206 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
7d17505cfe
commit
e3e8d627f5
3840 changed files with 0 additions and 1161578 deletions
|
|
@ -1,124 +0,0 @@
|
|||
#include "Malloc.h"
|
||||
|
||||
#define LLOG(x) // LOG(x)
|
||||
|
||||
Heap heaps[4];
|
||||
|
||||
void *bptr[16384];
|
||||
size_t bsz[16384];
|
||||
size_t total_size;
|
||||
|
||||
void HeapSet(byte *ptr, int sz)
|
||||
{
|
||||
if(!ptr) return;
|
||||
// Allocator specific!
|
||||
size_t l = (uintptr_t)ptr & ~4095;
|
||||
size_t qp = (uintptr_t)ptr;
|
||||
int q = 0; // (uintptr_t)ptr % 257;
|
||||
while(sz--)
|
||||
*ptr++ = (byte)q++;
|
||||
}
|
||||
|
||||
void HeapCheck(byte *ptr, int sz)
|
||||
{
|
||||
DUMP((void *)ptr);
|
||||
if(!ptr) return;
|
||||
int q = 0; // (uintptr_t)ptr % 257;
|
||||
while(sz--)
|
||||
ASSERT(*ptr++ == (byte)q++);
|
||||
}
|
||||
|
||||
int Hrnd() {
|
||||
// return 0;
|
||||
return rand() & 3;
|
||||
}
|
||||
|
||||
int Szrnd()
|
||||
{
|
||||
// return 600 + (rand() & 8191);
|
||||
// return 600 + rand();
|
||||
// return rand() & 511;
|
||||
return total_size > 1000 * 1000 * 500 ? rand() & 255
|
||||
: rand() & 3 ? rand() & 511
|
||||
: rand() & 3 ? rand() & 8191
|
||||
: rand() + rand() + rand();
|
||||
}
|
||||
|
||||
void CheckHeaps()
|
||||
{
|
||||
RTIMING("CheckHeaps");
|
||||
for(int i = 0; i < 16384; i++)
|
||||
HeapCheck((byte *)bptr[i], bsz[i]);
|
||||
for(int i = 0; i < 4; i++)
|
||||
heaps[i].Check();
|
||||
}
|
||||
|
||||
extern int s4kb__;
|
||||
extern int s64kb__;
|
||||
extern int sBig__;
|
||||
|
||||
void Test1()
|
||||
{
|
||||
RTIMING("Test1");
|
||||
bool prudent = false;
|
||||
SetVppLogSizeLimit(200 * 1000 * 1000);
|
||||
int doalloc = 20000;
|
||||
for(int i = 0; i < 4; i++)
|
||||
heaps[i].Init();
|
||||
// for(;;)
|
||||
|
||||
for(int n = 0; n < 1000*1000*1000; n++) {
|
||||
LLOG("Step " << n);
|
||||
if(n % 10000 == 0) {
|
||||
Cout() << n << (doalloc > 16384 ? " allocating" : " freeing")
|
||||
<< "(" << s4kb__ << ':' << s64kb__ << ':' << sBig__ << ") ["
|
||||
<< total_size << "]\n";
|
||||
CheckHeaps();
|
||||
}
|
||||
// if(n == 114677)
|
||||
// LOG("BP");
|
||||
int i = n & 16383;
|
||||
LLOG("FREE " << (void *)bptr[i]);
|
||||
heaps[Hrnd()].Free(bptr[i]);
|
||||
bptr[i] = NULL;
|
||||
if(prudent)
|
||||
CheckHeaps();
|
||||
total_size -= bsz[i];
|
||||
if(doalloc > 16384) {
|
||||
bsz[i] = Szrnd();
|
||||
bptr[i] = heaps[Hrnd()].Alloc(bsz[i]);
|
||||
LLOG("ALLOCATED " << (void *)bptr[i] << " of size " << bsz[i]);
|
||||
HeapSet((byte *)bptr[i], bsz[i]);
|
||||
}
|
||||
else
|
||||
doalloc++;
|
||||
if(prudent)
|
||||
CheckHeaps();
|
||||
total_size += bsz[i];
|
||||
if(rand() == 0)
|
||||
doalloc = 0;
|
||||
// if(rand() == 1)
|
||||
// doalloc = 20000;
|
||||
if(rand() == 0 && (rand() & 7) == 0) {
|
||||
Heap& h = heaps[Hrnd()];
|
||||
h.Shutdown();
|
||||
memset(&h, 0, sizeof(Heap));
|
||||
h.Free(h.Alloc(0));
|
||||
}
|
||||
if(prudent)
|
||||
CheckHeaps();
|
||||
}
|
||||
LLOG("=== Final Free ==============================================================");
|
||||
for(int i = 0; i < 16384; i++) {
|
||||
if(bptr[i] == (void *)0x05bdd858)
|
||||
LOG("BP");
|
||||
heaps[0].Free(bptr[i]);
|
||||
}
|
||||
LLOG("=== Shutdown ==============================================================");
|
||||
for(int i = 0; i < 4; i++)
|
||||
heaps[i].Shutdown();
|
||||
|
||||
Heap::AuxFinalCheck();
|
||||
|
||||
Cout() << "Passed OK!\n";
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue