Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

GarbageCollector.h 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. static void InitializeFinalizer();
  34. static bool IsFinalizerThread(Il2CppThread* thread);
  35. static bool IsFinalizerInternalThread(Il2CppInternalThread* thread);
  36. static void UninitializeFinalizers();
  37. static void NotifyFinalizers();
  38. static void RunFinalizer(void *obj, void *data);
  39. static void RegisterFinalizerForNewObject(Il2CppObject* obj);
  40. static void RegisterFinalizer(Il2CppObject* obj);
  41. static void SuppressFinalizer(Il2CppObject* obj);
  42. static void WaitForPendingFinalizers();
  43. static Il2CppIUnknown* GetOrCreateCCW(Il2CppObject* obj, const Il2CppGuid& iid);
  44. // functions implemented in a GC specific manner
  45. static void Initialize();
  46. // Deprecated. Remove when Unity has switched to mono_unity_gc_set_mode
  47. static void Enable();
  48. // Deprecated. Remove when Unity has switched to mono_unity_gc_set_mode
  49. static void Disable();
  50. // Deprecated. Remove when Unity has switched to mono_unity_gc_set_mode
  51. static bool IsDisabled();
  52. static void SetMode(Il2CppGCMode mode);
  53. static bool IsIncremental();
  54. static void StartIncrementalCollection();
  55. static int64_t GetMaxTimeSliceNs();
  56. static void SetMaxTimeSliceNs(int64_t maxTimeSlice);
  57. static FinalizerCallback RegisterFinalizerWithCallback(Il2CppObject* obj, FinalizerCallback callback);
  58. static int64_t GetAllocatedHeapSize();
  59. static void* MakeDescriptorForObject(size_t *bitmap, int numbits);
  60. static void* MakeDescriptorForString();
  61. static void* MakeDescriptorForArray();
  62. static void* Allocate(size_t size);
  63. static void* AllocateObject(size_t size, void* type);
  64. static void* AllocateFixed(size_t size, void *descr);
  65. static void FreeFixed(void* addr);
  66. static void RegisterThread();
  67. static bool UnregisterThread();
  68. static bool HasPendingFinalizers();
  69. static int32_t InvokeFinalizers();
  70. static void AddWeakLink(void **link_addr, Il2CppObject *obj, bool track);
  71. static void RemoveWeakLink(void **link_addr);
  72. static Il2CppObject *GetWeakLink(void **link_addr);
  73. /* Used by liveness code */
  74. static void StopWorld();
  75. static void StartWorld();
  76. typedef void (*HeapSectionCallback) (void* user_data, void* start, void* end);
  77. static void ForEachHeapSection(void* user_data, HeapSectionCallback callback);
  78. static size_t GetSectionCount();
  79. typedef void* (*GCCallWithAllocLockCallback)(void* user_data);
  80. static void* CallWithAllocLockHeld(GCCallWithAllocLockCallback callback, void* user_data);
  81. static void RegisterRoot(char *start, size_t size);
  82. static void UnregisterRoot(char* start);
  83. static void SetSkipThread(bool skip);
  84. static bool EphemeronArrayAdd(Il2CppObject* obj);
  85. };
  86. } /* namespace vm */
  87. } /* namespace il2cpp */