GarbageCollector.h 4.0 KB

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