GarbageCollector.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #pragma once
  2. #include <utility>
  3. struct Il2CppGuid;
  4. struct Il2CppIUnknown;
  5. struct Il2CppObject;
  6. struct Il2CppThread;
  7. struct Il2CppInternalThread;
  8. namespace il2cpp
  9. {
  10. namespace gc
  11. {
  12. class LIBIL2CPP_CODEGEN_API GarbageCollector
  13. {
  14. public:
  15. static void Collect(int maxGeneration);
  16. static int32_t CollectALittle();
  17. static int32_t GetCollectionCount(int32_t generation);
  18. static int64_t GetUsedHeapSize();
  19. #if IL2CPP_ENABLE_WRITE_BARRIERS
  20. static void SetWriteBarrier(void **ptr);
  21. static void SetWriteBarrier(void **ptr, size_t numBytes);
  22. #else
  23. static inline void SetWriteBarrier(void **ptr) {}
  24. static inline void SetWriteBarrier(void **ptr, size_t numBytes) {}
  25. #endif
  26. public:
  27. // internal
  28. typedef void (*FinalizerCallback)(void* object, void* client_data);
  29. // functions implemented in a GC agnostic manner
  30. static void UninitializeGC();
  31. static void AddMemoryPressure(int64_t value);
  32. static int32_t GetMaxGeneration();
  33. static int32_t GetGeneration(void* addr);
  34. #if !RUNTIME_TINY
  35. static void InitializeFinalizer();
  36. static bool IsFinalizerThread(Il2CppThread* thread);
  37. static bool IsFinalizerInternalThread(Il2CppInternalThread* thread);
  38. static void UninitializeFinalizers();
  39. static void NotifyFinalizers();
  40. static void RunFinalizer(void *obj, void *data);
  41. static void RegisterFinalizerForNewObject(Il2CppObject* obj);
  42. static void RegisterFinalizer(Il2CppObject* obj);
  43. static void SuppressFinalizer(Il2CppObject* obj);
  44. static void WaitForPendingFinalizers();
  45. static Il2CppIUnknown* GetOrCreateCCW(Il2CppObject* obj, const Il2CppGuid& iid);
  46. #endif
  47. // functions implemented in a GC specific manner
  48. static void Initialize();
  49. // Deprecated. Remove when Unity has switched to mono_unity_gc_set_mode
  50. static void Enable();
  51. // Deprecated. Remove when Unity has switched to mono_unity_gc_set_mode
  52. static void Disable();
  53. // Deprecated. Remove when Unity has switched to mono_unity_gc_set_mode
  54. static bool IsDisabled();
  55. static void SetMode(Il2CppGCMode mode);
  56. static bool IsIncremental();
  57. static void StartIncrementalCollection();
  58. static int64_t GetMaxTimeSliceNs();
  59. static void SetMaxTimeSliceNs(int64_t maxTimeSlice);
  60. static FinalizerCallback RegisterFinalizerWithCallback(Il2CppObject* obj, FinalizerCallback callback);
  61. static int64_t GetAllocatedHeapSize();
  62. static void* MakeDescriptorForObject(size_t *bitmap, int numbits);
  63. static void* MakeDescriptorForString();
  64. static void* MakeDescriptorForArray();
  65. #if RUNTIME_TINY
  66. static void* Allocate(size_t size);
  67. static void* AllocateObject(size_t size, void* type);
  68. #endif
  69. static void* AllocateFixed(size_t size, void *descr);
  70. static void FreeFixed(void* addr);
  71. static void RegisterThread();
  72. static bool UnregisterThread();
  73. #if !RUNTIME_TINY
  74. static bool HasPendingFinalizers();
  75. static int32_t InvokeFinalizers();
  76. #endif
  77. static void AddWeakLink(void **link_addr, Il2CppObject *obj, bool track);
  78. static void RemoveWeakLink(void **link_addr);
  79. static Il2CppObject *GetWeakLink(void **link_addr);
  80. /* Used by liveness code */
  81. static void StopWorld();
  82. static void StartWorld();
  83. typedef void (*HeapSectionCallback) (void* user_data, void* start, void* end);
  84. static void ForEachHeapSection(void* user_data, HeapSectionCallback callback);
  85. static size_t GetSectionCount();
  86. typedef void* (*GCCallWithAllocLockCallback)(void* user_data);
  87. static void* CallWithAllocLockHeld(GCCallWithAllocLockCallback callback, void* user_data);
  88. static void RegisterRoot(char *start, size_t size);
  89. static void UnregisterRoot(char* start);
  90. typedef std::pair<char*, size_t> (*GetDynamicRootDataProc)(void* root);
  91. static void RegisterDynamicRoot(void* root, GetDynamicRootDataProc getRootDataFunc);
  92. static void UnregisterDynamicRoot(void* root);
  93. static void SetSkipThread(bool skip);
  94. static bool EphemeronArrayAdd(Il2CppObject* obj);
  95. };
  96. } /* namespace vm */
  97. } /* namespace il2cpp */