Profiling Inline Functions

Applies to AQTime 8.81, last modified on January 18, 2022

AQTime’s profilers track entry and exit points of a function. When a function is set as inline, the compiler may insert a copy of the function body in each spot it is called (or it may disregard the directive). Obviously, with a true inlined function, there are no entry and exit points to track, so AQTime will include profiling results of that function into results of its parent function (or functions).

If you want an inline function to be profiled, you must set your compiler not to inline it. How you do this, depends on the compiler you use. Below is information for Microsoft Visual C++, Borland C++Builder and .NET compilers.

Microsoft Visual C# .NET, Visual Basic .NET and Other .NET Compilers

The JIT compiler compiles and optimizes the code of a managed application during the application run. The compiler uses specific algorithms to decide whether to inline a function or not. The easiest way to disable inlining for applications created with .NET compilers is to enable the Disable inlining option of the Performance or Coverage profiler before the profiler starts. When this option is on, routines in the profiled application are not inlined.

An alternative way to using the option is to specify the NoInlining method attribute in source code. For instance:

C#

using System.Runtime.CompilerServices;
  
  ...
 
[MethodImpl(MethodImplOptions.NoInlining)]
public void foo()

{
 // function code
  ... 
}

Microsoft Visual C++ 6.0 and Visual C++ .NET

Both Microsoft Visual C++ 6 and Microsoft Visual C++ 7 distinguish several ways, in which an inline function is specified as inline:

  • Using the inline or __inline keywords.

  • For a member function, having its body declared in the class definition.

  • Using #pragma auto_inline to tell the compiler to inline functions according to criteria of its own.

The Visual C++ compiler includes the Inline Function Expansion option that specifies which inline functions the compiler will inline. To modify this option:

  • In Visual Studio .NET 2002, 2003, Visual Studio 2005 and later:

    • Select Project > <project name> Properties from the main menu of Visual Studio. This will call the Project Properties dialog.

    • In the dialog, select the Configuration Properties > C\C++ > Optimization node from the tree on the left.

  • In Visual Studio 6.0:

    • Select Project > Settings from the main menu of Visual Studio. This will call the Project Settings dialog.

    • In the dialog, switch to the C\C++ tabbed page.

    • Select Optimizations in the Category box.

Possible values for the option are --

Value Description
Default Disables inlining. This is the simplest suitable solution for using AQTime.
Only __inline The compiler will inline functions marked with the inline or __inline directive or member functions of a class. These functions will not be available for AQTime. All other functions will be available for profiling.
Any suitable The compiler will produce inline code for all functions marked as inline as well as for any other suitable functions defined under #pragma auto_line. This is the setting most likely to cause problems, because it is not possible to predict which functions will be inlined and thus will be unavailable to AQTime.

So, in order to make all the inline functions available for profiling, we recommend to set the Inline Function Expansion option to Default.

Borland C++Builder

Borland C++Builder includes the Disable inline expansions option that lets you disable inlining. That is, if this option is on, the compiler produces standard code for all inline functions, so AQTime can profile inline functions of any kind.

To modify this option:

  • Select Project > Options from the C++Builder’s main menu. This will call the Project Options dialog.

  • Switch to the Compiler tabbed page. The Disable inline expansions option is in the Debugging section of this page.

Samples

To see how inline functions are profiled, you can use a sample application supplied with AQTime, Inline:

<AQTime Samples>\Unmanaged\Inline\VC2005  -  Microsoft Visual C++ (Visual Studio 2005 project, can also be opened and compiled in later versions of Visual Studio.)

<AQTime Samples>\Unmanaged\Inline\VC2013  -  Microsoft Visual C++ (Visual Studio 2013 project)

<AQTime Samples>\Unmanaged\Inline\BCB  -  Borland C++Builder

On Windows Vista and later, AQTime samples are located in the <Users>\Public\Documents\AQTime 8 Samples folder. On other operating systems, the samples reside in the <Documents and Settings>\All Users\Documents\AQTime 8 Samples folder.

See Also

Profiling Various Applications and Code
Disabling Inlining for the Profiled .NET Application

Highlight search results