On Tue, 19 Sep 2017 14:59:11 +0300 Alexandros Frantzis <alexandros.frant...@collabora.com> wrote:
> Use EGL fence sync objects to emit timepoints for the beginning and the > end of rendering on the GPU. The timepoints are emitted asynchronously > using the sync file fds associated with the fence sync objects. The sync > file fds are acquired using the facilities provided by the > EGL_ANDROID_native_fence_sync extension. > > The asynchronous timepoint submissions are stored in a list in > gl_output_state until they are executed, and any pending submissions > that remain at output destruction time are cleaned up. > > If timelining is inactive or the required EGL extensions are not > present, then GPU timepoint processing and emission are skipped. > > Note that the GPU timestamps returned by sync files are in the > CLOCK_MONOTONIC clock domain, and are thus compatible with the > timeline timestamps (which also are in the CLOCK_MONOTONIC domain). > > Signed-off-by: Alexandros Frantzis <alexandros.frant...@collabora.com> > --- > > Changes in v2: > - Added Signed-off-by. > - Used fallback sync_file.h header if required. > - Improved error checking. > - Used enum timeline_render_point_type instead of int. > - Stored pending timeline submissions in a list in gl_output_state. > - Renamed various struct and function to improve consistency and clarity. > - Added fallbacks for newly used EGL definitions. > - Added log messages for render gpu related warnings. > > libweston/gl-renderer.c | 162 > ++++++++++++++++++++++++++++++++++++++++++++++++ > shared/weston-egl-ext.h | 12 ++++ > 2 files changed, 174 insertions(+) Hi, patches 1, 2 and 4 are: Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Furthermore, patch 4 was already previously reviewed by Daniel on the sync bits: https://lists.freedesktop.org/archives/wayland-devel/2017-September/035031.html I do have a few minor adjustments for this patch below that I have already done privately. > > diff --git a/libweston/gl-renderer.c b/libweston/gl-renderer.c > index c2e88a65..62a36205 100644 > --- a/libweston/gl-renderer.c > +++ b/libweston/gl-renderer.c > @@ -39,6 +39,16 @@ > #include <assert.h> > #include <linux/input.h> > #include <drm_fourcc.h> > +#include <unistd.h> > +#include <sys/ioctl.h> > + > +#ifdef HAVE_LINUX_SYNC_FILE configure.ac generates this for me: /* Define to 1 if you have the <linux/sync_file.h> header file. */ /* #undef HAVE_LINUX_SYNC_FILE_H */ So I think it's missing the _H. I can fix that. > +#include <linux/sync_file.h> > +#else > +#include "weston-sync-file.h" > +#endif > + > +#include "timeline.h" > > #include "gl-renderer.h" > #include "vertex-clipping.h" > @@ -47,6 +57,7 @@ > > #include "shared/helpers.h" > #include "shared/platform.h" > +#include "shared/timespec-util.h" > #include "weston-egl-ext.h" > > struct gl_shader { > @@ -87,6 +98,8 @@ struct gl_output_state { > enum gl_border_status border_status; > > struct weston_matrix output_matrix; > + > + struct wl_list timeline_render_point_list; We usually have a comment saying which struct and link field are stored in this list. > }; > > enum buffer_type { > @@ -238,6 +251,20 @@ struct gl_renderer { > PFNEGLDUPNATIVEFENCEFDANDROIDPROC dup_native_fence_fd; > }; > > +enum timeline_render_point_type { > + TIMELINE_RENDER_POINT_TYPE_BEGIN, > + TIMELINE_RENDER_POINT_TYPE_END > +}; > + > +struct timeline_render_point { > + struct wl_list link; We often have a comment saying which list the link is being used for. > + > + enum timeline_render_point_type type; > + int fd; > + struct weston_output *output; > + struct wl_event_source *event_source; > +}; > + > static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL; > > static inline const char * > @@ -274,6 +301,115 @@ get_renderer(struct weston_compositor *ec) > return (struct gl_renderer *)ec->renderer; > } > > +static int > +linux_sync_file_read_timestamp(int fd, uint64_t *ts) > +{ > + struct sync_file_info file_info = { 0 }; > + struct sync_fence_info fence_info = { 0 }; For me, these generate compiler warnings. /home/pq/git/weston/libweston/gl-renderer.c: In function ‘linux_sync_file_read_timestamp’: /home/pq/git/weston/libweston/gl-renderer.c:307:9: warning: missing braces around initializer [-Wmissing-braces] struct sync_file_info file_info = { 0 }; ^ /home/pq/git/weston/libweston/gl-renderer.c:307:9: warning: (near initialization for ‘file_info.name’) [-Wmissing-braces] /home/pq/git/weston/libweston/gl-renderer.c:308:9: warning: missing braces around initializer [-Wmissing-braces] struct sync_fence_info fence_info = { 0 }; ^ I suppose it's a gcc version thing, looks like I'm still on 4.9.3. I think just dropping the zero there is enough to fix it. I can do that when merging the patches. > + > + assert(ts != NULL); > + > + file_info.sync_fence_info = (uint64_t)(uintptr_t)&fence_info; > + file_info.num_fences = 1; > + > + if (ioctl(fd, SYNC_IOC_FILE_INFO, &file_info) < 0) > + return -1; > + > + *ts = fence_info.timestamp_ns; > + > + return 0; > +} Thanks, pq
pgp3quWMMNA3w.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel