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;
|
||||
pixman_region32_t region;
|
||||
const struct wlr_pixel_format_info *format_info;
|
||||
int64_t start;
|
||||
};
|
||||
|
||||
struct wlr_vk_pipeline *setup_get_or_create_pipeline(
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
#include "render/pixel_format.h"
|
||||
#include "render/vulkan.h"
|
||||
|
||||
#include "util/time.h"
|
||||
|
||||
static const struct wlr_texture_impl texture_impl;
|
||||
|
||||
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,
|
||||
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,
|
||||
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 = {
|
||||
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR,
|
||||
.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_unlock(task->buffer);
|
||||
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) {
|
||||
|
|
@ -218,6 +233,10 @@ static bool start_upload(struct wlr_vk_texture *texture, struct wlr_buffer *buff
|
|||
VkAccessFlags src_access) {
|
||||
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);
|
||||
assert(format_info);
|
||||
|
||||
|
|
@ -292,13 +311,22 @@ static bool start_upload(struct wlr_vk_texture *texture, struct wlr_buffer *buff
|
|||
.src_stride = stride,
|
||||
.dst_size = bsize,
|
||||
.format_info = format_info,
|
||||
.start = start,
|
||||
};
|
||||
pixman_region32_init(&task.region);
|
||||
pixman_region32_copy(&task.region, region);
|
||||
#if 1
|
||||
if (!write_upload_task(&task, renderer->upload.control_fd)) {
|
||||
free(copies);
|
||||
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
|
||||
// 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;
|
||||
}
|
||||
|
||||
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,
|
||||
old_layout, src_stage, src_access,
|
||||
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,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, (uint32_t)rects_len, copies);
|
||||
|
||||
vulkan_change_layout(cb, texture->image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue