mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-18 06:47:31 -04:00
hack: measure timings
This commit is contained in:
parent
fee8969955
commit
2c0fdb7e65
2 changed files with 34 additions and 0 deletions
|
|
@ -317,6 +317,7 @@ struct wlr_vk_upload_task {
|
||||||
uint32_t src_stride, dst_size;
|
uint32_t src_stride, dst_size;
|
||||||
pixman_region32_t region;
|
pixman_region32_t region;
|
||||||
const struct wlr_pixel_format_info *format_info;
|
const struct wlr_pixel_format_info *format_info;
|
||||||
|
int64_t start;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wlr_vk_pipeline *setup_get_or_create_pipeline(
|
struct wlr_vk_pipeline *setup_get_or_create_pipeline(
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@
|
||||||
#include "render/pixel_format.h"
|
#include "render/pixel_format.h"
|
||||||
#include "render/vulkan.h"
|
#include "render/vulkan.h"
|
||||||
|
|
||||||
|
#include "util/time.h"
|
||||||
|
|
||||||
static const struct wlr_texture_impl texture_impl;
|
static const struct wlr_texture_impl texture_impl;
|
||||||
|
|
||||||
bool wlr_texture_is_vk(struct wlr_texture *wlr_texture) {
|
bool wlr_texture_is_vk(struct wlr_texture *wlr_texture) {
|
||||||
|
|
@ -110,9 +112,17 @@ static bool write_upload_task(const struct wlr_vk_upload_task *task, int fd) {
|
||||||
|
|
||||||
static void process_upload_task(struct wlr_vk_renderer *renderer,
|
static void process_upload_task(struct wlr_vk_renderer *renderer,
|
||||||
struct wlr_vk_upload_task *task) {
|
struct wlr_vk_upload_task *task) {
|
||||||
|
struct timespec ts;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
int64_t start = timespec_to_nsec(&ts);
|
||||||
|
|
||||||
copy_pixels(task->dst, task->src, task->buffer->width, task->src_stride,
|
copy_pixels(task->dst, task->src, task->buffer->width, task->src_stride,
|
||||||
task->dst_size, &task->region, task->format_info);
|
task->dst_size, &task->region, task->format_info);
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
int64_t dur_ns = timespec_to_nsec(&ts) - start;
|
||||||
|
wlr_log(WLR_INFO, "UPLOAD: %f ms", (double)dur_ns / 1000 / 1000);
|
||||||
|
|
||||||
VkSemaphoreSignalInfoKHR signal_info = {
|
VkSemaphoreSignalInfoKHR signal_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR,
|
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR,
|
||||||
.semaphore = renderer->upload_timeline_semaphore,
|
.semaphore = renderer->upload_timeline_semaphore,
|
||||||
|
|
@ -147,6 +157,11 @@ static void handle_upload_task_complete(struct wlr_vk_renderer *renderer,
|
||||||
wlr_buffer_end_data_ptr_access(task->buffer);
|
wlr_buffer_end_data_ptr_access(task->buffer);
|
||||||
wlr_buffer_unlock(task->buffer);
|
wlr_buffer_unlock(task->buffer);
|
||||||
pixman_region32_fini(&task->region);
|
pixman_region32_fini(&task->region);
|
||||||
|
|
||||||
|
struct timespec ts;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
int64_t dur_ns = timespec_to_nsec(&ts) - task->start;
|
||||||
|
wlr_log(WLR_INFO, "TOTAL: %f ms", (double)dur_ns / 1000 / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int handle_upload_fd_event(int fd, uint32_t mask, void *data) {
|
static int handle_upload_fd_event(int fd, uint32_t mask, void *data) {
|
||||||
|
|
@ -218,6 +233,10 @@ static bool start_upload(struct wlr_vk_texture *texture, struct wlr_buffer *buff
|
||||||
VkAccessFlags src_access) {
|
VkAccessFlags src_access) {
|
||||||
struct wlr_vk_renderer *renderer = texture->renderer;
|
struct wlr_vk_renderer *renderer = texture->renderer;
|
||||||
|
|
||||||
|
struct timespec ts;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
int64_t start = timespec_to_nsec(&ts);
|
||||||
|
|
||||||
const struct wlr_pixel_format_info *format_info = drm_get_pixel_format_info(texture->format->drm);
|
const struct wlr_pixel_format_info *format_info = drm_get_pixel_format_info(texture->format->drm);
|
||||||
assert(format_info);
|
assert(format_info);
|
||||||
|
|
||||||
|
|
@ -292,13 +311,22 @@ static bool start_upload(struct wlr_vk_texture *texture, struct wlr_buffer *buff
|
||||||
.src_stride = stride,
|
.src_stride = stride,
|
||||||
.dst_size = bsize,
|
.dst_size = bsize,
|
||||||
.format_info = format_info,
|
.format_info = format_info,
|
||||||
|
.start = start,
|
||||||
};
|
};
|
||||||
pixman_region32_init(&task.region);
|
pixman_region32_init(&task.region);
|
||||||
pixman_region32_copy(&task.region, region);
|
pixman_region32_copy(&task.region, region);
|
||||||
|
#if 1
|
||||||
if (!write_upload_task(&task, renderer->upload.control_fd)) {
|
if (!write_upload_task(&task, renderer->upload.control_fd)) {
|
||||||
free(copies);
|
free(copies);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
process_upload_task(renderer, &task);
|
||||||
|
handle_upload_task_complete(renderer, &task);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
start = timespec_to_nsec(&ts);
|
||||||
|
|
||||||
// record staging cb
|
// record staging cb
|
||||||
// will be executed before next frame
|
// will be executed before next frame
|
||||||
|
|
@ -308,6 +336,10 @@ static bool start_upload(struct wlr_vk_texture *texture, struct wlr_buffer *buff
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
int64_t dur_ns = timespec_to_nsec(&ts) - start;
|
||||||
|
wlr_log(WLR_INFO, "STARTUP: %f ms", (double)dur_ns / 1000 / 1000);
|
||||||
|
|
||||||
vulkan_change_layout(cb, texture->image,
|
vulkan_change_layout(cb, texture->image,
|
||||||
old_layout, src_stage, src_access,
|
old_layout, src_stage, src_access,
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
|
|
@ -315,6 +347,7 @@ static bool start_upload(struct wlr_vk_texture *texture, struct wlr_buffer *buff
|
||||||
|
|
||||||
vkCmdCopyBufferToImage(cb, span.buffer->buffer, texture->image,
|
vkCmdCopyBufferToImage(cb, span.buffer->buffer, texture->image,
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, (uint32_t)rects_len, copies);
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, (uint32_t)rects_len, copies);
|
||||||
|
|
||||||
vulkan_change_layout(cb, texture->image,
|
vulkan_change_layout(cb, texture->image,
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue