<\/p>\n\r
The Call Graph<\/span> view displays the performance data as a hierarchical tree, similar to the Call Tree<\/a>.<\/p>\n\r <\/p>\n\r Read on, or click a part of the image below to jump straight to the help for that area.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r As with many of the tab views, the display is split into two resizable panes.<\/p>\n\r <\/p>\n\r •<\/span>the left side shows an ordered hierarchical view of the functions called in the program\'s execution <\/span><\/p> <\/p>\n\r The graph\'s popup menu<\/a> provides options to filter data or to examine it in more detail <\/span> •<\/span>The right side shows the source code view<\/a> for any function selected on the left <\/span><\/p> <\/p>\n\r <\/p>\n\r Performance data is shown in an ordered graph for every function that has been hooked and called.<\/p>\n\r <\/p>\n\r Functions are initially ordered by Total Time - the time a function and its child functions contribute to the total run time.<\/p>\n\r <\/p>\n\r Child functions that get called will appear as child nodes in the graph; just expand a node to dig deeper.<\/p>\n\r <\/p>\n\r Selecting a function shows its source code on the right hand pane.<\/p>\n\r <\/p>\n\r Double clicking any item will display the function on the Relations<\/a> tab.<\/p>\n\r Functions in the graph may display one of the following icons:<\/p>\n\r <\/p>\n\r Function is not the main<\/span> instance but links to its main node<\/a> in the graph via the menu options<\/p>\n\r <\/p>\n\r Note that while your application is executing, the data is live and may not show correctly, for example some percentages may be large. Only when your program has finished executing is the data guaranteed accurate.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r In a call tree the same hierarchy of functions and their children can appear in multiple locations if called by different parent functions.<\/p>\n\r <\/p>\n\r In a call graph<\/span> that hierarchy can only appear once. There will be one main<\/span> instance and multiple links to it from other locations in the graph. <\/p>\n\r <\/p>\n\r The main instance will detail timings as a combined total for everywhere <\/span>that a function is used.<\/p>\n\r <\/p>\n\r This is as opposed to a call tree where function timings are for the time spent only in the callstack that leads to the node.<\/p>\n\r <\/p>\n\r This is demonstrated in the following example where...<\/p>\n\r <\/p>\n\r •<\/span>Functions P and Q both call B which in turn calls C <\/span> •<\/span>Function R calls C directly <\/span><\/p> <\/p>\n\r The call tree on the left below shows different timings for each of the 2 calls to B, and the 3 calls to C. These are the contributions from the different callstacks.<\/p>\n\r <\/p>\n\r In the call graph all the times are summed together.<\/p>\n\r <\/p>\n\r The call graph shows one main instance for B and C, and although there are other entries for functions B and C, all those do is link to the main instance.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r In Performance Validator these examples might appear as below, with the tree and graph both coloured according to Total %.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r <\/span><\/p>\n\r <\/p>\n\r To adapt to your screen layout, the horizontal or vertical orientation of the call graph and source code panes can be toggled with the orientation button.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r •<\/span>Refresh <\/span> updates the display with the called functions and performance data - as does the button on the Tools menu<\/a> and toolbar <\/span><\/p> <\/p>\n\r A refresh automatically expands the first nodes in the graph and highlights the most time consuming low-level function.<\/p>\n\r <\/p>\n\r As there\'s no auto update here, you\'ll need to use this Refresh button to update the display when you wish.<\/p>\n\r <\/p>\n\r •<\/span>Collapse \/ Expand All <\/span> hide or show every node in the graph <\/span><\/p> <\/span><\/p>\n\r •<\/span>Display... <\/span> shows the Call Graph Display Settings dialog<\/p> <\/span><\/p>\n\r <\/span><\/p>\n\r <\/span><\/p>\n\r <\/p>\n\r <\/p>\n\r The graph is coloured using the customisable Hotspot Colours settings<\/a> that range from 100% down to 0%.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r •<\/span>Colours <\/span> choose the way the colour scheme is applied in the graph <\/span><\/p> <\/p>\n\r •<\/span>Total % <\/span> colouring is based on function time relative to the total execution time<\/p> <\/p>\n\r qsCompFunc<\/span> is in the 30-40% colour band as it contributed 34.51% to the total run time<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r •<\/span>Total % Scaled <\/span> similar to Total %<\/span> but relative to the total time attributed to the function\'s top level node<\/span> in the graph<\/p> <\/span><\/p>\n\r This colour scheme \'stretches\' its range to use the full range of colours under each top level node. Multi-threaded programs may have multiple roots, and the sampling data collection mode<\/a> may also result in multiple roots, since sample callstacks won\'t always join up.<\/p>\n\r <\/span><\/p>\n\r Colours cannot be compared between different top level nodes as they may each be responsible for very different contributions to the program\'s total run time. <\/p>\n\r •<\/span>No Colour <\/span> black and white display only <\/span><\/p>\n\r <\/p>\n\r The graph is initially ordered by most time consuming function first (Total Time)<\/p>\n\r <\/p>\n\r •<\/span>Sort <\/span> choose one of the criteria from the list <\/span> Refresh<\/span> the display <\/span><\/p> <\/p>\n\r The options are:<\/p>\n\r <\/p>\n\r •<\/span>Total Time <\/span> the time all calls to a function and its child functions contribute to the total run time <\/span> •<\/span>Average Time <\/span> the time an average call to a function and its child functions contribute to the total run time •<\/span>Call Count <\/span> the number of times a function appears in the sampled collection data <\/p> <\/p>\n\r When in sampling mode<\/a>, Call Count<\/span> will be the only<\/span> available option here<\/p>\n\r <\/p>\n\r •<\/span>Ascending \/ Descending <\/span> change the ordering direction of the data <\/span><\/p> <\/p>\n\r Note that while your application is executing, the sorted data is live. Sorting may not complete correctly as the data may change during the sort. Only when your program has finished executing is the sorted data guaranteed accurate.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r There are three ways to change what\'s displayed in the view.<\/p>\n\r <\/p>\n\r Change the amount of detail shown for each function:<\/p>\n\r <\/p>\n\r •<\/span>Address <\/span> check to show the address in memory for the function <\/span><\/p> <\/p>\n\r •<\/span>Filename <\/span> check to show the file location in which the function was found <\/span><\/p> <\/p>\n\r •<\/span>Modulename <\/span> shows the function\'s module <\/span><\/p> <\/p>\n\r <\/span><\/p>\n\r Reduce the scope of the graph by hiding less significant functions:<\/p>\n\r <\/p>\n\r •<\/span>Threshold <\/span> set a percentage threshold below which contributing functions are hidden <\/span><\/p> <\/p>\n\r Higher numbers exclude more nodes.<\/p>\n\r <\/p>\n\r You\'ll need to do a manual Refresh<\/span> to update the display<\/p>\n\r <\/p>\n\r The threshold percentage is based on a functions accumulated contribution to the total runtime or total number of function calls.<\/p>\n\r <\/p>\n\r The default All<\/span> option includes all nodes.<\/p>\n\r <\/p>\n\r •<\/span>Apply Threshold to Children <\/span> check to hide any<\/span> function (as opposed to just top level nodes) in the graph that lie below the threshold contribution <\/span><\/p> <\/p>\n\r <\/p>\n\r Alternatively, filter out unwanted functions, or only show specific functions of interest.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r The display filters affect what functions are hidden and shown in the call graph. They do not affect which functions are hooked in the first place.<\/p>\n\r <\/p>\n\r •<\/span>Filters <\/span> shows the Call Graph Display Filter Manager: <\/span><\/p> <\/p>\n\r <\/p>\n\r <\/p>\n\r The dialog initially has no items in the list. Add some items manually or use the convenience filter options on the popup menus<\/a>.<\/p>\n\r <\/p>\n\r •<\/span>Add...<\/span> displays the display filter dialog<\/a> described below <\/span> •<\/span>Edit...<\/span> opens the display filter dialog<\/a> populated with the selected item\'s criteria, ready for editing <\/span> Or double click an entry in the list to show the filter dialog.<\/p>\n\r <\/p>\n\r •<\/span>Remove<\/span> remove selected filter(s) in the list<\/p> •<\/span>Remove All<\/span> remove all filters<\/p> <\/p>\n\r •<\/span>Enable All<\/span> enables all filters in the list <\/p> •<\/span>Disable All<\/span> disables all filters<\/p> <\/p>\n\r You can also enable or disable individual items in the list via the yellow check box at the left of each row.<\/p>\n\r <\/p>\n\r •<\/span>Display Win32 API functions<\/span> if selected this displays Win32 API functions otherwise Win32 API functions are hidden<\/p> <\/p>\n\r •<\/span>Entries that match filters are displayed<\/span> select this to display only<\/span> matched items <\/p> <\/p>\n\r •<\/span>Entries that match filters are hidden<\/span> select this to remove<\/span> matched items from the display<\/p> <\/p>\n\r <\/p>\n\r Take care when selecting Entries that match filters are displayed<\/span> as clearing the list and leaving this checked will leave no functions being displayed at all<\/span>!<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r The dialog below allows you to create a filter based on matching one or more criteria.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r If you don\'t enter some of the details, they simply won\'t form part of the match criteria<\/p>\n\r <\/p>\n\r •<\/span>Enabled<\/span> set this particular filter active or inactive <\/p> <\/p>\n\r This is exactly equivalent to checking the listed item in the display filter manager<\/p>\n\r <\/p>\n\r •<\/span>Class<\/span> enter the class name that the filter must match<\/p> <\/p>\n\r If you enter a class but no method name then all functions in the class are filtered •<\/span>Method<\/span> enter the method name<\/p> <\/p>\n\r If you enter a method but no class then the filter will match for the named function in any class<\/p>\n\r <\/p>\n\r •<\/span>Filename<\/span> filter all functions in the specified file<\/p> <\/p>\n\r The full path to the file is required.<\/p>\n\r <\/p>\n\r •<\/span>Directory<\/span> filter all functions in the specified directory<\/p> <\/p>\n\r The full directory path is required.<\/p>\n\r <\/p>\n\r •<\/span>Module<\/span> filter all functions in the specified module<\/p> <\/p>\n\r The full path to the module is required.<\/p>\n\r <\/p>\n\r •<\/span>Address<\/span> filter an exact address in memory<\/p> <\/p>\n\r To find text in the graph, use the Find Dialog<\/a> where you can search for functions, files and modules.<\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r <\/p>\n\r The following popup menu is available over the graph to add filters, examine relations or edit code.<\/p>\n\r <\/p>\n\r Menu actions apply to the function in the graph at the menu-click location.<\/p>\n\r <\/p>\n\r <\/p>\n\r
\n\r <\/span><\/p>\n\r <\/span><\/h1>\n\r
<\/a>The call graph view<\/span><\/h1>\n\r
<\/span><\/h1>\n\r
\n\r Function call is recursive<\/p>\n\r<\/a>The call graph vs the call tree<\/span><\/h1>\n\r
\n\r <\/span><\/p><\/a>Window orientation<\/span><\/h1>\n\r
<\/a>Updating the display<\/span><\/h1>\n\r
<\/a>Call graph colours<\/span><\/h1>\n\r
\n\rdoCombSort<\/span> is in the 50-60% colour band as it contributed 57.47% to the total run time<\/p>\n\r
\n\r <\/p>\n\r
\n\r
\n\r If there is only one top level node, the two colour schemes will be identical.<\/p>\n\r
\n\r <\/p><\/a>Sorting the data<\/span><\/h1>\n\r
\n\r <\/span><\/p>
\n\r <\/p><\/a>Managing the data being displayed<\/span><\/h1>\n\r
\n\r By default the threshold applies to the top level functions only.<\/p>\n\r<\/a>Filtering data in the tables<\/span><\/h1>\n\r
\n\r <\/span><\/p>
\n\r <\/span><\/p><\/a>The Display Filter dialog<\/span><\/h1>\n\r
\n\r <\/p>\n\r <\/span><\/h1>\n\r
<\/a>Finding text<\/span><\/h1>\n\r
<\/span><\/h1>\n\r
The source code view<\/a> has its own Find and Goto dialogs<\/a>.<\/h1>\n\r
<\/a>Call graph menu options<\/span><\/h1>\n\r
<\/span><\/h1>\n\r
<\/span><\/h1>\n\r