This project contains 4 Vulkan layers:
- Compile time layer for measuring pipeline compilation times. The output log file location can be set with the
VK_COMPILE_TIME_LOG
environment variable. - Runtime layer for measuring pipeline execution times. The output log file location can be set with the
VK_RUNTIME_LOG
environment variable. - Frame time layer for measuring time between calls to vkQueuePresentKHR, in nanoseconds. This layer can also terminate the parent Vulkan application after a given number of frames, controlled by the
VK_FRAME_TIME_EXIT_AFTER_FRAME
environment variable. The output log file location can be set with theVK_FRAME_TIME_LOG
environment variable. Benchmark start detection is controlled by theVK_FRAME_TIME_BENCHMARK_WATCH_FILE
(which file to incrementally scan) andVK_FRAME_TIME_BENCHMARK_START_STRING
(string that denotes benchmark start) environment variables. - Pipeline cache sideloading layer for supplying pipeline caches to applications that either do not use pipeline caches, or do not initialize them with the intended initial data. The pipeline cache file to load can be specified by setting the
VK_PIPELINE_CACHE_SIDELOAD_FILE
environment variable. The layer creates an implicit pipeline cache object for each device, initialized with the specified file contents, which then gets merged into application pipeline caches (if any), and makes sure that a valid pipeline cache handle is passed to every pipeline creation. This layer does not produce.csv
log files.
The results are saved as CSV files. Setting the VK_PERFORMANCE_LAYERS_EVENT_LOG_FILE
environment variable makes all layers append their events (with timestamps) to a single file.
The layers are considered experimental. We welcome contributions and suggestions for improvements; see docs/contributing.md.
The project comes with a set of simple log analysis scripts:
- analyze_frametimes.py -- processes frame time layer logs. Prints summarized results, outputs frames per second (FPS) as CSV files, and plots frame time distributions.
- plot_timeline.py -- processes event log files. Plots frames per second (FPS) and pipeline creation times. Sample output:
You can find more details in the descriptions included in each script file.
Sample build instructions:
# Checkout the submodules.
git submodule update --init
# Build and install performance layers.
mkdir -p <BUILD_DIR> ; cd <BUILD_DIR>
cmake .. \
-GNinja \
-DCMAKE_C_COMPILER=<COMPILER> \
-DCMAKE_CXX_COMPILER=<COMPILER> \
-DCMAKE_BUILD_TYPE=<CONFIGURATION> \
-DCMAKE_INSTALL_PREFIX=run \
-DVULKAN_HEADERS_INSTALL_DIR=<PATH_TO_VULKAN_HEADERS_INSTALL> \
-DVULKAN_LOADER_GENERATED_DIR=<PATH_TO_VULKAN_LOADER>/loader/generated \
&& ninja \
&& ninja install
See docker/build.Dockerfile for detailed Ubuntu build instructions.
This is not an officially supported Google product. Support and/or new releases may be limited.