Skip to content

Commit

Permalink
Merge pull request #2020 from Unity-Technologies/2021.3/backport-is-i…
Browse files Browse the repository at this point in the history
…nited

2021.3 backport of il2cpp_class_is_inited api
  • Loading branch information
UnityAlex committed Jun 25, 2024
2 parents 4a14a72 + 3fe4756 commit ffd2e28
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
23 changes: 20 additions & 3 deletions mono/metadata/unity-memory-info.c
Original file line number Diff line number Diff line change
Expand Up @@ -723,18 +723,35 @@ ReportGenericClasses(MonoGenericClass *genericClass, gpointer user_data)
{
ClassReportContext *context = (ClassReportContext *)user_data;

if (genericClass->cached_class != NULL)
if (genericClass->cached_class != NULL && genericClass->cached_class->inited)
context->callback(genericClass->cached_class, context->user_data);
}

void
mono_unity_class_for_each(ClassReportFunc callback, void *user_data)
static void
ReportImageSetClasses(MonoImageSet * imageSet, void* user_data)
{
if (imageSet->array_cache)
g_hash_table_foreach(imageSet->array_cache, ReportHashMapListClasses, user_data);

if (imageSet->szarray_cache)
g_hash_table_foreach(imageSet->szarray_cache, ReportHashMapClasses, user_data);

if (imageSet->ptr_cache)
g_hash_table_foreach(imageSet->ptr_cache, ReportHashMapClasses, user_data);
}

MONO_API void
mono_unity_class_for_each(ClassReportFunc callback, void* user_data)
{
ClassReportContext reportContext;
reportContext.callback = callback;
reportContext.user_data = user_data;
// Report all assembly classes and assembly specific arrays
mono_domain_assembly_foreach(mono_domain_get(), ReportClassesFromAssembly, &reportContext);
// Report all generic classes
mono_metadata_generic_class_foreach(ReportGenericClasses, &reportContext);
// Report all image set arrays
mono_metadata_image_set_foreach(ReportImageSetClasses, &reportContext);
}

MonoManagedMemorySnapshot* mono_unity_capture_memory_snapshot()
Expand Down
6 changes: 6 additions & 0 deletions mono/metadata/unity-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,12 @@ MonoBoolean mono_unity_class_is_class_type(MonoClass* klass)
return FALSE;
}

MONO_API gboolean
mono_unity_class_is_inited(MonoClass* klass)
{
return m_class_is_inited (klass);
}

MONO_API gboolean
mono_class_is_generic(MonoClass *klass)
{
Expand Down
1 change: 1 addition & 0 deletions mono/metadata/unity-utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ MonoClass* mono_unity_class_get_castclass(MonoClass *klass);
guint32 mono_unity_class_get_native_size(MonoClass* klass);
MonoBoolean mono_unity_class_is_string(MonoClass* klass);
MonoBoolean mono_unity_class_is_class_type(MonoClass* klass);
MONO_API gboolean mono_unity_class_is_inited(MonoClass* klass);
MONO_API gboolean mono_class_is_generic(MonoClass *klass);
MONO_API gboolean mono_class_is_blittable(MonoClass *klass);
MONO_API gboolean mono_class_is_inflated(MonoClass *klass);
Expand Down

0 comments on commit ffd2e28

Please sign in to comment.