Backed out changeset e92872971945
1 files changed, 26 insertions(+), 1 deletions(-)

M src/dmabuf_source.c
M src/dmabuf_source.c +26 -1
@@ 1,5 1,5 @@ 
 /*
- *  Copyright (C) 2019-2023 Scoopta
+ *  Copyright (C) 2019-2024 Scoopta
  *  This file is part of wlrobs
  *  wlrobs is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by

          
@@ 17,6 17,7 @@ 
 
 #include <dmabuf_source.h>
 
+#include <time.h>
 #include <fcntl.h>
 #include <dlfcn.h>
 #include <unistd.h>

          
@@ 235,6 236,8 @@ static void* create(obs_data_t* settings
 	return this;
 }
 
+static struct timespec frame_timer_start;
+
 static void _frame(void* data, struct zwlr_export_dmabuf_frame_v1* frame, uint32_t width, uint32_t height, uint32_t x, uint32_t y, uint32_t buffer_flags, uint32_t flags, uint32_t format, uint32_t mod_high, uint32_t mod_low, uint32_t obj_count) {
 	(void) x;
 	(void) y;

          
@@ 250,6 253,11 @@ static void _frame(void* data, struct zw
 	for (int i = 0; i < 4; ++i) {
 		this->next_frame->modifiers[i] = (((uint64_t) mod_high) << 32) | mod_low;
 	}
+
+	struct timespec end;
+	clock_gettime(CLOCK_MONOTONIC, &end);
+
+	printf("_frame %lu\n", (end.tv_nsec - frame_timer_start.tv_nsec) / 100000);
 }
 
 static void object(void* data, struct zwlr_export_dmabuf_frame_v1* frame, uint32_t index, int32_t fd, uint32_t size, uint32_t offset, uint32_t stride, uint32_t plane_index) {

          
@@ 260,6 268,10 @@ static void object(void* data, struct zw
 	this->next_frame->strides[index] = stride;
 	this->next_frame->offsets[index] = offset;
 	this->next_frame->plane_indices[index] = plane_index;
+
+	struct timespec end;
+	clock_gettime(CLOCK_MONOTONIC, &end);
+	printf("object %lu\n", (end.tv_nsec - frame_timer_start.tv_nsec) / 100000);
 }
 
 static void ready(void* data, struct zwlr_export_dmabuf_frame_v1* frame, uint32_t tv_sec_hi, uint32_t tv_sec_lo, uint32_t tv_nsec) {

          
@@ 293,6 305,10 @@ static void ready(void* data, struct zwl
 	this->current_frame = this->next_frame;
 	this->next_frame = NULL;
 	this->waiting = false;
+
+	struct timespec end;
+	clock_gettime(CLOCK_MONOTONIC, &end);
+	printf("ready %lu\n", (end.tv_nsec - frame_timer_start.tv_nsec) / 100000);
 }
 
 static void cancel(void* data, struct zwlr_export_dmabuf_frame_v1* frame, enum zwlr_export_dmabuf_frame_v1_cancel_reason reason) {

          
@@ 315,6 331,8 @@ static void cancel(void* data, struct zw
 		close(wlr_frame->fds[count]);
 	}
 	this->waiting = false;
+
+	printf("cancelled!!!!!!\n");
 }
 
 static struct zwlr_export_dmabuf_frame_v1_listener dmabuf_listener = {

          
@@ 332,11 350,18 @@ static void render(void* data, gs_effect
 		this->waiting = false;
 		return;
 	}
+
+	clock_gettime(CLOCK_MONOTONIC, &frame_timer_start);
 	if(!this->waiting) {
 		this->waiting = true;
 		struct zwlr_export_dmabuf_frame_v1* frame = zwlr_export_dmabuf_manager_v1_capture_output(this->dmabuf_manager, this->show_cursor, this->current_output->wl_output);
 		zwlr_export_dmabuf_frame_v1_add_listener(frame, &dmabuf_listener, this);
 	}
+
+	struct timespec end;
+	clock_gettime(CLOCK_MONOTONIC, &end);
+
+	printf("wl_rt %lu\n", (end.tv_nsec - frame_timer_start.tv_nsec) / 100000);
 	while(this->waiting && this->current_output != NULL) {
 		wl_display_roundtrip(this->wl);
 	}