Skip to content

Commit e201598

Browse files
committed
Some events don't show up and I don't know why
1 parent d3138f8 commit e201598

File tree

3 files changed

+85
-39
lines changed

3 files changed

+85
-39
lines changed

src/native/monodroid/monodroid-glue-internal.hh

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
#include <mono/utils/mono-counters.h>
1717
#include <mono/metadata/profiler.h>
1818

19+
#if defined(PERFETTO_ENABLED)
20+
#include "perfetto_support.hh"
21+
#endif
22+
1923
// NDEBUG causes robin_map.h not to include <iostream> which, in turn, prevents indirect inclusion of <mutex>. <mutex>
2024
// conflicts with our std::mutex definition in cppcompat.hh
2125
#if !defined (NDEBUG)
@@ -205,11 +209,19 @@ namespace xamarin::android::internal
205209
char* get_java_class_name_for_TypeManager (jclass klass);
206210
void log_traces (JNIEnv *env, TraceKind kind, const char *first_line) noexcept;
207211

208-
private:
209212
#if defined(PERFETTO_ENABLED)
210213
static void perfetto_init () noexcept;
214+
215+
private:
211216
void perfetto_hook_mono_events () noexcept;
217+
218+
force_inline static void perfetto_trace_event (std::string_view const& event_name)
219+
{
220+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MonodroidRuntime> ();
221+
TRACE_EVENT (PerfettoConstants::MonodroidCategory.data (), event_name.data (), track);
222+
}
212223
#endif
224+
private:
213225
static void mono_log_handler (const char *log_domain, const char *log_level, const char *message, mono_bool fatal, void *user_data);
214226
static void mono_log_standard_streams_handler (const char *str, mono_bool is_stdout);
215227

src/native/monodroid/monodroid-glue.cc

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ void
542542
MonodroidRuntime::prof_assembly_loading ([[maybe_unused]] MonoProfiler *prof, MonoAssembly *assembly) noexcept
543543
{
544544
#if defined(PERFETTO_ENABLED)
545-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::AssemblyLoad> ();
545+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::AssemblyLoadMonoVM> ();
546546
TRACE_EVENT_BEGIN (PerfettoConstants::MonoRuntimeCategory.data (), PerfettoConstants::AssemblyLoadAnnotation.data (), track);
547547
#endif
548548
}
@@ -551,7 +551,7 @@ void
551551
MonodroidRuntime::prof_assembly_loaded ([[maybe_unused]] MonoProfiler *prof, MonoAssembly *assembly) noexcept
552552
{
553553
#if defined(PERFETTO_ENABLED)
554-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::AssemblyLoad> ();
554+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::AssemblyLoadMonoVM> ();
555555
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track, [&](perfetto::EventContext ctx) {
556556
PerfettoSupport::add_name_annotation (ctx, assembly);
557557
});
@@ -562,7 +562,7 @@ void
562562
MonodroidRuntime::prof_image_loading ([[maybe_unused]] MonoProfiler *prof, MonoImage *image) noexcept
563563
{
564564
#if defined(PERFETTO_ENABLED)
565-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ImageLoad> ();
565+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ImageLoadMonoVM> ();
566566
TRACE_EVENT_BEGIN (PerfettoConstants::MonoRuntimeCategory.data (), PerfettoConstants::ImageLoadAnnotation.data (), track);
567567
#endif
568568
}
@@ -571,7 +571,7 @@ void
571571
MonodroidRuntime::prof_image_loaded ([[maybe_unused]] MonoProfiler *prof, MonoImage *image) noexcept
572572
{
573573
#if defined(PERFETTO_ENABLED)
574-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ImageLoad> ();
574+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ImageLoadMonoVM> ();
575575
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track, [&](perfetto::EventContext ctx) {
576576
PerfettoSupport::add_name_annotation (ctx, image);
577577
});
@@ -582,7 +582,7 @@ void
582582
MonodroidRuntime::prof_class_loading ([[maybe_unused]] MonoProfiler *prof, MonoClass *klass) noexcept
583583
{
584584
#if defined(PERFETTO_ENABLED)
585-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ClassLoad> ();
585+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ClassLoadMonoVM> ();
586586
TRACE_EVENT_BEGIN (PerfettoConstants::MonoRuntimeCategory.data (), PerfettoConstants::ClassLoadAnnotation.data (), track);
587587
#endif
588588
}
@@ -591,16 +591,18 @@ void
591591
MonodroidRuntime::prof_class_loaded ([[maybe_unused]] MonoProfiler *prof, MonoClass *klass) noexcept
592592
{
593593
#if defined(PERFETTO_ENABLED)
594-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ClassLoad> ();
595-
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track);
594+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::ClassLoadMonoVM> ();
595+
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track, [&](perfetto::EventContext ctx) {
596+
PerfettoSupport::add_name_annotation (ctx, klass);
597+
});
596598
#endif
597599
}
598600

599601
void
600602
MonodroidRuntime::prof_vtable_loading ([[maybe_unused]] MonoProfiler *prof, MonoVTable *vtable) noexcept
601603
{
602604
#if defined(PERFETTO_ENABLED)
603-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::VTableLoad> ();
605+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::VTableLoadMonoVM> ();
604606
TRACE_EVENT_BEGIN (PerfettoConstants::MonoRuntimeCategory.data (), PerfettoConstants::VTableLoadAnnotation.data (), track);
605607
#endif
606608
}
@@ -609,16 +611,18 @@ void
609611
MonodroidRuntime::prof_vtable_loaded ([[maybe_unused]] MonoProfiler *prof, MonoVTable *vtable) noexcept
610612
{
611613
#if defined(PERFETTO_ENABLED)
612-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::VTableLoad> ();
613-
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track);
614+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::VTableLoadMonoVM> ();
615+
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track, [&](perfetto::EventContext ctx) {
616+
PerfettoSupport::add_name_annotation (ctx, vtable);
617+
});
614618
#endif
615619
}
616620

617621
void
618622
MonodroidRuntime::prof_method_begin_invoke ([[maybe_unused]] MonoProfiler *prof, MonoMethod *method) noexcept
619623
{
620624
#if defined(PERFETTO_ENABLED)
621-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInvoke> ();
625+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInvokeMonoVM> ();
622626
TRACE_EVENT_BEGIN (PerfettoConstants::MonoRuntimeCategory.data (), PerfettoConstants::MethodInvokeAnnotation.data (), track);
623627
#endif
624628
}
@@ -627,7 +631,7 @@ void
627631
MonodroidRuntime::prof_method_end_invoke ([[maybe_unused]] MonoProfiler *prof, MonoMethod *method) noexcept
628632
{
629633
#if defined(PERFETTO_ENABLED)
630-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInvoke> ();
634+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInvokeMonoVM> ();
631635
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track, [&](perfetto::EventContext ctx) {
632636
PerfettoSupport::add_name_annotation (ctx, method);
633637
});
@@ -638,7 +642,7 @@ void
638642
MonodroidRuntime::prof_method_enter ([[maybe_unused]] MonoProfiler *prof, MonoMethod *method, [[maybe_unused]] MonoProfilerCallContext *context) noexcept
639643
{
640644
#if defined(PERFETTO_ENABLED)
641-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInner> ();
645+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInnerMonoVM> ();
642646
TRACE_EVENT_BEGIN (PerfettoConstants::MonoRuntimeCategory.data (), PerfettoConstants::MethodRunTimeAnnotation.data (), track);
643647
#endif
644648
}
@@ -647,7 +651,7 @@ void
647651
MonodroidRuntime::prof_method_leave ([[maybe_unused]] MonoProfiler *prof, MonoMethod *method, [[maybe_unused]] MonoProfilerCallContext *context) noexcept
648652
{
649653
#if defined(PERFETTO_ENABLED)
650-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInner> ();
654+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MethodInnerMonoVM> ();
651655
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track, [&](perfetto::EventContext ctx) {
652656
PerfettoSupport::add_name_annotation (ctx, method);
653657
});
@@ -658,7 +662,7 @@ void
658662
MonodroidRuntime::prof_monitor_contention ([[maybe_unused]] MonoProfiler *prof, MonoObject *object) noexcept
659663
{
660664
#if defined(PERFETTO_ENABLED)
661-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MonitorContention> ();
665+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MonitorContentionMonoVM> ();
662666
TRACE_EVENT_BEGIN (PerfettoConstants::MonoRuntimeCategory.data (), PerfettoConstants::MonitorContentionAnnotation.data (), track);
663667
#endif
664668
}
@@ -667,14 +671,23 @@ void
667671
MonodroidRuntime::prof_monitor_acquired ([[maybe_unused]] MonoProfiler *prof, MonoObject *object) noexcept
668672
{
669673
#if defined(PERFETTO_ENABLED)
670-
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MonitorContention> ();
671-
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track);
674+
auto track = PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MonitorContentionMonoVM> ();
675+
TRACE_EVENT_END (PerfettoConstants::MonoRuntimeCategory.data (), track, [&](perfetto::EventContext ctx) {
676+
PerfettoSupport::add_name_annotation (ctx, object);
677+
});
672678
#endif
673679
}
674680

675681
void
676682
MonodroidRuntime::mono_runtime_init ([[maybe_unused]] JNIEnv *env, [[maybe_unused]] dynamic_local_string<PROPERTY_VALUE_BUFFER_LEN>& runtime_args)
677683
{
684+
#if defined(PERFETTO_ENABLED)
685+
TRACE_EVENT(
686+
PerfettoConstants::MonoRuntimeCategory.data (),
687+
"mono_runtime_init",
688+
PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MonodroidRuntime> ()
689+
);
690+
#endif
678691
#if defined (DEBUG)
679692
RuntimeOptions options{};
680693
int64_t cur_time;
@@ -1749,9 +1762,11 @@ MonodroidRuntime::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass kl
17491762
jboolean haveSplitApks)
17501763
{
17511764
#if defined(PERFETTO_ENABLED)
1752-
perfetto_init ();
1753-
1754-
TRACE_EVENT (PerfettoConstants::MonodroidCategory.data (), PerfettoConstants::XAInitInternal.data ());
1765+
TRACE_EVENT(
1766+
PerfettoConstants::MonoRuntimeCategory.data (),
1767+
PerfettoConstants::XAInitInternal.data (),
1768+
PerfettoSupport::get_name_annotated_track<PerfettoTrackId::MonodroidRuntime> ()
1769+
);
17551770
#endif
17561771
char *mono_log_mask_raw = nullptr;
17571772
char *mono_log_level_raw = nullptr;
@@ -1925,6 +1940,9 @@ JNIEXPORT jint JNICALL
19251940
JNI_OnLoad (JavaVM *vm, void *reserved)
19261941
{
19271942
Util::initialize ();
1943+
#if defined(PERFETTO_ENABLED)
1944+
MonodroidRuntime::perfetto_init ();
1945+
#endif
19281946
return monodroidRuntime.Java_JNI_OnLoad (vm, reserved);
19291947
}
19301948

src/native/shared/perfetto_support.hh

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,23 @@ namespace xamarin::android {
3333
static constexpr std::string_view MethodInvokeAnnotation { "Method: invoke" };
3434
static constexpr std::string_view MethodRunTimeAnnotation { "Method: inner run time" };
3535
static constexpr std::string_view MonitorContentionAnnotation { "Monitor contention" };
36+
static constexpr std::string_view MonodroidRuntimeTrack { "Monodroid" };
3637

37-
static constexpr std::string_view XAInitInternal { "XA::InitInternal" };
38+
static constexpr std::string_view XAInitInternal { "InitInternal" };
3839
};
3940

4041
enum class PerfettoTrackId : uint64_t
4142
{
4243
// We need to start high, so that we don't conflict with the standard Perfetto trakck IDs
43-
AssemblyLoad = 0xDEADBEEF,
44-
ClassLoad,
45-
ImageLoad,
46-
MethodInner,
47-
MethodInvoke,
48-
MonitorContention,
49-
VTableLoad,
44+
AssemblyLoadMonoVM = 0xDEADBEEF,
45+
ClassLoadMonoVM,
46+
ImageLoadMonoVM,
47+
MethodInnerMonoVM,
48+
MethodInvokeMonoVM,
49+
MonitorContentionMonoVM,
50+
VTableLoadMonoVM,
51+
52+
MonodroidRuntime,
5053
};
5154
}
5255

@@ -74,6 +77,7 @@ namespace xamarin::android {
7477
static constexpr std::string_view AssemblyName_AnnotationName { "Assembly name" };
7578
static constexpr std::string_view ImageName_AnnotationName { "Image name" };
7679
static constexpr std::string_view MethodName_AnnotationName { "Method name" };
80+
static constexpr std::string_view ClassName_AnnotationName { "Class name" };
7781

7882
static constexpr std::string_view Null_AnnotationContent { "<NULL>" };
7983
static constexpr std::string_view MissingMethodName { "<UNNAMED METHOD>" };
@@ -82,24 +86,27 @@ namespace xamarin::android {
8286
template<xamarin::android::PerfettoTrackId TTrack>
8387
force_inline static perfetto::Track get_name_annotated_track ()
8488
{
85-
auto track = perfetto::Track (static_cast<uint64_t>(TTrack), perfetto::ThreadTrack::Current ());
89+
auto track = perfetto::Track (static_cast<uint64_t>(TTrack), perfetto::ProcessTrack::Current ());
8690
auto desc = track.Serialize ();
8791

88-
if constexpr (TTrack == PerfettoTrackId::AssemblyLoad) {
92+
if constexpr (TTrack == PerfettoTrackId::AssemblyLoadMonoVM) {
8993
desc.set_name (PerfettoConstants::AssemblyLoadAnnotation.data ());
90-
} else if constexpr (TTrack == PerfettoTrackId::ImageLoad) {
94+
} else if constexpr (TTrack == PerfettoTrackId::ImageLoadMonoVM) {
9195
desc.set_name (PerfettoConstants::ImageLoadAnnotation.data ());
92-
} else if constexpr (TTrack == PerfettoTrackId::ClassLoad) {
96+
} else if constexpr (TTrack == PerfettoTrackId::ClassLoadMonoVM) {
9397
desc.set_name (PerfettoConstants::ClassLoadAnnotation.data ());
94-
} else if constexpr (TTrack == PerfettoTrackId::VTableLoad) {
98+
} else if constexpr (TTrack == PerfettoTrackId::VTableLoadMonoVM) {
9599
desc.set_name (PerfettoConstants::VTableLoadAnnotation.data ());
96-
} else if constexpr (TTrack == PerfettoTrackId::MethodInvoke) {
100+
} else if constexpr (TTrack == PerfettoTrackId::MethodInvokeMonoVM) {
97101
desc.set_name (PerfettoConstants::MethodInvokeAnnotation.data ());
98-
} else if constexpr (TTrack == PerfettoTrackId::MethodInner) {
102+
} else if constexpr (TTrack == PerfettoTrackId::MethodInnerMonoVM) {
99103
desc.set_name (PerfettoConstants::MethodRunTimeAnnotation.data ());
100-
} else if constexpr (TTrack == PerfettoTrackId::MonitorContention) {
104+
} else if constexpr (TTrack == PerfettoTrackId::MonitorContentionMonoVM) {
101105
desc.set_name (PerfettoConstants::MonitorContentionAnnotation.data ());
106+
} else if constexpr (TTrack == PerfettoTrackId::MonodroidRuntime) {
107+
desc.set_name (PerfettoConstants::MonodroidRuntimeTrack.data ());
102108
}
109+
103110
set_track_event_descriptor (track, desc);
104111
return track;
105112
}
@@ -116,10 +123,10 @@ namespace xamarin::android {
116123
if (asm_name != nullptr) [[likely]] {
117124
name = mono_assembly_name_get_name (asm_name);
118125
}
119-
} else if constexpr (std::same_as <MonoImage, TMonoType>) {
126+
} else if constexpr (std::same_as<MonoImage, TMonoType>) {
120127
annotation_name = &ImageName_AnnotationName;
121128
name = mono_image_get_name (data);
122-
} else if constexpr (std::same_as <MonoMethod, TMonoType>) {
129+
} else if constexpr (std::same_as<MonoMethod, TMonoType>) {
123130
annotation_name = &MethodName_AnnotationName;
124131
append_full_class_name (mono_method_get_class (data), name);
125132
name.append (".");
@@ -130,6 +137,15 @@ namespace xamarin::android {
130137
} else {
131138
name.append (MissingMethodName);
132139
}
140+
} else if constexpr (std::same_as<MonoClass, TMonoType>) {
141+
annotation_name = &ClassName_AnnotationName;
142+
append_full_class_name (data, name);
143+
} else if constexpr (std::same_as<MonoVTable, TMonoType>) {
144+
annotation_name = &ClassName_AnnotationName;
145+
append_full_class_name (mono_vtable_class (data), name);
146+
} else if constexpr (std::same_as<MonoObject, TMonoType>) {
147+
annotation_name = &ClassName_AnnotationName;
148+
append_full_class_name (mono_object_get_class (data), name);
133149
}
134150

135151
auto annotation = ctx.event ()->add_debug_annotations ();

0 commit comments

Comments
 (0)