mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-09 02:50:20 +02:00
Merged Whippet into libguile/whippet
This commit is contained in:
commit
db181e67ff
112 changed files with 18115 additions and 0 deletions
74
libguile/whippet/src/heap-sizer.h
Normal file
74
libguile/whippet/src/heap-sizer.h
Normal file
|
@ -0,0 +1,74 @@
|
|||
#ifndef HEAP_SIZER_H
|
||||
#define HEAP_SIZER_H
|
||||
|
||||
#include "gc-api.h"
|
||||
|
||||
#include "gc-options-internal.h"
|
||||
#include "growable-heap-sizer.h"
|
||||
#include "adaptive-heap-sizer.h"
|
||||
|
||||
struct gc_heap_sizer {
|
||||
enum gc_heap_size_policy policy;
|
||||
union {
|
||||
struct gc_growable_heap_sizer* growable;
|
||||
struct gc_adaptive_heap_sizer* adaptive;
|
||||
};
|
||||
};
|
||||
|
||||
static struct gc_heap_sizer
|
||||
gc_make_heap_sizer(struct gc_heap *heap,
|
||||
const struct gc_common_options *options,
|
||||
uint64_t (*get_allocation_counter_from_thread)(struct gc_heap*),
|
||||
void (*set_heap_size_from_thread)(struct gc_heap*, size_t),
|
||||
struct gc_background_thread *thread) {
|
||||
struct gc_heap_sizer ret = { options->heap_size_policy, };
|
||||
switch (options->heap_size_policy) {
|
||||
case GC_HEAP_SIZE_FIXED:
|
||||
break;
|
||||
|
||||
case GC_HEAP_SIZE_GROWABLE:
|
||||
ret.growable =
|
||||
gc_make_growable_heap_sizer(heap, options->heap_size_multiplier);
|
||||
break;
|
||||
|
||||
case GC_HEAP_SIZE_ADAPTIVE:
|
||||
ret.adaptive =
|
||||
gc_make_adaptive_heap_sizer (heap, options->heap_expansiveness,
|
||||
get_allocation_counter_from_thread,
|
||||
set_heap_size_from_thread,
|
||||
thread);
|
||||
break;
|
||||
|
||||
default:
|
||||
GC_CRASH();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
gc_heap_sizer_on_gc(struct gc_heap_sizer sizer, size_t heap_size,
|
||||
size_t live_bytes, size_t pause_ns,
|
||||
void (*set_heap_size)(struct gc_heap*, size_t)) {
|
||||
switch (sizer.policy) {
|
||||
case GC_HEAP_SIZE_FIXED:
|
||||
break;
|
||||
|
||||
case GC_HEAP_SIZE_GROWABLE:
|
||||
gc_growable_heap_sizer_on_gc(sizer.growable, heap_size, live_bytes,
|
||||
pause_ns, set_heap_size);
|
||||
break;
|
||||
|
||||
case GC_HEAP_SIZE_ADAPTIVE:
|
||||
if (sizer.adaptive->background_task_id < 0)
|
||||
gc_adaptive_heap_sizer_background_task(sizer.adaptive);
|
||||
gc_adaptive_heap_sizer_on_gc(sizer.adaptive, live_bytes, pause_ns,
|
||||
set_heap_size);
|
||||
break;
|
||||
|
||||
default:
|
||||
GC_CRASH();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif // HEAP_SIZER_H
|
Loading…
Add table
Add a link
Reference in a new issue