Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/native/clr/host/bridge-processing.cc
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,17 @@ void BridgeProcessingShared::process () noexcept
GCBridge::trigger_java_gc (env);
cleanup_after_java_collection ();
log_gc_summary ();

// GC bridge gref churn instrumentation (dotnet/runtime#131370): one line per round.
// Every peer is flipped strong->weak in prepare (NewWeakGlobalRef + DeleteGlobalRef) and
// weak->strong in cleanup (NewGlobalRef + DeleteWeakGlobalRef): 4 JNI global-ref ops per peer.
size_t churn_peers = 0;
for (size_t i = 0; i < cross_refs->ComponentCount; i++) {
churn_peers = Helpers::add_with_overflow_check<size_t> (churn_peers, cross_refs->Components [i].Count);
}
log_warnf (LOG_GC, "GCBRIDGE_CHURN runtime=coreclr sccs=%zu peers=%zu xrefs=%zu jni_transitions=%zu",
static_cast<size_t> (cross_refs->ComponentCount), churn_peers,
static_cast<size_t> (cross_refs->CrossReferenceCount), churn_peers * 4);
}

void BridgeProcessingShared::prepare_for_java_collection () noexcept
Expand Down
9 changes: 9 additions & 0 deletions src/native/mono/monodroid/osbridge.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1035,6 +1035,15 @@ OSBridge::gc_cross_references (int num_sccs, MonoGCBridgeSCC **sccs, int num_xre

gc_cleanup_after_java_collection (env, num_sccs, sccs);
set_bridge_processing_field (domains_list, 0);

// GC bridge gref churn instrumentation (dotnet/runtime#131370): one line per round.
// Every peer is flipped strong->weak in prepare (NewWeakGlobalRef + DeleteGlobalRef) and
// weak->strong in cleanup (NewGlobalRef + DeleteWeakGlobalRef): 4 JNI global-ref ops per peer.
int churn_peers = 0;
for (int i = 0; i < num_sccs; i++)
churn_peers += sccs [i]->num_objs;
log_warn (LOG_GC, "GCBRIDGE_CHURN runtime=mono sccs={} peers={} xrefs={} jni_transitions={}",
num_sccs, churn_peers, num_xrefs, churn_peers * 4);
}

void
Expand Down
Loading