aboutsummaryrefslogtreecommitdiffstats
path: root/src/vulkan/overlay-layer/overlay.cpp
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2019-07-08 16:03:14 +0300
committerLionel Landwerlin <[email protected]>2019-07-09 09:13:19 +0300
commitb3a96e69ace5cf0c04a2260f4ebba826f5c74946 (patch)
tree2a3ead60472caf3d8e8d3154281c77d82fd5898b /src/vulkan/overlay-layer/overlay.cpp
parentf7f08b2d81044d7e333f2018643143db4f37d79d (diff)
vulkan/overlay: add queue present timing measurement
Signed-off-by: Lionel Landwerlin <[email protected]> Reviewed-by: Eric Engestrom <[email protected]>
Diffstat (limited to 'src/vulkan/overlay-layer/overlay.cpp')
-rw-r--r--src/vulkan/overlay-layer/overlay.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/vulkan/overlay-layer/overlay.cpp b/src/vulkan/overlay-layer/overlay.cpp
index a1fc30779f7..11896b739ef 100644
--- a/src/vulkan/overlay-layer/overlay.cpp
+++ b/src/vulkan/overlay-layer/overlay.cpp
@@ -545,6 +545,7 @@ static const char *param_unit(enum overlay_param_enabled param)
switch (param) {
case OVERLAY_PARAM_ENABLED_frame_timing:
case OVERLAY_PARAM_ENABLED_acquire_timing:
+ case OVERLAY_PARAM_ENABLED_present_timing:
return "(us)";
case OVERLAY_PARAM_ENABLED_gpu_timing:
return "(ns)";
@@ -733,6 +734,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
if (s == OVERLAY_PARAM_ENABLED_frame_timing ||
s == OVERLAY_PARAM_ENABLED_acquire_timing ||
+ s == OVERLAY_PARAM_ENABLED_present_timing ||
s == OVERLAY_PARAM_ENABLED_gpu_timing) {
double min_time = data->stats_min.stats[s] / data->time_dividor;
double max_time = data->stats_max.stats[s] / data->time_dividor;
@@ -1633,8 +1635,16 @@ static VkResult overlay_QueuePresentKHR(
pPresentInfo->pWaitSemaphores,
pPresentInfo->waitSemaphoreCount,
pPresentInfo->pImageIndices[i]);
+
+ VkPresentInfoKHR present_info = *pPresentInfo;
+ present_info.swapchainCount = 1;
+ present_info.pSwapchains = &swapchain;
+
+ uint64_t ts0 = os_time_get();
+ result = queue_data->device->vtable.QueuePresentKHR(queue, &present_info);
+ uint64_t ts1 = os_time_get();
+ swapchain_data->frame_stats.stats[OVERLAY_PARAM_ENABLED_present_timing] += ts1 - ts0;
}
- result = queue_data->device->vtable.QueuePresentKHR(queue, pPresentInfo);
} else {
for (uint32_t i = 0; i < pPresentInfo->swapchainCount; i++) {
VkSwapchainKHR swapchain = pPresentInfo->pSwapchains[i];
@@ -1658,7 +1668,10 @@ static VkResult overlay_QueuePresentKHR(
present_info.pWaitSemaphores = &draw->semaphore;
present_info.waitSemaphoreCount = 1;
+ uint64_t ts0 = os_time_get();
VkResult chain_result = queue_data->device->vtable.QueuePresentKHR(queue, &present_info);
+ uint64_t ts1 = os_time_get();
+ swapchain_data->frame_stats.stats[OVERLAY_PARAM_ENABLED_present_timing] += ts1 - ts0;
if (pPresentInfo->pResults)
pPresentInfo->pResults[i] = chain_result;
if (chain_result != VK_SUCCESS && result == VK_SUCCESS)