From f41e9edb0776ba2cc3f5c4f82dca4d2a9996d5f5 Mon Sep 17 00:00:00 2001 From: Nathan Ricci Date: Wed, 21 Aug 2019 15:51:45 -0400 Subject: [PATCH] Working on precise. Commit migrated from https://github.com/mono/mono/commit/65360da5d9801c35c7b77b7b573d64e2f907723d --- src/mono/mono/metadata/sgen-mono.c | 13 ++++++++++++- src/mono/mono/sgen/sgen-alloc.c | 13 +++++++++++++ src/mono/mono/sgen/sgen-gc.c | 5 +++++ src/mono/mono/sgen/sgen-gc.h | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/mono/mono/metadata/sgen-mono.c b/src/mono/mono/metadata/sgen-mono.c index 7ed40c7..32e54f0 100644 --- a/src/mono/mono/metadata/sgen-mono.c +++ b/src/mono/mono/metadata/sgen-mono.c @@ -2518,9 +2518,20 @@ mono_gc_get_allocated_bytes_for_current_thread (void) guint64 mono_gc_get_total_allocated_bytes(MonoBoolean precise) { - return total_bytes_allocated; + if (precise) + { + mono_threads_begin_global_suspend(); + guint64 count = sgen_updated_allocation_count(); + mono_threads_end_global_suspend(); + return count; + } + + return total_bytes_allocated } + + + gpointer sgen_client_default_metadata (void) { diff --git a/src/mono/mono/sgen/sgen-alloc.c b/src/mono/mono/sgen/sgen-alloc.c index 73688cd..b471ccb 100644 --- a/src/mono/mono/sgen/sgen-alloc.c +++ b/src/mono/mono/sgen/sgen-alloc.c @@ -523,6 +523,19 @@ sgen_clear_tlabs (void) sgen_set_total_bytes_allocated(total_bytes_allocated_globally); } +void sgen_update_allocation_count (void) +{ + guint64 total_bytes_allocated_globally = 0; + + FOREACH_THREAD_ALL (info) { + total_bytes_allocated_globally += info->tlab_next - info->tlab_start; + total_bytes_allocated_globally += info->total_bytes_allocated; + } FOREACH_THREAD_END + + sgen_set_total_bytes_allocated(total_bytes_allocated_globally); +} + + void sgen_init_allocator (void) { diff --git a/src/mono/mono/sgen/sgen-gc.c b/src/mono/mono/sgen/sgen-gc.c index 1572800..2e53802 100644 --- a/src/mono/mono/sgen/sgen-gc.c +++ b/src/mono/mono/sgen/sgen-gc.c @@ -3917,4 +3917,9 @@ sgen_check_canary_for_object (gpointer addr) } } +guint64 sgen_get_precise_allocation_count (void) +{ + +} + #endif /* HAVE_SGEN_GC */ diff --git a/src/mono/mono/sgen/sgen-gc.h b/src/mono/mono/sgen/sgen-gc.h index c201b52..9276a8e 100644 --- a/src/mono/mono/sgen/sgen-gc.h +++ b/src/mono/mono/sgen/sgen-gc.h @@ -1144,6 +1144,8 @@ gboolean sgen_nursery_canaries_enabled (void); void sgen_check_canary_for_object (gpointer addr); +guint64 sgen_get_precise_allocation_count (void); + #define CHECK_CANARY_FOR_OBJECT(addr, ignored) \ (sgen_nursery_canaries_enabled () ? sgen_check_canary_for_object (addr) : (void)0) -- 2.7.4