Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Mono] Add Mono Profiler events into EventPipe. #55264

Merged
7 commits merged into from
Jul 9, 2021
Merged
Show file tree
Hide file tree
Changes from 5 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
57 changes: 43 additions & 14 deletions src/coreclr/scripts/genEventPipe.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,19 @@ def generateMethodSignatureWrite(eventName, template, extern, runtimeFlavor):
sig_pieces.append(")")
return ''.join(sig_pieces)

def includeProvider(providerName, runtimeFlavor):
if runtimeFlavor.coreclr and providerName == "Microsoft-DotNETRuntimeMonoProfiler":
return False
else:
return True

def includeEvent(inclusionList, providerName, eventName):
if len(inclusionList) == 0:
return True
if providerName in inclusionList and eventName in inclusionList[providerName]:
return True
elif providerName in inclusionList and "*" in inclusionList[providerName]:
return True
elif "*" in inclusionList and eventName in inclusionList["*"]:
return True
elif "*" in inclusionList and "*" in inclusionList["*"]:
Expand Down Expand Up @@ -340,6 +348,10 @@ def generateWriteEventBody(template, providerName, eventName, runtimeFlavor):
pack_list.append(
" success &= write_buffer_double_t(%s, &buffer, &offset, &size, &fixedBuffer);" %
(parameter.name,))
elif parameter.winType == "win:Pointer" and runtimeFlavor.mono:
pack_list.append(
" success &= write_buffer_uintptr_t((uintptr_t)%s, &buffer, &offset, &size, &fixedBuffer);" %
(parameter.name,))
elif runtimeFlavor.mono:
pack_list.append(
" success &= write_buffer((const uint8_t *)%s, sizeof(%s), &buffer, &offset, &size, &fixedBuffer);" %
Expand Down Expand Up @@ -669,16 +681,17 @@ def generateEventPipeHelperFile(etwmanifest, eventpipe_directory, target_cpp, ru

for providerNode in tree.getElementsByTagName('provider'):
providerName = providerNode.getAttribute('name')
providerPrettyName = providerName.replace("Windows-", '')
providerPrettyName = providerPrettyName.replace("Microsoft-", '')
providerPrettyName = providerPrettyName.replace('-', '_')
if extern: helper.write(
'extern "C" '
)
helper.write(
"void Init" +
providerPrettyName +
"(void);\n\n")
if includeProvider(providerName, runtimeFlavor):
providerPrettyName = providerName.replace("Windows-", '')
providerPrettyName = providerPrettyName.replace("Microsoft-", '')
providerPrettyName = providerPrettyName.replace('-', '_')
if extern: helper.write(
'extern "C" '
)
helper.write(
"void Init" +
providerPrettyName +
"(void);\n\n")

if extern: helper.write(
'extern "C" '
Expand All @@ -687,10 +700,11 @@ def generateEventPipeHelperFile(etwmanifest, eventpipe_directory, target_cpp, ru
helper.write("void InitProvidersAndEvents(void)\n{\n")
for providerNode in tree.getElementsByTagName('provider'):
providerName = providerNode.getAttribute('name')
providerPrettyName = providerName.replace("Windows-", '')
providerPrettyName = providerPrettyName.replace("Microsoft-", '')
providerPrettyName = providerPrettyName.replace('-', '_')
helper.write(" Init" + providerPrettyName + "();\n")
if includeProvider(providerName, runtimeFlavor):
providerPrettyName = providerName.replace("Windows-", '')
providerPrettyName = providerPrettyName.replace("Microsoft-", '')
providerPrettyName = providerPrettyName.replace('-', '_')
helper.write(" Init" + providerPrettyName + "();\n")
helper.write("}\n")

if runtimeFlavor.coreclr:
Expand Down Expand Up @@ -892,6 +906,19 @@ def getMonoEventPipeImplFilePrefix():
return write_buffer_int32_t (value, buffer, offset, size, fixed_buffer);
}

static
inline
bool
write_buffer_uintptr_t (
uintptr_t value,
uint8_t **buffer,
size_t *offset,
size_t *size,
bool *fixed_buffer)
{
return write_buffer ((const uint8_t *)&value, sizeof (uintptr_t), buffer, offset, size, fixed_buffer);
}

static
inline
EventPipeEvent *
Expand Down Expand Up @@ -949,6 +976,8 @@ def generateEventPipeImplFiles(

for providerNode in tree.getElementsByTagName('provider'):
providerName = providerNode.getAttribute('name')
if not includeProvider(providerName, runtimeFlavor):
continue

providerPrettyName = providerName.replace("Windows-", '')
providerPrettyName = providerPrettyName.replace("Microsoft-", '')
Expand Down
Loading