ios-unity/Libraries/libil2cpp/include/vm/MemoryInformation.h
2023-02-10 15:13:26 +08:00

119 lines
2.5 KiB
C++

#pragma once
#include "il2cpp-config.h"
struct Il2CppMetadataField
{
uint32_t offset;
uint32_t typeIndex;
const char* name;
bool isStatic;
};
enum Il2CppMetadataTypeFlags
{
kNone = 0,
kValueType = 1 << 0,
kArray = 1 << 1,
kArrayRankMask = 0xFFFF0000
};
struct Il2CppMetadataType
{
Il2CppMetadataTypeFlags flags; // If it's an array, rank is encoded in the upper 2 bytes
Il2CppMetadataField* fields;
uint32_t fieldCount;
uint32_t staticsSize;
uint8_t* statics;
uint32_t baseOrElementTypeIndex;
char* name;
const char* assemblyName;
uint64_t typeInfoAddress;
uint32_t size;
};
struct Il2CppMetadataSnapshot
{
uint32_t typeCount;
Il2CppMetadataType* types;
};
struct Il2CppManagedMemorySection
{
uint64_t sectionStartAddress;
uint32_t sectionSize;
uint8_t* sectionBytes;
};
struct Il2CppManagedHeap
{
uint32_t sectionCount;
Il2CppManagedMemorySection* sections;
};
struct Il2CppStacks
{
uint32_t stackCount;
Il2CppManagedMemorySection* stacks;
};
struct NativeObject
{
uint32_t gcHandleIndex;
uint32_t size;
uint32_t instanceId;
uint32_t classId;
uint32_t referencedNativeObjectIndicesCount;
uint32_t* referencedNativeObjectIndices;
};
struct Il2CppGCHandles
{
uint32_t trackedObjectCount;
uint64_t* pointersToObjects;
};
struct Il2CppRuntimeInformation
{
uint32_t pointerSize;
uint32_t objectHeaderSize;
uint32_t arrayHeaderSize;
uint32_t arrayBoundsOffsetInHeader;
uint32_t arraySizeOffsetInHeader;
uint32_t allocationGranularity;
};
struct Il2CppManagedMemorySnapshot
{
Il2CppManagedHeap heap;
Il2CppStacks stacks;
Il2CppMetadataSnapshot metadata;
Il2CppGCHandles gcHandles;
Il2CppRuntimeInformation runtimeInformation;
void* additionalUserInformation;
};
namespace il2cpp
{
namespace vm
{
namespace MemoryInformation
{
typedef void(*ClassReportFunc)(Il2CppClass* klass, void* context);
typedef void(*DataReportFunc)(void* data, void* context);
struct IterationContext
{
DataReportFunc callback;
void* userData;
};
void ReportIL2CppClasses(ClassReportFunc callback, void* context);
void ReportGcHeapSection(void* context, void* start, void* end);
void ReportGcHandleTarget(Il2CppObject* obj, void* context);
Il2CppManagedMemorySnapshot* CaptureManagedMemorySnapshot();
void FreeCapturedManagedMemorySnapshot(Il2CppManagedMemorySnapshot* snapshot);
}
}
}