mirror of
https://github.com/AxioDL/optick.git
synced 2026-03-30 11:49:24 -07:00
d6274a7b2f
- This makes it easier to view profiling data for long-running tasks that are mostly independent of individual frames. Co-authored-by: Andy Gainey
182 lines
13 KiB
XML
182 lines
13 KiB
XML
<UserControl x:Class="Profiler.Controls.EventThreadView"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:Controls="clr-namespace:Profiler.Controls"
|
|
xmlns:Profiler="clr-namespace:Profiler"
|
|
xmlns:Profiler_Data="clr-namespace:Profiler.Data;assembly=Profiler.Data"
|
|
xmlns:MahApps="http://metro.mahapps.com/winfx/xaml/controls"
|
|
mc:Ignorable="d"
|
|
d:DesignHeight="450" d:DesignWidth="800">
|
|
<UserControl.Resources>
|
|
<Controls:MsToStringConverter x:Key="MsToStringConverter" />
|
|
<Style x:Key="LabelUnderscoreStyle" BasedOn="{StaticResource {x:Type Label}}" TargetType="Label">
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Label">
|
|
<Border>
|
|
<ContentPresenter
|
|
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
|
RecognizesAccessKey="False" />
|
|
</Border>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
</UserControl.Resources>
|
|
<Grid Height="Auto">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="1*" />
|
|
</Grid.RowDefinitions>
|
|
<Grid Background="{StaticResource ControlBackgroundBrush}">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="1*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<ItemsControl Grid.Column="1" x:Name="SummaryView">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<StackPanel Orientation="Horizontal" />
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate>
|
|
<StackPanel Orientation="Horizontal" TextBlock.FontSize="12" TextBlock.FontWeight="Bold" Opacity="0.5" VerticalAlignment="Center">
|
|
<Rectangle Width="1" Height="15" Stroke="Gray" Margin="0,0,5,0" />
|
|
<TextBlock Text="{Binding Value}" ToolTip="{Binding Name}" Margin="0,0,5,0" />
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
<StackPanel Margin="1" HorizontalAlignment="Right" x:Name="ThreadToolsPanel" Grid.Column="2" VerticalAlignment="Top" Orientation="Horizontal">
|
|
<StackPanel Orientation="Horizontal" TextBlock.FontSize="12" TextBlock.FontWeight="Bold" Height="16" TextBlock.TextAlignment="Center" Margin="2,0" Opacity="0.5" x:Name="GroupStats">
|
|
<StackPanel Orientation="Horizontal" ToolTip="Duration of the Capture">
|
|
<ContentControl Style="{StaticResource appbar_timer}" Margin="-10" />
|
|
<TextBlock Text="{Binding Duration, Converter={StaticResource MsToStringConverter}}" Margin="2" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<Rectangle Width="1" Height="15" Stroke="Gray" Margin="0,0,5,0" />
|
|
<StackPanel Orientation="Horizontal" ToolTip="Number of Collected Scopes">
|
|
<ContentControl Style="{StaticResource appbar_greek_sigma_uppercase}" Margin="-6" />
|
|
<TextBlock Text="{Binding NumScopes, StringFormat={}{0:### ### ### ##0}}" Margin="2" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<Rectangle Width="1" Height="15" Stroke="Gray" Margin="0,0,5,0" />
|
|
<StackPanel Orientation="Horizontal" ToolTip="Number of Collected Callstacks (Run the Game as Administrator to enable callstack collection)">
|
|
<ContentControl Style="{StaticResource appbar_cards_diamond}" Margin="-6" />
|
|
<TextBlock Text="{Binding NumCallstacks, StringFormat={}{0:### ### ### ##0}}" Margin="2" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<Rectangle Width="1" Height="15" Stroke="Gray" Margin="0,0,5,0" />
|
|
</StackPanel>
|
|
<Controls:FunctionSearch x:Name="FunctionSearchControl" Margin="1,0" Width="230" />
|
|
<ToggleButton x:Name="ShowSyncWorkButton" ToolTip="Show Work" Height="{StaticResource DefaultButtonSize}" Margin="0,0,1,0" Click="ShowSyncWorkButton_Click">
|
|
<TextBlock Text="SHOW CPU CORES" Margin="0,-3,0,0" Padding="0" />
|
|
</ToggleButton>
|
|
<ToggleButton x:Name="ShowCallstacksButton" Height="{StaticResource DefaultButtonSize}" MinHeight="{StaticResource DefaultButtonSize}" Margin="0" Checked="ShowCallstacksButton_Checked" Unchecked="ShowCallstacksButton_Unchecked">
|
|
<ToggleButton.Content>
|
|
<StackPanel Orientation="Horizontal" Margin="-4">
|
|
<TextBlock Margin="3,1,3,1" Text="SHOW CALLSTACKS" />
|
|
<Button x:Name="CallstackFilterDrowpdown" Margin="0" BorderThickness="0" Background="Transparent" Click="CallstackFilterDrowpdown_Click">
|
|
<ContentControl Margin="-4,0,-2,0"
|
|
Width="9"
|
|
Height="9"
|
|
Content="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z"
|
|
Style="{DynamicResource PathIconContentControlStyle}" />
|
|
</Button>
|
|
</StackPanel>
|
|
</ToggleButton.Content>
|
|
</ToggleButton>
|
|
<ToggleButton x:Name="ShowFrameLinesButton" ToolTip="Show Frame Lines" Height="{StaticResource DefaultButtonSize}" Margin="0,0,1,0" Click="ShowFrameLinesButton_Click" IsChecked="{Binding ShowFrameLines, ElementName=ThreadViewControl}">
|
|
<TextBlock Text="SHOW FRAMES" Margin="0,-3,0,0" Padding="0" />
|
|
</ToggleButton>
|
|
<Popup x:Name="CallstackFilterPopup" Placement="Bottom" IsOpen="{Binding IsChecked, ElementName=CallstackFilterDrowpdown}" PlacementTarget="{Binding ElementName=ShowCallstacksButton}" StaysOpen="False" >
|
|
<Border Background="{StaticResource OptickContentBackground}" BorderBrush="{StaticResource OptickBorder}" BorderThickness="1" Width="{Binding ActualWidth, ElementName=ShowCallstacksButton}">
|
|
<ItemsControl ItemsSource="{Binding}">
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate>
|
|
<Grid Margin="1">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<CheckBox IsChecked="{Binding IsChecked}" />
|
|
<TextBlock Text="{Binding Reason}" Grid.Column="1" />
|
|
</Grid>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</Border>
|
|
</Popup>
|
|
</StackPanel>
|
|
</Grid>
|
|
<Controls:ThreadViewControl Grid.Row="1" x:Name="ThreadViewControl" />
|
|
<Popup x:Name="SurfacePopup" StaysOpen="False" Placement="Mouse" PopupAnimation="Fade" IsEnabled="False" Focusable="False" IsHitTestVisible="False" AllowsTransparency="True">
|
|
<Border BorderThickness="1" Background="{StaticResource OptickContentBackground}" BorderBrush="{StaticResource AccentColorBrush}">
|
|
<ItemsControl ItemsSource="{Binding}" Margin="0">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<StackPanel Orientation="Vertical"/>
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.Resources>
|
|
<DataTemplate DataType="{x:Type Profiler_Data:EventNode}">
|
|
<Grid Margin="0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto"></ColumnDefinition>
|
|
<ColumnDefinition Width="Auto"></ColumnDefinition>
|
|
<ColumnDefinition Width="*"></ColumnDefinition>
|
|
</Grid.ColumnDefinitions>
|
|
<Rectangle Grid.Column="0" Margin="4" Width="16" Height="16" Fill="{Binding Description.ForceBrush}" Stroke="Black" StrokeThickness="1" RadiusX="2" RadiusY="2" VerticalAlignment="Center" />
|
|
<Label Grid.Column="1" Margin="2,0" Content="{Binding Name, Mode=OneTime}" FontWeight="Bold" VerticalAlignment="Center" />
|
|
<Label Grid.Column="2" Margin="2,0" HorizontalAlignment="Right" VerticalAlignment="Center" HorizontalContentAlignment="Right" Content="{Binding Duration, Mode=OneTime}" ContentStringFormat="{}{0:0.###} ms" FontWeight="Bold" />
|
|
</Grid>
|
|
</DataTemplate>
|
|
<DataTemplate DataType="{x:Type Profiler_Data:WaitInterval}">
|
|
<Grid Margin="0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<ContentControl Style="{StaticResource appbar_timer_pause}" Margin="-3,-6,-6,-6" Width="32" Height="32" />
|
|
<Label Grid.Column="1" Content="{Binding ReasonText, Mode=OneTime}" ContentStringFormat="{}Cursor: {0}" Margin="2" />
|
|
<Label Grid.Column="2" Content="{Binding Duration, Mode=OneTime}" ContentStringFormat="{}{0:0.###} ms" Margin="2" />
|
|
</Grid>
|
|
</DataTemplate>
|
|
<DataTemplate DataType="{x:Type Profiler_Data:NodeWaitIntervalList}">
|
|
<Expander Header="Synchronization" IsExpanded="True" FontWeight="Bold" MahApps:ButtonHelper.PreserveTextCase="True">
|
|
<DataGrid ItemsSource="{Binding}" CanUserAddRows="False" GridLinesVisibility="None" IsReadOnly="True" BorderThickness="0" AutoGenerateColumns="False" FontWeight="Normal" ClipboardCopyMode="ExcludeHeader">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Reason" Binding="{Binding Reason}" />
|
|
<DataGridTextColumn Header="Time(ms)" Binding="{Binding Duration, StringFormat={}{0:0.###}ms}" />
|
|
<DataGridTextColumn Header="Time(%)" Binding="{Binding Percent, StringFormat={}{0:0.#}%}" />
|
|
<DataGridTextColumn Header="Count" Binding="{Binding Count}" />
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</Expander>
|
|
</DataTemplate>
|
|
<DataTemplate DataType="{x:Type Profiler_Data:Callstack}">
|
|
<Expander Header="Callstack" IsExpanded="True" FontWeight="Bold">
|
|
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="False" HeadersVisibility="None" GridLinesVisibility="None" IsReadOnly="True" BorderThickness="0" FontWeight="Normal" ClipboardCopyMode="ExcludeHeader">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Address" Binding="{Binding Address, StringFormat={}0x{0:x}}" Foreground="Gray">
|
|
<DataGridTextColumn.ElementStyle>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="HorizontalAlignment" Value="Right" />
|
|
</Style>
|
|
</DataGridTextColumn.ElementStyle>
|
|
</DataGridTextColumn>
|
|
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</Expander>
|
|
</DataTemplate>
|
|
</ItemsControl.Resources>
|
|
</ItemsControl>
|
|
</Border>
|
|
</Popup>
|
|
</Grid>
|
|
</UserControl>
|