AutoThreadLocalCollector.h [plain text]
#pragma once
#ifndef __AUTO_THREAD_LOCAL_COLLECTOR__
#define __AUTO_THREAD_LOCAL_COLLECTOR__
#include "AutoDefs.h"
#include "AutoRange.h"
#include "AutoThreadLocalScanner.h"
#include "AutoSubZone.h"
#include "AutoZone.h"
namespace Auto {
class ThreadLocalCollector : public ThreadLocalScanner {
private:
Thread &_thread;
void scan_local_block(void *startingBlock);
void scan_marked_blocks();
void scavenge_local(size_t count, vm_address_t garbage[]);
void evict_local_garbage(size_t count, vm_address_t garbage[]);
void process_local_garbage(bool finalizeNow);
public:
ThreadLocalCollector(Zone *zone, void *current_stack_bottom, Thread &thread) : ThreadLocalScanner(zone, current_stack_bottom, thread.locals()), _thread(thread) {}
static bool should_collect(Zone *zone, Thread &thread, bool canFinalizeNow);
void collect(bool finalizeNow);
void eject_local_block(void *startingBlock);
};
};
#endif