|
|
@@ -23,47 +23,73 @@ All interactions with the CMake instrumentation API must specify both an API
|
|
|
version and a Data version. At this time, there is only one version for each of
|
|
|
these: the `API v1`_ and `Data v1`_.
|
|
|
|
|
|
-When instrumentation is enabled, CMake sets the :prop_gbl:`RULE_LAUNCH_COMPILE`,
|
|
|
-:prop_gbl:`RULE_LAUNCH_LINK` and :prop_gbl:`RULE_LAUNCH_CUSTOM` global properties
|
|
|
-to use the ``ctest --instrument`` launcher. Whenever a command is executed with
|
|
|
+Data Collection
|
|
|
+---------------
|
|
|
+
|
|
|
+Whenever a command is executed with
|
|
|
instrumentation enabled, a `v1 Snippet File`_ is created in the project build
|
|
|
-tree. If the project has been configured with :module:`CTestUseLaunchers`,
|
|
|
+tree with data specific to that command. These files remain until after
|
|
|
+`Indexing`_ occurs.
|
|
|
+
|
|
|
+CMake sets the :prop_gbl:`RULE_LAUNCH_COMPILE`, :prop_gbl:`RULE_LAUNCH_LINK` and
|
|
|
+:prop_gbl:`RULE_LAUNCH_CUSTOM` global properties to use the
|
|
|
+``ctest --instrument`` launcher in order to capture details of each compile, link
|
|
|
+and custom command respectively. If the project has been configured with :module:`CTestUseLaunchers`,
|
|
|
``ctest --instrument`` will also include the behavior usually performed by
|
|
|
``ctest --launch``.
|
|
|
|
|
|
-Hooks are specific intervals, configured as part of the `v1 Query Files`_,
|
|
|
-during which snippet data files are coallated. Whenever a hook executes, an
|
|
|
-index file is generated containing a list of snippet files newer than the
|
|
|
-previous indexing, and a sequence of custom callbacks are executed using
|
|
|
-the index file as an argument.
|
|
|
+Indexing
|
|
|
+--------
|
|
|
+
|
|
|
+Indexing is the process of collating generated instrumentation data. Indexing
|
|
|
+occurs at specific intervals called hooks, such as after every build. These
|
|
|
+hooks are configured as part of the `v1 Query Files`_. Whenever a hook is
|
|
|
+triggered, an index file is generated containing a list of snippet files newer
|
|
|
+than the previous indexing.
|
|
|
|
|
|
-Indexing and callbacks can also be performed by manually invoking
|
|
|
+Indexing and can also be performed by manually invoking
|
|
|
``ctest --collect-instrumentation``.
|
|
|
|
|
|
+Callbacks
|
|
|
+---------
|
|
|
+
|
|
|
+As part of the `v1 Query Files`_, users can provide a list of callbacks
|
|
|
+intended to handle data collected by this feature.
|
|
|
+
|
|
|
+Whenever `Indexing`_ occurs, each provided callback is executed, passing the
|
|
|
+path to the generated index file as an argument.
|
|
|
+
|
|
|
These callbacks, defined either at the user-level or project-level should read
|
|
|
the instrumentation data and perform any desired handling of it. The index file
|
|
|
and its listed snippets are automatically deleted by CMake once all callbacks
|
|
|
-have completed.
|
|
|
+have completed. Note that a callback should never move or delete these data
|
|
|
+files manually as they may be needed by other callbacks.
|
|
|
|
|
|
-Configuring Instrumentation at the User-Level
|
|
|
+Enabling Instrumentation
|
|
|
+========================
|
|
|
+
|
|
|
+Instrumentation can be enabled either for an individual CMake project, or
|
|
|
+for all CMake projects configured and built by a user. For both cases,
|
|
|
+see the `v1 Query Files`_ for details on configuring this feature.
|
|
|
+
|
|
|
+Enabling Instrumentation at the Project-Level
|
|
|
---------------------------------------------
|
|
|
|
|
|
-Instrumentation can be configured at the user-level by placing query files in the
|
|
|
-:envvar:`CMAKE_CONFIG_DIR` under
|
|
|
-``<config_dir>/instrumentation/<version>/query/``. This version of CMake
|
|
|
-supports only one version schema, `API v1`_.
|
|
|
+Project code can contain instrumentation queries with the
|
|
|
+:command:`cmake_instrumentation` command.
|
|
|
|
|
|
-Configuring Instrumentation at the Project-Level
|
|
|
-------------------------------------------------
|
|
|
+In addition, query files can be placed manually under
|
|
|
+``<build>/.cmake/instrumentation/<version>/query/`` at the top of a build tree.
|
|
|
+This version of CMake supports only one version schema, `API v1`_.
|
|
|
|
|
|
-Configuring Instrumentation at the project level can be done by placing query
|
|
|
-files under ``<build>/.cmake/instrumentation/query/`` at the top of a build
|
|
|
-tree.
|
|
|
+Enabling Instrumentation at the User-Level
|
|
|
+------------------------------------------
|
|
|
|
|
|
-Additionally, project code can contain instrumentation queries with the
|
|
|
-:command:`cmake_instrumentation` command.
|
|
|
+Instrumentation can be configured at the user-level by placing query files in
|
|
|
+the :envvar:`CMAKE_CONFIG_DIR` under
|
|
|
+``<config_dir>/instrumentation/<version>/query/``.
|
|
|
|
|
|
-.. _`cmake-instrumentation v1`:
|
|
|
+.. _`cmake-instrumentation API v1`:
|
|
|
|
|
|
API v1
|
|
|
======
|
|
|
@@ -89,7 +115,8 @@ subdirectories:
|
|
|
|
|
|
``data/``
|
|
|
Holds instrumentation data collected on the project. CMake owns all data
|
|
|
- files, they should never be removed by other processes.
|
|
|
+ files, they should never be removed by other processes. Data collected here
|
|
|
+ remains until after `Indexing`_ occurs and all `Callbacks`_ are executed.
|
|
|
|
|
|
.. _`cmake-instrumentation v1 Query Files`:
|
|
|
|
|
|
@@ -99,21 +126,22 @@ v1 Query Files
|
|
|
Any file with the ``.json`` extension under the ``instrumentation/v1/query/``
|
|
|
directory is recognized as a query for instrumentation data.
|
|
|
|
|
|
-These files must contain a JSON object with the following keys which are all
|
|
|
-optional.
|
|
|
+These files must contain a JSON object with the following keys. The ``version``
|
|
|
+key is required, but all other fields are optional.
|
|
|
|
|
|
``version``
|
|
|
The Data version of snippet file to generate, an integer. Currently the only
|
|
|
supported version is ``1``.
|
|
|
|
|
|
``callbacks``
|
|
|
- A list of command-line strings for callbacks to handle collected timing
|
|
|
- data. Whenever these callbacks are executed, the full path to a
|
|
|
- `v1 Index File`_ is appended to the arguments included in the string.
|
|
|
+ A list of command-line strings for `Callbacks`_ to handle collected
|
|
|
+ instrumentation data. Whenever these callbacks are executed, the full path to
|
|
|
+ a `v1 Index File`_ is appended to the arguments included in the string.
|
|
|
|
|
|
``hooks``
|
|
|
- A list of strings specifying when instrumentation data should be collated
|
|
|
- and user callbacks should be invoked on the data. Elements in this list
|
|
|
+ A list of strings specifying when `Indexing`_ should occur automatically.
|
|
|
+ These are the intervals when instrumentation data should be collated and user
|
|
|
+ `Callbacks`_ should be invoked to handle the data. Elements in this list
|
|
|
should be one of the following:
|
|
|
|
|
|
* ``postGenerate``
|
|
|
@@ -129,20 +157,20 @@ optional.
|
|
|
instrumentation. Elements in this list should be one of the following:
|
|
|
|
|
|
``staticSystemInformation``
|
|
|
- Enables collection of the static information about the host machine
|
|
|
- CMake is being run from. This data is collected once at each hook and
|
|
|
- included in the generated ``index-<has>.json`` file.
|
|
|
+ Enables collection of the static information about the host machine CMake
|
|
|
+ is being run from. This data is collected during `Indexing`_ and is
|
|
|
+ included in the generated `v1 Index File`_.
|
|
|
|
|
|
``dynamicSystemInformation``
|
|
|
Enables collection of the dynamic information about the host machine
|
|
|
- CMake is being run from. Data is collected for every snippet file
|
|
|
- generated by CMake, with data immediately before and after the command is
|
|
|
- executed.
|
|
|
+ CMake is being run from. Data is collected for every `v1 Snippet File`_
|
|
|
+ generated by CMake, and includes information from immediately before and
|
|
|
+ after the command is executed.
|
|
|
|
|
|
The ``callbacks`` listed will be invoked during the specified hooks
|
|
|
-*at a minimum*. When there are multiple queries, the ``callbacks``, ``hooks``
|
|
|
-and ``queries`` between them will be merged. Therefore, if any query file
|
|
|
-includes any ``hooks``, every ``callback`` across all query files will be
|
|
|
+*at a minimum*. When there are multiple query files, the ``callbacks``,
|
|
|
+``hooks`` and ``queries`` between them will be merged. Therefore, if any query
|
|
|
+file includes any ``hooks``, every ``callback`` across all query files will be
|
|
|
executed at every ``hook`` across all query files. Additionally, if any query
|
|
|
file includes any optional ``queries``, the optional query data will be present
|
|
|
in all data files.
|
|
|
@@ -179,14 +207,16 @@ each snippet file listed in the index will contain the
|
|
|
file and all snippet files listed by it will be deleted from the project build
|
|
|
tree.
|
|
|
|
|
|
+.. _`cmake-instrumentation Data v1`:
|
|
|
+
|
|
|
Data v1
|
|
|
=======
|
|
|
|
|
|
Data version specifies the contents of the output files generated by the CMake
|
|
|
-instrumentation API. There are two types of data files generated. When using
|
|
|
-the `API v1`_, these files live in ``<build>/.cmake/instrumentation/v1/data/``
|
|
|
-under the project build tree. These are the `v1 Snippet File`_ and
|
|
|
-`v1 Index File`_.
|
|
|
+instrumentation API as part of the `Data Collection`_ and `Indexing`_. There are
|
|
|
+two types of data files generated: the `v1 Snippet File`_ and `v1 Index File`_.
|
|
|
+When using the `API v1`_, these files live in
|
|
|
+``<build>/.cmake/instrumentation/v1/data/`` under the project build tree.
|
|
|
|
|
|
v1 Snippet File
|
|
|
---------------
|
|
|
@@ -202,6 +232,9 @@ the command executed. Additionally, snippet files are created for the following:
|
|
|
* Each ``ctest`` invocation
|
|
|
* Each individual test executed by ``ctest``.
|
|
|
|
|
|
+These files remain in the build tree until after `Indexing`_ occurs and any
|
|
|
+user-specified `Callbacks`_ are executed.
|
|
|
+
|
|
|
Snippet files have a filename with the syntax ``<role>-<timestamp>-<hash>.json``
|
|
|
and contain the following data:
|
|
|
|
|
|
@@ -251,7 +284,8 @@ and contain the following data:
|
|
|
|
|
|
``outputSizes``
|
|
|
The size(s) in bytes of the ``outputs``, an array. For files which do not
|
|
|
- exist, the size is 0.
|
|
|
+ exist, the size is 0. Included under the same conditions as the ``outputs``
|
|
|
+ field.
|
|
|
|
|
|
``source``
|
|
|
The source file being compiled. Only included when ``role`` is ``compile``.
|
|
|
@@ -271,7 +305,7 @@ and contain the following data:
|
|
|
Specifies the dynamic information collected about the host machine
|
|
|
CMake is being run from. Data is collected for every snippet file
|
|
|
generated by CMake, with data immediately before and after the command is
|
|
|
- executed.
|
|
|
+ executed. Only included when enabled by the `v1 Query Files`_.
|
|
|
|
|
|
``beforeHostMemoryUsed``
|
|
|
The Host Memory Used in KiB at ``timeStart``.
|
|
|
@@ -315,7 +349,8 @@ v1 Index File
|
|
|
-------------
|
|
|
|
|
|
Index files contain a list of `v1 Snippet File`_. It serves as an entry point
|
|
|
-for navigating the instrumentation data.
|
|
|
+for navigating the instrumentation data. They are generated whenever `Indexing`_
|
|
|
+occurs and deleted after any user-specified `Callbacks`_ are executed.
|
|
|
|
|
|
``version``
|
|
|
The Data version of the index file, an integer. Currently the version is
|
|
|
@@ -340,8 +375,7 @@ for navigating the instrumentation data.
|
|
|
|
|
|
``staticSystemInformation``
|
|
|
Specifies the static information collected about the host machine
|
|
|
- CMake is being run from. This data is collected once at each hook and
|
|
|
- included in the generated ``index-<has>.json`` file.
|
|
|
+ CMake is being run from. Only included when enabled by the `v1 Query Files`_.
|
|
|
|
|
|
* ``OSName``
|
|
|
* ``OSPlatform``
|