#include "il2cpp-config.h" #include "il2cpp-class-internals.h" #include "icalls/mscorlib/System/GC.h" #include "gc/GarbageCollector.h" #include "vm/Exception.h" #include "vm/Object.h" #include "vm/Array.h" namespace il2cpp { namespace icalls { namespace mscorlib { namespace System { void GC::SuppressFinalize(Il2CppObject *obj) { if (obj == NULL) il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArgumentNullException("obj")); il2cpp::gc::GarbageCollector::SuppressFinalizer(obj); } int32_t GC::GetGeneration(Il2CppObject* obj) { return il2cpp::gc::GarbageCollector::GetGeneration(obj); } void GC::KeepAlive(Il2CppObject* obj) { // do nothing. icall just prevents compilers from optimizing away references to object being passed in } void GC::InternalCollect(int generation) { il2cpp::gc::GarbageCollector::Collect(generation); } int32_t GC::get_MaxGeneration() { return il2cpp::gc::GarbageCollector::GetMaxGeneration(); } void GC::RecordPressure(int64_t bytesAllocated) { il2cpp::gc::GarbageCollector::AddMemoryPressure(bytesAllocated); } void GC::WaitForPendingFinalizers() { il2cpp::gc::GarbageCollector::WaitForPendingFinalizers(); } int64_t GC::GetTotalMemory(bool forceFullCollection) { if (forceFullCollection) il2cpp::gc::GarbageCollector::Collect(il2cpp::gc::GarbageCollector::GetMaxGeneration()); return il2cpp::gc::GarbageCollector::GetUsedHeapSize(); } void GC::ReRegisterForFinalize(Il2CppObject* obj) { if (obj == NULL) il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArgumentNullException("obj")); il2cpp::gc::GarbageCollector::RegisterFinalizer(obj); } int32_t GC::CollectionCount(int32_t generation) { return il2cpp::gc::GarbageCollector::GetCollectionCount(generation); } Il2CppObject* GC::get_ephemeron_tombstone() { return vm::Object::New(il2cpp_defaults.object_class); } void GC::register_ephemeron_array(Il2CppArray* array) { // Mono only does something in this icall when SGEN is in use. We don't have SGEN, // so there is nothing to do here. } int32_t GC::GetCollectionCount(int32_t generation) { return CollectionCount(generation); } int32_t GC::GetMaxGeneration() { return get_MaxGeneration(); } void GC::_ReRegisterForFinalize(Il2CppObject* o) { ReRegisterForFinalize(o); } void GC::_SuppressFinalize(Il2CppObject* o) { SuppressFinalize(o); } } /* namespace System */ } /* namespace mscorlib */ } /* namespace icalls */ } /* namespace il2cpp */