Hi Carsten,
Follow your advice, i change to use drm method and the image tearing issue is 
fixed now, but i met new issue that,  the application layer can not receive the 
KEY/BUTTON UP and DOWN events any more.
 _ecore_fb_li_device_event_key() in ecore_fb_li.c can received the event, but 
in application layer i use function 
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, keyDownCB, cardstack); The 
callback function will not be called.


Please help to advise how fix this issue, many thanks.

At 2019-09-28 01:34:32, "Carsten Haitzler" <ras...@rasterman.com> wrote:
>On Fri, 27 Sep 2019 13:42:09 +0800 (CST) Jing  <chenjing...@126.com> said:
>
>> Hi Carsten,
>> 
>> 
>> Thanks for your reply. You are saying "drm can be vsynced and tear-free even
>> if  it is configured without gl-drm", right?
>
>drm is separate to gl_drm. drm is software rendered but with display target of
>drm/kms. gl_drm is opengl rendered with a display target of drm/kms. kms allows
>for tear-free vsynced display of buffers direct to "the framebuffer" (not
>fbcon which is the old single front-buffered kernel fb display).
>
>> But from source code in src/modules/ecore_evas/engines/drm/ecore_evas_drm.c,
>> it seems only enabling vsync with option BUILD_ECORE_EVAS_GL_DRM,  how can we
>> build efl to enable vsync without gl-drm package:
>
>drm/kms vsync by design. google "kernel mode switching" :) just try it...
>
>> #ifdef BUILD_ECORE_EVAS_GL_DRM
>>    if (tinfo && gl)
>>      {
>>         char *num;
>>         Evas_Engine_Info_GL_Drm *einfo = tinfo;
>> 
>>         einfo->info.vsync = EINA_TRUE;
>> 
>>         num = getenv("EVAS_DRM_VSYNC");
>>         if ((num) && (!atoi(num)))
>>           einfo->info.vsync = EINA_FALSE;
>> 
>>         einfo->info.dev = edata->dev;
>>         einfo->info.bpp = edata->bpp;
>>         einfo->info.depth = edata->depth;
>>         einfo->info.format = edata->format;
>>         einfo->info.rotation = ee->rotation;
>>         einfo->info.output = edata->output;
>>         if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
>>           {
>>              ERR("evas_engine_info_set() for engine '%s' failed", 
>> ee->driver);
>>              goto eng_err;
>>           }
>>      }
>>    else
>> #endif
>> 
>> 
>> Looking forward to your reply, thanks.
>> 
>> At 2019-09-23 22:13:11, "Carsten Haitzler" <ras...@rasterman.com> wrote:
>> >On Mon, 23 Sep 2019 14:02:09 +0800 (CST) Jing  <chenjing...@126.com> said:
>> >
>> >> Hi Carsten,
>> >> Thanks for your reply.  Correction: Actually, we didn't use X11 and only
>> >> use frame buffer,  based on our flash and memory performance considering,
>> >> we are using a light configuration, here is our configuration for your
>> >> reference. Our system do support basic drm, but vsync needs gl_drm(we
>> >> didn't have gl accelerate),  do you have any simple option to avoid tear
>> >> issue or implemented a simple ping pong buffer mechanism.
>> >
>> >there's gl_drm that needs gl accel an also just drm which is software
>> >rendered, but uses kms/drm to display buffers. this will be vsynced and
>> >tear-free. the fb backend will tear because of the reasons i already gave in
>> >the previous mail. :)
>> >
>> >> --with-tests=none --disable-systemd --disable-doc --disable-cxx-bindings
>> >> --enable-fb --disable-cocoa --disable-poppler --disable-spectre
>> >> --disable-libraw --disable-xcf --disable-libmount --disable-audio
>> >> --disable-avahi --disable-pulseaudio --disable-xinput2 --disable-xim
>> >> --disable-scim --disable-ibus --disable-elua --without-glib 
>> >> --with-x11=none
>> >> --with-opengl=none --without-x --without-mount --without-umount
>> >> --without-eject --disable-image-loader-bmp --disable-image-loader-dds
>> >> --disable-image-loader-tgv --disable-image-loader-xpm
>> >> --disable-image-loader-webp --disable-image-loader-wbmp
>> >> --disable-image-loader-tiff --disable-image-loader-tga
>> >> --disable-image-loader-psd --disable-image-loader-pmaps
>> >> --disable-image-loader-jp2k --disable-image-loader-ico
>> >> --disable-image-loader-gif --disable-gstreamer1 --disable-xinput22
>> >> --disable-librsvg --disable-vg-loader-svg --disable-vg-loader-eet
>> >> --with-crypto=none --disable-doc --disable-v4l2 --disable-libvlc
>> >> --with-net-control=none --disable-libeeze --disable-gesture
>> >> --disable-xpresent --disable-cserve --disable-always-build-examples
>> >> --with-profile=dev --disable-physics --disable-valgrind
>> >> --disable-quick-launch
>> >> 
>> >> 
>> >> Looking forward to your reply, thanks.
>> >> 
>> >> At 2019-09-21 15:53:12, "Carsten Haitzler" <ras...@rasterman.com> wrote:
>> >> >On Sat, 21 Sep 2019 13:47:40 +0800 (CST) Jing  <chenjing...@126.com> 
>> >> >said:
>> >> >
>> >> >> I use efl-1.21.1(define the image/rect in edc file) to develop in linux
>> >> >> environment.  Using X11 and framebuffer. Looking forward to your reply,
>> >> >> thanks.
>> >> >
>> >> >what framebuffer engine/rendering path? in x11 what rendering engine? 
>> >> >what
>> >> >windowmanager/compositor?
>> >> >
>> >> >tl;dr; short version: this stuff is complicated and crosses lots of
>> >> >software boundaries (protocols, kernel vs xserver vs client vs multiple
>> >> >toolkits vs compositor etc.). i'll cover some of those details below s
>> >> >you didn't tell me everything above.
>> >> >
>> >> >if you are using the fb engine for framebuffer rendering, then it has no
>> >> >vsync or double buffering support. it's built on the old /dev/fb 
>> >> >interface
>> >> >and mmaps the existing fb and renders to cpu local memory then copies
>> >> >stuff to the framebuffer. thus it will tear at times. that's life with
>> >> >fbcon as it doesn't have buffer swapping semantics (it could allocated
>> >> >double-height buffers and do panning... but it still has no ability to
>> >> >explicitly vsync this so will still lead to tearing). that's why there is
>> >> >a drm engine... thus sues drm/kms as the framebuffer interface which does
>> >> >have swapping/atomic/vsync semantics and will then not tear. this is the
>> >> >engine that e uses as a wayland compositor (well drm or gl_drm depending
>> >> >if you have gl accel on or not).
>> >> >
>> >> >with software rendering in x11, no mechanism exists to explicitly avoid
>> >> >tearing for clients  (ignoring the double buffer extension in x which
>> >> >doesn't actually provide SWAPPING mechanics and leads to worse 
>> >> >performance
>> >> >anyway. it at best does copies from the backbuffer to the window... - i
>> >> >can go into gory details if you want).
>> >> >
>> >> >if you have no compositor in x then rendering goes straight to the
>> >> >frontbuffer framebuffer. by that i mean the update regions once filled by
>> >> >the cpu in shared memory are COPIED over to the window which lives in the
>> >> >framebuffer. if it's composited then these regions are copied to the
>> >> >pixmap that represents the window and the compositor will, at some point
>> >> >after that render that pixmap to its own backbuffer and swap and the
>> >> >compositor itself may also tear in its presenting to the screen depending
>> >> >on the compositor you have. i have seen compiz (the compositor ubuntu has
>> >> >used for unity) EXPLICITLY do copies to the front buffer to try to do
>> >> >partial update rendering to reduce rendering amount BUT at the expense of
>> >> >always tearing. that's why i asked.
>> >> >
>> >> >efl/e only does this in the software path - with the gl path we always
>> >> >buffer swap and request vsynced swaps if asked (tear-free0 for the
>> >> >compositor. we can't do anything about the client rendering, but if
>> >> >clients use gl as well and do swaps then they have a chance of the x
>> >> >implementation doing proper buffer swaps (not copies) from the gl
>> >> >backbuffer to the composited target pixmap (exchange the buffers if sizes
>> >> >match). again - depends on your compositor/wm and how it may reparent
>> >> >windows and do frame draws. e doesn't draw frames via x when compositing
>> >> >but does it in-compositor making the client pixmap an exact 1:! of the
>> >> >client window with frame drawn around it only in the compositing step.
>> >> >other wm's compositors may reparent and raw frame inside the parent
>> >> >window, thus forcing x to copy to the composited pixmap, thus tearing...
>> >> >
>> >> >wayland avoids this by using CSD (client side decorations) and being an
>> >> >explicit buffer presentation protocol, thus being designed from the
>> >> >ground up to avoid tearing as long s e everyone does everything right.
>> >> >tearing in x is "part of life".
>> >> >
>> >> >if you have the right compositor you can reduce tearing but it will ever
>> >> >go away in x. in theory i could have designed a private x11 display
>> >> >protocol between efl and e and literally do what wayland does - present
>> >> >whole pixmaps with update/damage region metadata via x client messages
>> >> >and have the x compositor render them without tearing but it'd be then
>> >> >only for efl apps using software rendering in enlightenment and nowhere
>> >> >else. this would still result in extra copies if e is also software
>> >> >rendering as a compositor and i'd have to actually do a private shm
>> >> >buffer sharing scheme between efl clients and x... and even then the
>> >> >compositor itself will still tear as there is no way for a software
>> >> >rendering compositor to ensure it gets to atomically present an updated
>> >> >render buffer in x11 ... unless we move to gl. :)
>> >> >
>> >> >> At 2019-09-20 20:55:53, "Carsten Haitzler (The Rasterman)"
>> >> >> <ras...@rasterman.com> wrote:
>> >> >> >On Fri, 20 Sep 2019 18:48:14 +0800 (CST) Jing <chenjing...@126.com>
>> >> >> >said:
>> >> >> >
>> >> >> >> Hi all,
>> >> >> >> 
>> >> >> >> 
>> >> >> >> I met a problem that when i slide the screen(mouse move), the edge 
>> >> >> >> of
>> >> >> >> the image or rectangle object will tear( appear jagged, see my
>> >> >> >> attached snapshot). I have set various values with
>> >> >> >> ecore_animator_frametime_set, but there is no improvement. What can
>> >> >> >> I do to fix this issue?  Please help, thanks a lot.
>> >> >> >
>> >> >> >what environment? x? wayland? what is rendering the object? what kind
>> >> >> >of environment?
>> >> >> >
>> >> >> >-- 
>> >> >> >------------- Codito, ergo sum - "I code, therefore I am"
>> >> >> >-------------- Carsten Haitzler - ras...@rasterman.com
>> >> >> 
>> >> >> _______________________________________________
>> >> >> enlightenment-devel mailing list
>> >> >> enlightenment-devel@lists.sourceforge.net
>> >> >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>> >> >
>> >> >
>> >> >-- 
>> >> >------------- Codito, ergo sum - "I code, therefore I am" --------------
>> >> >Carsten Haitzler - ras...@rasterman.com
>> >
>> >
>> >-- 
>> >------------- Codito, ergo sum - "I code, therefore I am" --------------
>> >Carsten Haitzler - ras...@rasterman.com
>> 
>> _______________________________________________
>> enlightenment-devel mailing list
>> enlightenment-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
>
>-- 
>------------- Codito, ergo sum - "I code, therefore I am" --------------
>Carsten Haitzler - ras...@rasterman.com

_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to