This topic describes the changes made to AQTime 4.0. For information on the changes made to other versions of the product, see Version History.
In addition to Win32 applications AQTime now can profile .NET applications. It supports all compilers that generate .NET-compatible code (see Supported Development Tools). Now you can, for instance, profile both a .NET executable and a native-code DLL used by that executable (see Profiling Mixed-Code .NET Applications).
AQTime is tightly integrated with Visual Studio .NET. Integration is available both for Microsoft Visual Studio .NET 2002 and for Visual Studio .NET 2003:
You can create an AQTime project using the Visual Studio dialogs and add the newly created project to a Visual Studio solution. The contents of your AQTime project are displayed in the Solution Explorer.
AQTime panels and profilers become Visual Studio .NET components. You can select code for profiling, run the desired profiler and analyze the profiling results directly in Visual Studio. You can dock and undock AQTime panels in the same manner as you dock and undock the native Visual Studio panels. The AQTime help system is also integrated into Visual Studio.
Visual Studio’s Start page includes the AQTime section.
AQTime adds the AQTime submenu to Visual Studio’s main menu. The submenu contains all of the same items that the AQTime-standalone version has. These items let you start, pause and resume profiling, select the profiling mode, modify the profiler and panel options, and so forth. Besides the AQTime submenu, AQTime also adds some items to the Visual Studio’s Project menu.
The automation model of Visual Studio .NET provides users with the ability to create custom add-ins, wizards, and work with macros. Like any other Visual Studio-oriented product, AQTime provides program interfaces for its internals (for example, for the Projects interface). This lets third-party developers create VS.NET add-ins, wizards and macros that use AQTime, work with it via OLE, and so forth.
AQTime includes a new facility, actions, for performing certain operations during the profiler run. Currently actions can command AQTime to generate profiling results and enable or disable profiling. For complete overview, read Using Actions.
In addition to the Full Check box, the Setup panel now has the Profile Entire .NET Code check box. If you enable Profile Entire .NET Code, AQTime will analyze routines located in managed (that is, .NET) modules, which were loaded by your application during the profiler run. This lets you easily profile third-party and system libraries that are used by your application.
Both Full Check and Profile Entire .NET Code let you select the level at which AQTime will profile your application: routine, line or class.
In addition to profiling of native-code Internet Information Services (IIS) applications, AQTime can now profile IIS applications created with .NET compilers. For more information on this, see Profiling ASP.NET Applications.
There is a new type of profiling area: Class. Areas of the Class type are supported by the Allocation profiler only. The profiler will track the creation and deletion of any classes specified here. For more information on these areas, see About Profiling Levels.
In previous versions of AQTime, to profile services, you sometimes needed to restart your computer. Now there is no need to do this.
Improvements in the results comparison mechanism: now in the Compare Settings dialog you can select columns that will be compared as well as columns that will be for information purposes only. That is, these columns will not be compared, but they will be present in the compared result set as descriptive elements.
The Timing profiler has been greatly enhanced and has been renamed to the Performance profiler:
In addition to time values, the profiler now can also collect other crucial characteristics of the application under test. For example, it can count the number of CPU cache misses or memory page faults that occurred during the function execution. The timing capabilities have been enhanced so that the profiler can now, for instance, time code executed in user mode or code that is executed in user and kernel modes. All these improvements help you not only find poorly performing routines, but determine why these routines functions poorly. The profiler has a new Active Counter option that specifies what application characteristics AQTime will measure.
For each counter you can select the unit of measurement from the Profiler toolbar. For instance, you can select the unit of time measurement: seconds, milliseconds, microseconds or machine cycles. See Performance Profiler - Overview.
The Performance profiler works 5 to 8 times faster than the Timing profiler worked. In addition, measurement accuracy is even better than it was previously. Changes in the profiling algorithm made the Warning Level option obsolete. This option has been removed.
The Performance profiler can now profile Common Language Runtime, Windows and COM logical threads. The Explorer panel now shows results grouped by each application thread. To view results by a thread, you can now simply select the desired thread in the Explorer panel. Like in earlier versions, you can also select the desired thread form the dropdown list on the Standard toolbar.
The Performance profiler results include three pseudo-routines that do not exist in your application: <Root>, <JIT compiler> and <Garbage collector>. The <Root> routine is treated as the parent routine of the topmost level. It lets you evaluate the time cost of different initialization statements. <JIT compiler> and <Garbage collector> are used for profiling .NET code. They help you determine the time portion of JIT compilation and garbage collection in the routine execution time. See Pseudo-Routines in Profiling Results for details.
The Performance profiler isolates the results of the first function call from other function calls and displays these results in special columns in the Report and Details panels. A routine could spend a lot of time performing initialization actions on the first call and could function faster on the subsequent calls. By analyzing the data in the new columns you can single out these routines from other slow routines. That is, these new columns help you determine why a routine performed poorly.
The Performance profiler gathers more information for source code lines. For example, it measures the Time with Children characteristic for each line.
The profiling results display has been enhanced. Results are now organized into several categories: Routines, Source Files and Modules. Within each category profiling results are grouped by thread. The Source Files and Modules categories let you easily see the summary results for each source file and module of your application.
A new column in the Report panel, Analysis Result, specifies if a routine was profiled or not. For routines that were excluded from profiling, the column shows why a routine was excluded from profiling. See Routines Category.
Profiler options have been divided into two large groups. Options that have effect on the result display are available now as items of AQTime toolbars (AQTime provides special toolbar for each profiler); options that affect the profiler run can be modified in the Profiler Options dialog.
AQTime includes the only profiler that tracks memory usage in your applications. This profiler is called Allocation profiler. It works for both native-code (non-.NET) and .NET applications. The Allocation profiler monitors calls to the memory management functions and help you determine whether objects and memory blocks remain in memory after the application is over. For complete information on memory management routines which the profiler tracks, see profiler description.
The profiler results are organized into two categories: Classes and Objects. These categories are displayed as subnodes of the result set node in the Explorer panel. The Classes category provides a birds-eye-view of the classes, whose instances exist at the moment of result generation. Information about classes is displayed in the Report panel. When the Objects category is selected, the Report panel holds information about every existing object in the application. The Details, Call Graph and Call Tree panels show additional information for the object that is currently selected in the Report panel: the stack of function calls that led to the object creation and information about object references (what objects use the selected object and what objects it uses. This information is available only for objects created in .NET applications).
The analysis of Coverage profiler results has been enhanced. Now profiling results are organized into several categories: Routines, Source Files and Modules that are shown in the Explorer panel. Within each category profiling results are grouped by thread. The Source Files and Modules categories let you easily see the summary Coverage results for each source file and module of your application.
The Coverage profiler now can profile Common Language Runtime, Windows and COM logical threads. The Explorer panel shows results grouped by each application thread.
Keyboard shortcuts that are used to start profiling, generate results, call Find/Replace dialogs and many others, can be customized now. You can select the key mapping scheme to which you are used (Visual Studio scheme, Borland Classic scheme, and others).
All "Find" dialogs support regular expressions in search criteria.
Now footers of AQTime panels show summary values for those rows that are selected in those panels. If there is only one row selected, the footers show summary for all rows.
The new Assistant panel helps you get started using all of the power of AQTime’s features faster. By default, the panel is visible; it is located on the right side of AQTime’s window.
The new advanced docking mechanism allows you manage panels easier.
AQTime now supports Windows XP themes and uses WinXP-style icons.
Column layout is more customizable: columns in AQTime panels can now be arranged one under another. This is useful for smaller display resolutions since this lets you display more columns in a panel at a time.
The Report panel includes the following changes:
Filters have been dramatically improved. Now you can enable and disable filters temporarily during the run. In addition, you can filter results "on-the-fly" by any value displayed in panel columns (this is also called "auto-filtering"). AQTime provides a new dialog for filter customization. See Filtering Results for complete information.
The Format Columns dialog now allows you to specify the format of the column summary. You can also specify a summary type by right-clicking the summary in the footer and selecting the desired type (COUNT, MIN, MAX and so forth) from the context menu.
The Report toolbar holds the Back and Forward items that let you retrace movements between different routines displayed in the Report, Details, Call Graph and Setup panels. Each of these two items has a dropdown list that displays the previously selected routines. The new Customize Navigation dialog allows you to specify the item format in these lists.
A new option of the Report panel, Activate after navigating, lets you specify whether AQTime should bring up the Report panel after you click a routine, class or module in other AQTime panels, for example, in Details.
The new Call Tree panel. The purpose of this panel is to display function (or object) "paths". The panel contents depend on the selected profilers. For instance, for the Performance profiler it shows you all execution paths (parent-children calls), where the routine selected in the Report panel was called. For the Allocation profiler, the Call Tree shows the diagram of object references.
Changes in the Details panel:
Like Report, the Details panel now supports auto-filters (see Filtering Results). In addition, the Format Columns dialog called for the Details panel columns allows you to specify the format of the column summary. You can also specify a summary type by right-clicking the summary in the footer and selecting the desired type (COUNT, MIN, MAX and so forth) from the context menu.
The Details panel can contain several tables. For instance, when displaying results of the Performance profiler, the Details panel holds three child tables: Parents, Children and Lines. Now these tables act as individual panels. You can dock and undock them within the Details panel as you desire. To enable docking, check the new Allow docking in Details item in the Details context menu.
A new Customize Charts dialog allows you to specify the series and style of the Details panel charts.
A new Auto Width context menu item lets you adjust the columns’ width in the panel so that all columns fit the panel’s client area.
The Call Graph panel includes two new features. It allows you to:
export the graph to a metafile (EMF).
select the result values that are displayed in the panel for each routine (or class). See Customize Call Graph Dialog.
The Event View panel sports lots of improvements:
It allows you to export the contents of the Event View panel to HTML or XML files. You can save either all or just the selected events.
At any time you can disable output to the panel by unchecking the new Active item in the Event View context menu. To enable the output, check this menu item. When the output is disabled, the panel shows a vertical bar on the left informing you about the panel’s state.
The Event View panel now shows the call stack for the Debug String events (in previous versions, it shows the call stack only for exceptions). The panel includes a new group of options: Debug Strings. It holds settings that control the call stack tracking for the Debug String events. See Event View Options.
The panel can highlight messages of different types with different colors.
A new Thread ID column displays the id of a thread where an event occurred.
The Event View panel now displays more information about each run: OS version, CPU type and speed, memory size, machine and user names, and so on.
The panel also includes a new Filter pane that makes the analysis of the event log easier. You can display or hide this panel using the new Show Filter Panel item on the Event View toolbar.
The Module Loaded event shows the version of the loaded module. The new Profiling Enabled and Profiling Disabled events indicate changes in the profiling status. The new Failed to Start the Project event logs unsuccessful profiling starts.
Using the new Paste as Comment menu item you can paste the clipboard text as comments into the Event View panel.
A new Auto Width context menu item lets you adjust the columns’ width so that all panel columns fit the panel’s client area.
Improvements in the Setup panel:
In previous versions of AQTime you could arrange data in the Modules list by selecting the desired option from the context menu. In AQTime 4, these menu items were removed. To arrange data in the Modules list, use the View by item of the Setup toolbar. This item offers another three arrangement options: Default, Unit and Routine. For more information on them, see About Setup Panel.
Elements added to the profiling areas and triggers are displayed in the namespace.class.routine [module] format.
The Add Routine, Add Unit and Add Class context menu items were removed. Now you can only add elements to profiling areas and triggers by right-clicking the desired element(s) and choosing the new Add Selected to Area item of the context menu. You can still add routines, classes and modules to profiling areas by dragging.
Profiling areas, which the current profiler does not support, are displayed in gray. However, they are still editable.
If you select a routine or a class in the Setup panel, and if the current profiler results hold a record for this routine (class), then AQTime updates the Report, Details, Call Graph and Editor panels so that they display information relative to the currently selected routine (class).
Using the Find dialog you can now search for any elements (routines, classes, files, and so on). In earlier versions, you could search for routines only.
The icons displayed next to routines, classes and modules in the Setup panel now depend on the development tool where the application was created. For instance, the icons of Visual C++ routines differ from the icons of Delphi routines.
Changes in the Editor panel:
AQTime’s Editor panel is used in the standalone version of AQTime. The integrated version of AQTime uses Visual Studio’s Code Editor as the Editor.
The Editor’s gutter is multi-column now (in previous versions it was single-column). You can customize the gutter in the same manner as you customize other AQTime panels: change columns’ width, add and remove columns from the gutter grid, and so forth.
The code syntax highlighting mechanism was changed.
Now AQTime’s Editor supports Java, Assembler, Cobol and Fortran syntax highlighting.
Now, if AQTime cannot find source files for a selected routine, the Editor displays two hyperlinks. They call the Project Search Directories or Search Directory dialogs where you can specify path to the desired file. Previous versions of AQTime did not display hyperlinks, they just showed the empty Editor.
AQTime’s Editor displays profiling results for each profiled routine before the routine’s source code. Now the block of source lines with profiling results can be collapsed or expanded. In previous versions results were displayed like comments, the collapsing was not supported. You can easily change the order of lines with profiling results in the source code by using new Move Up and Move Down buttons in the Customize Comments dialog (this dialog is intended for customization of result display in source code). The Customize Comments dialog also holds the new Defaults button. It lets you restore default settings of the result display.
Now you can print files that are being displayed in the Editor window. To do this, select File > Print from AQTime’s menu. The Editor also now supports the print preview capability.
The Editor’s context menu holds two new commands: Synchronize Report and Refresh. Using the Synchronize Report item you can highlight the routine, which source code you are browsing, in the Report panel. The Refresh item lets you update the Editor if the file you are browsing was changed outside of AQTime.
The Select Panel dialog displays the panel state (docked, floating).
The Terminate and Enable/Disable Profiling commands were added to the Run menu.
AQTime includes the new Add Assembly dialog that lets you easily add assemblies registered in the Global Assembly Cache (GAC) to your AQTime project.
In previous versions, AQTime created projects automatically when you loaded an executable in it. In addition, AQTime automatically named the project it created. This functionality has been changed: now you can create empty projects and name them as you want. You can do this using the items of the File submenu.
Now you can specify the active module in your AQTime project. "Active" means that AQTime launches this module when you start profiling. To specify the active module, right-click it in the Setup panel and select Set as Active Module from the context menu. In previous versions the active module was the one that was added to the project before other modules. There was no way to change it.
AQTime reads the debug information faster. Now loading of your applications in AQTime takes less time.
AQTime provides enhanced support of multi-processor computers and Intel processors implementing the Hyper-Threading technology.
AQTime installation program has the MSI format.
Now AQTime automatically checks for updates at startup. This feature will help you ensure that you are using the latest version of AQTime. You can also check for updates manually by using the new Check for Updates menu item. See Checking for Updates.
The toolbar configuration can now be saved to an .aqtlb file and loaded later. See Toolbars Customization.
A new option Number of recently used projects lets you specify the number of projects displayed in the File > Recent menu item.
In the Search Directories dialogs, you can specify a search path including subfolders.
The System Files and System Functions dialogs have been renamed. Now they are called "Files to Ignore" and "Routines to Ignore".