We should only have to actually force a tick if we can't set up
the tick job, as the evas changed callback or a following render
from the tick job's tick will cause a flip.
Should remove a potential for a missed tick near the start of
ticking.
Similarly to commit 8b962d24ac prevent
extra flips in the drm engine.
These are potentially more harmful to DRM as they can cause frame
drops and missed render opportunities.
Small patch to allow specifying a different seat via XDG_SEAT env
variable. If no seat name is passed as ecore_evas options, then we
would always default to 'seat0'. As this may not be desirable in all
situations, allow for an override via XDG_SEAT env var.
ref T6455
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This patch adds support for doing output rotations via hardware. This
is implemented inside the Ecore_Evas engine so that it is transparent
to the caller of ecore_evas_rotation_set.
ref T5999
Signed-off-by: Chris Michael <cp.michael@samsung.com>
If we're not ticking already when a new animator is started then we have
to wait for a vblank to get a tick. That's not great.
If we can, use the time of the last vblank to generate an immediate tick
to avoid this latency.
Since the engines can call the flip functions, we need to protect the
ticker from missing those flips. Thus, we let ecore_drm2, which obviously
sees all flips, track them.
Intended to simplify the upcoming commit that merges device find and
device open into a single function that returns a device.
The fd is something callers shouldn't really need to get their hands on,
right now there are still a few places where it's needed, but those will
be gone soon too.
So vmware's graphics driver reports the MONOTONIC drm cap, yet uses
CLOCK_REALTIME instead. This leaves us with a gigantic offset between the
gpu timestamp and the times ecore_time_get() gets from CLOCK_MONOTONIC.
Since ticking screws directly with loop time this results in some long
distance clock jumping.
This commit fixes drm/gl_drm operation under vmware.
This lets us do a blocking wait for a vsync. Something we should try to
do as infrequently as possible, but in some cases we need it one time at
startup to catch graphics driver bugs.
Engines that provide their own tickers may need to be able to provide the
time of the last tick even if they weren't sending ticks to EFL at the
time.
This is a feature added during freeze as it's necessary to resolve a bug.
ref T5462
BAILing here can break animators permanently, so best to just log the
issue and move on (and potentially allow the ticker to wake us from DPMS).
ref T5462
Partially reverts a795629e8c
With atomic mode setting this has the hilarious side effect of waking
up the display from dpms.
Attempting to tick when manual render is set is likely a bug, so
log an ERR.
fix T5462
As we will now use static_libs/libdrm for building ecore_evas_drm, we
no longer need to include this bit of borrowed four_cc code from libdrm
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This is a quick and harmless hack to make sure we don't come back to a
dead compositor on a vc switch.
A proper fix will follow eventually, I promise.
Really. Would I lie?
this is still semi-broken if a seat has many pointer-ish type devices since
pointer devices in ecore-evas were never correctly implemented to be 1:1 with
seat:cursor relationships
@feature
If we are in async render and a call to rotation_set has been made,
then we should delay setting that rotation until rendering is
completed. This patch fixes that issue by setting ee->delayed.rotation
and handling it during _drm_render_updates
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Small patch to implement support for ecore_evas_screen_dpi get on the
drm canvas. This will be used in enlightenment (e_scale) to get the
screen dpi of the compositor canvas when we call e_scale_update.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Missed setting pending to true in one of the paths, this resulted in
an extra pageflip being scheduled too soon and returning EBUSY.
This was more likely to happen on slow systems, and is hopefully the last
remaining cause of render freeze on the RPI3.
As we don't compile-time link to libdrm anymore, we need to make a
call to ecore_drm2_event_handle in order to process drm events.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Add a function for ecore_evas_drm to call after a page flip happens so
ecore_drm2 can track busy status for fbs itself (including for the fb
that's currently being flipped to scanout)
Also, call the completion function from ecore_evas_drm