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

Commit 47e6ebe

Browse files
authored
Add EventPipe Config File Option MultiFileSec (#20548) (#20615)
1 parent 430b0d8 commit 47e6ebe

File tree

9 files changed

+275
-16
lines changed

9 files changed

+275
-16
lines changed

src/mscorlib/src/System/Diagnostics/Eventing/EventPipe.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ internal sealed class EventPipeConfiguration
8080
private uint m_circularBufferSizeInMB;
8181
private List<EventPipeProviderConfiguration> m_providers;
8282
private TimeSpan m_minTimeBetweenSamples = TimeSpan.FromMilliseconds(1);
83+
private ulong m_multiFileTraceLengthInSeconds = 0;
8384

8485
internal EventPipeConfiguration(
8586
string outputFile,
@@ -108,6 +109,11 @@ internal uint CircularBufferSizeInMB
108109
get { return m_circularBufferSizeInMB; }
109110
}
110111

112+
internal ulong MultiFileTraceLengthInSeconds
113+
{
114+
get { return m_multiFileTraceLengthInSeconds; }
115+
}
116+
111117
internal EventPipeProviderConfiguration[] Providers
112118
{
113119
get { return m_providers.ToArray(); }
@@ -149,6 +155,11 @@ internal void SetProfilerSamplingRate(TimeSpan minTimeBetweenSamples)
149155

150156
m_minTimeBetweenSamples = minTimeBetweenSamples;
151157
}
158+
159+
internal void SetMultiFileTraceLength(ulong traceLengthInSeconds)
160+
{
161+
m_multiFileTraceLengthInSeconds = traceLengthInSeconds;
162+
}
152163
}
153164

154165
internal static class EventPipe
@@ -174,7 +185,8 @@ internal static void Enable(EventPipeConfiguration configuration)
174185
configuration.CircularBufferSizeInMB,
175186
configuration.ProfilerSamplingRateInNanoseconds,
176187
providers,
177-
providers.Length);
188+
providers.Length,
189+
configuration.MultiFileTraceLengthInSeconds);
178190
}
179191

180192
internal static void Disable()
@@ -189,7 +201,7 @@ internal static class EventPipeInternal
189201
// These PInvokes are used by the configuration APIs to interact with EventPipe.
190202
//
191203
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
192-
internal static extern UInt64 Enable(string outputFile, uint circularBufferSizeInMB, long profilerSamplingRateInNanoseconds, EventPipeProviderConfiguration[] providers, int numProviders);
204+
internal static extern UInt64 Enable(string outputFile, uint circularBufferSizeInMB, long profilerSamplingRateInNanoseconds, EventPipeProviderConfiguration[] providers, int numProviders, ulong multiFileTraceLengthInSeconds);
193205

194206
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
195207
internal static extern void Disable(UInt64 sessionID);

src/mscorlib/src/System/Diagnostics/Eventing/EventPipeController.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ internal sealed class EventPipeController
4949
private const string ConfigKey_CircularMB = "CircularMB";
5050
private const string ConfigKey_OutputPath = "OutputPath";
5151
private const string ConfigKey_ProcessID = "ProcessID";
52+
private const string ConfigKey_MultiFileSec = "MultiFileSec";
5253

5354
// The default set of providers/keywords/levels. Used if an alternative configuration is not specified.
5455
private static readonly EventPipeProviderConfiguration[] DefaultProviderConfiguration = new EventPipeProviderConfiguration[]
@@ -160,6 +161,7 @@ private static EventPipeConfiguration BuildConfigFromFile(string configFilePath)
160161
string strProviderConfig = null;
161162
string strCircularMB = null;
162163
string strProcessID = null;
164+
string strMultiFileSec = null;
163165

164166
// Split the configuration entries by line.
165167
string[] configEntries = strConfigContents.Split(ConfigFileLineDelimiters, StringSplitOptions.RemoveEmptyEntries);
@@ -186,6 +188,10 @@ private static EventPipeConfiguration BuildConfigFromFile(string configFilePath)
186188
{
187189
strProcessID = entryComponents[1];
188190
}
191+
else if (key.Equals(ConfigKey_MultiFileSec))
192+
{
193+
strMultiFileSec = entryComponents[1];
194+
}
189195
}
190196
}
191197

@@ -206,6 +212,13 @@ private static EventPipeConfiguration BuildConfigFromFile(string configFilePath)
206212
throw new ArgumentNullException(nameof(outputPath));
207213
}
208214

215+
// Check to see if MultiFileSec is specified.
216+
ulong multiFileSec = 0;
217+
if (!string.IsNullOrEmpty(strMultiFileSec))
218+
{
219+
multiFileSec = Convert.ToUInt64(strMultiFileSec);
220+
}
221+
209222
// Build the full path to the trace file.
210223
string traceFileName = BuildTraceFileName();
211224
string outputFile = Path.Combine(outputPath, traceFileName);
@@ -219,6 +232,7 @@ private static EventPipeConfiguration BuildConfigFromFile(string configFilePath)
219232

220233
// Initialize a new configuration object.
221234
EventPipeConfiguration config = new EventPipeConfiguration(outputFile, circularMB);
235+
config.SetMultiFileTraceLength(multiFileSec);
222236

223237
// Set the provider configuration if specified.
224238
if (!string.IsNullOrEmpty(strProviderConfig))

src/mscorlib/src/System/Diagnostics/Eventing/EventPipeEventDispatcher.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ private void CommitDispatchConfiguration()
110110
new EventPipeProviderConfiguration(RuntimeEventSource.EventSourceName, (ulong) aggregatedKeywords, (uint) highestLevel)
111111
};
112112

113-
m_sessionID = EventPipeInternal.Enable(null, 1024, 1, providerConfiguration, 1);
113+
m_sessionID = EventPipeInternal.Enable(null, 1024, 1, providerConfiguration, 1, 0);
114114
Debug.Assert(m_sessionID != 0);
115115

116116
// Get the session information that is required to properly dispatch events.

0 commit comments

Comments
 (0)