in src/PerfView/Dialogs/RunCommandDialog.xaml.cs [23:351]
public RunCommandDialog(CommandLineArgs args, MainWindow mainWindow, bool isCollect = false, Action continuation = null) : base(mainWindow)
{
//Owner = mainWindow;
if (mainWindow.CollectWindow != null)
{
throw new ApplicationException("Collection Dialog already open.");
}
m_continuation = continuation;
Closing += delegate (object sender, CancelEventArgs e)
{
mainWindow.CollectWindow = null;
};
App.CommandProcessor.LaunchPerfViewElevatedIfNeeded(isCollect ? "GuiCollect" : "GuiRun", args);
InitializeComponent();
var osVersion = Environment.OSVersion.Version.Major + Environment.OSVersion.Version.Minor / 10.0;
if (osVersion < 6.2) // CPU Counters only supported on Windows 8 and above
{
CpuCountersListButton.IsEnabled = false;
CpuCountersTextBox.IsEnabled = false;
}
if (args.DataFile == null)
{
args.DataFile = "PerfViewData.etl";
}
else if (!args.DataFile.EndsWith(".etl", StringComparison.OrdinalIgnoreCase))
{
if (args.DataFile.EndsWith(".etl.zip", StringComparison.OrdinalIgnoreCase))
{
args.DataFile = args.DataFile.Substring(0, args.DataFile.Length - 4); // Strip off the .zip.
}
else
{
args.DataFile = "PerfViewData.etl";
}
}
mainWindow.StatusBar.Log("Collection Dialog open.");
m_args = args;
m_isCollect = isCollect;
m_mainWindow = mainWindow;
CurrentDirTextBox.Text = Environment.CurrentDirectory;
// Initialize the CommandToRun history if available.
var commandToRunHistory = App.UserConfigData["CommandToRunHistory"];
if (commandToRunHistory != null)
{
CommandToRunTextBox.SetHistory(commandToRunHistory.Split(';'));
}
if (args.CommandLine != null)
{
CommandToRunTextBox.Text = args.CommandLine;
}
if (args.FocusProcess != null)
{
FocusProcessTextBox.Text = args.FocusProcess;
}
var dataFile = args.DataFile;
if (Path.Combine(CurrentDirTextBox.Text, Path.GetFileName(dataFile)) == dataFile)
{
dataFile = Path.GetFileName(dataFile);
}
DataFileNameTextBox.Text = dataFile;
RundownTimeoutTextBox.Text = args.RundownTimeout.ToString();
SampleIntervalTextBox.Text = args.CpuSampleMSec.ToString();
MaxCollectTextBox.Text = args.MaxCollectSec == 0 ? "" : args.MaxCollectSec.ToString();
StopTriggerTextBox.Text = args.StopOnPerfCounter == null ? "" : string.Join(",", args.StopOnPerfCounter);
CircularTextBox.Text = args.CircularMB.ToString();
ZipCheckBox.IsChecked = args.Zip;
MergeCheckBox.IsChecked = args.Merge;
// We are not running from the command line
if (CommandProcessor.IsGuiCollection(args))
{
// Then get the values from previous runs if present.
if (!ZipCheckBox.IsChecked.HasValue)
{
string configZip;
if (App.UserConfigData.TryGetValue("Zip", out configZip))
{
ZipCheckBox.IsChecked = string.Compare(configZip, "true", true) == 0;
}
}
if (!MergeCheckBox.IsChecked.HasValue)
{
string configMerge;
if (App.UserConfigData.TryGetValue("Merge", out configMerge))
{
MergeCheckBox.IsChecked = string.Compare(configMerge, "true", true) == 0;
}
}
}
NoNGenRundownCheckBox.IsChecked = args.NoNGenRundown;
if (args.CpuCounters != null)
{
CpuCountersTextBox.Text = string.Join(" ", args.CpuCounters);
}
// TODO give better feedback about what happens when conflicts happen.
if (args.ClrEvents != ClrTraceEventParser.Keywords.None)
{
ClrCheckBox.IsChecked = true;
}
if (args.TplEvents != TplEtwProviderTraceEventParser.Keywords.None)
{
TplCaptureCheckBox.IsChecked = true;
}
var kernelBase = (KernelTraceEventParser.Keywords)(KernelTraceEventParser.Keywords.Default - KernelTraceEventParser.Keywords.Profile);
if ((args.KernelEvents & kernelBase) == kernelBase)
{
KernelBaseCheckBox.IsChecked = true;
}
if ((args.KernelEvents & KernelTraceEventParser.Keywords.Profile) != 0)
{
CpuSamplesCheckBox.IsChecked = true;
}
if (args.GCOnly)
{
GCOnlyCheckBox.IsChecked = true;
}
if (args.GCCollectOnly)
{
GCCollectOnlyCheckBox.IsChecked = true;
}
if (args.DotNetAlloc)
{
DotNetAllocCheckBox.IsChecked = true;
}
if (args.DotNetAllocSampled)
{
DotNetAllocSampledCheckBox.IsChecked = true;
}
if (args.DotNetCalls)
{
DotNetCallsCheckBox.IsChecked = true;
}
if (args.JITInlining)
{
JITInliningCheckBox.IsChecked = true;
}
if ((args.ClrEvents & ClrTraceEventParser.Keywords.GCSampledObjectAllocationHigh) != 0)
{
ETWDotNetAllocSampledCheckBox.IsChecked = true;
}
if (args.NetworkCapture)
{
NetCaptureCheckBox.IsChecked = true;
}
if (args.NetMonCapture)
{
NetMonCheckBox.IsChecked = true;
}
if (args.CCWRefCount)
{
CCWRefCountCheckBox.IsChecked = true;
}
if (args.RuntimeLoading)
{
RuntimeLoadingCheckBox.IsChecked = true;
}
if (args.DumpHeap)
{
HeapSnapshotCheckBox.IsChecked = true;
}
if (args.OSHeapExe != null)
{
OSHeapExeTextBox.Text = args.OSHeapExe;
}
if (args.OSHeapProcess != 0)
{
OSHeapProcessTextBox.Text = args.OSHeapProcess.ToString();
}
if ((args.KernelEvents & (KernelTraceEventParser.Keywords.ContextSwitch | KernelTraceEventParser.Keywords.Dispatcher)) != 0)
{
ThreadTimeCheckbox.IsChecked = true;
}
if ((args.KernelEvents & KernelTraceEventParser.Keywords.Memory) != 0)
{
MemoryCheckBox.IsChecked = true;
}
if ((args.KernelEvents & KernelTraceEventParser.Keywords.Registry) != 0)
{
RegistryCheckBox.IsChecked = true;
}
if ((args.KernelEvents & KernelTraceEventParser.Keywords.FileIOInit) != 0)
{
FileIOCheckBox.IsChecked = true;
}
if ((args.KernelEvents & KernelTraceEventParser.Keywords.VirtualAlloc) != 0)
{
VirtualAllocCheckBox.IsChecked = true;
}
if ((args.KernelEvents & KernelTraceEventParser.Keywords.ReferenceSet) != 0)
{
RefSetCheckBox.IsChecked = true;
}
if ((args.KernelEvents & KernelTraceEventParser.Keywords.Handle) != 0)
{
HandleCheckBox.IsChecked = true;
}
// Initialize history of additional providers
var additionalProvidersHistory = App.UserConfigData["AdditionalProvidersHistory"];
if (additionalProvidersHistory != null)
{
AdditionalProvidersTextBox.SetHistory(additionalProvidersHistory.Split(';'));
}
if (args.Providers != null)
{
var str = "";
foreach (var provider in args.Providers)
{
if (string.Compare(provider, "Microsoft-Windows-IIS", StringComparison.OrdinalIgnoreCase) == 0)
{
IISCheckBox.IsChecked = true;
}
if (string.Compare(provider, "ClrStress", StringComparison.OrdinalIgnoreCase) == 0)
{
StressCheckBox.IsChecked = true;
}
else if (string.Compare(provider, "Microsoft-Windows-Kernel-Memory") == 0)
{
MemInfoCheckBox.IsChecked = true;
}
else
{
if (str.Length != 0)
{
str += ",";
}
str += provider;
}
}
AdditionalProvidersTextBox.Text = str;
}
if (args.Message != null)
{
MarkTextBox.Text = args.Message;
}
else
{
MarkTextBox.Text = "Mark 1";
}
// TODO the defaults are wrong if you switch from run to collect and back
if (isCollect)
{
Title = "Collecting data over a user specified interval";
CommandToRunTextBox.IsEnabled = false;
CommandToRunTextBox.Visibility = Visibility.Hidden;
CommandToRunLabel.Visibility = Visibility.Hidden;
FocusProcessCheckBox.Visibility = Visibility.Visible;
FocusProcessTextBox.Visibility = Visibility.Visible;
FocusProcessLabel.Visibility = Visibility.Visible;
if (!string.IsNullOrEmpty(FocusProcessTextBox.Text))
{
FocusProcessCheckBox.IsChecked = true;
FocusProcessTextBox.IsEnabled = true;
}
else
{
FocusProcessCheckBox.IsChecked = false;
FocusProcessTextBox.IsEnabled = false;
FocusProcessTextBox.Text = "** Machine Wide **";
}
RundownCheckBox.IsChecked = !args.NoRundown;
RundownTimeoutTextBox.IsEnabled = !args.NoRundown;
if (args.CircularMB == 0)
{
CircularTextBox.Text = "500";
}
OKButton.Content = "Start Collection";
StatusTextBox.Text = "Press Start Collection to Start.";
DataFileNameTextBox.Focus();
}
else
{
CommandToRunTextBox.Visibility = Visibility.Visible;
CommandToRunLabel.Visibility = Visibility.Visible;
FocusProcessCheckBox.Visibility = Visibility.Hidden;
FocusProcessTextBox.Visibility = Visibility.Hidden;
FocusProcessLabel.Visibility = Visibility.Hidden;
CommandToRunTextBox.Focus();
}
}