Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit c8f77de

Browse files
authored
Don't allow specification of needStack to EventPipeProvider when creating an event. (#11571)
1 parent f90a27b commit c8f77de

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

src/scripts/genEventPipe.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,9 @@ def generateClrEventPipeWriteEventsImpl(
136136
eventLevel = eventLevel.replace("win:", "EventPipeEventLevel::")
137137
exclusionInfo = parseExclusionList(exclusionListFile)
138138
taskName = eventNode.getAttribute('task')
139-
noStack = getStackWalkBit(
140-
providerName,
141-
taskName,
142-
eventName,
143-
exclusionInfo.nostack)
144-
145-
initEvent = """ EventPipeEvent%s = EventPipeProvider%s->AddEvent(%s,%s,%s,%s,%d);
146-
""" % (eventName, providerPrettyName, eventKeywordsMask, eventValue, eventVersion, eventLevel, int(noStack))
139+
140+
initEvent = """ EventPipeEvent%s = EventPipeProvider%s->AddEvent(%s,%s,%s,%s);
141+
""" % (eventName, providerPrettyName, eventKeywordsMask, eventValue, eventVersion, eventLevel)
147142

148143
WriteEventImpl.append(initEvent)
149144
WriteEventImpl.append("}")

src/vm/eventpipeprovider.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,19 @@ void EventPipeProvider::SetConfiguration(bool providerEnabled, INT64 keywords, E
128128
InvokeCallback();
129129
}
130130

131+
EventPipeEvent* EventPipeProvider::AddEvent(INT64 keywords, unsigned int eventID, unsigned int eventVersion, EventPipeEventLevel level)
132+
{
133+
CONTRACTL
134+
{
135+
THROWS;
136+
GC_NOTRIGGER;
137+
MODE_ANY;
138+
}
139+
CONTRACTL_END;
140+
141+
return AddEvent(keywords, eventID, eventVersion, level, true /* needStack */);
142+
}
143+
131144
EventPipeEvent* EventPipeProvider::AddEvent(INT64 keywords, unsigned int eventID, unsigned int eventVersion, EventPipeEventLevel level, bool needStack)
132145
{
133146
CONTRACTL

src/vm/eventpipeprovider.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class EventPipeProvider
2626
{
2727
// Declare friends.
2828
friend class EventPipeConfiguration;
29+
friend class SampleProfiler;
2930

3031
private:
3132
// The GUID of the provider.
@@ -71,10 +72,17 @@ class EventPipeProvider
7172
bool EventEnabled(INT64 keywords, EventPipeEventLevel eventLevel) const;
7273

7374
// Create a new event.
74-
EventPipeEvent* AddEvent(INT64 keywords, unsigned int eventID, unsigned int eventVersion, EventPipeEventLevel level, bool needStack);
75+
EventPipeEvent* AddEvent(INT64 keywords, unsigned int eventID, unsigned int eventVersion, EventPipeEventLevel level);
7576

7677
private:
7778

79+
// Create a new event, but allow needStack to be specified.
80+
// In general, we want stack walking to be controlled by the consumer and not the producer of events.
81+
// However, there are a couple of cases that we know we don't want to do a stackwalk that would affect performance significantly:
82+
// 1. Sample profiler events: The sample profiler already does a stack walk of the target thread. Doing one of the sampler thread is a waste.
83+
// 2. Metadata events: These aren't as painful but because we have to keep this functionality around, might as well use it.
84+
EventPipeEvent* AddEvent(INT64 keywords, unsigned int eventID, unsigned int eventVersion, EventPipeEventLevel level, bool needStack);
85+
7886
// Add an event to the provider.
7987
void AddEvent(EventPipeEvent &event);
8088

0 commit comments

Comments
 (0)