Commit Graph

1897 Commits

Author SHA1 Message Date
Jean-Philippe Andre 69a684cf04 evas: Fix a few issues after init/shutdown/init
elm_suite would crash when CK_FORK=no is set, because evas was
badly initializing or shutting down. Note that elm_suite still
crashes with CK_FORK=no but valgrind doesn't complain.
2016-11-23 23:48:53 +09:00
Stefan Schmidt bb155657f4 docs: evas: fill last gaps in evas eo file documentation 2016-11-23 14:16:24 +01:00
Hermet Park e0da83ce56 efl interface: introduce efl_gfx_path mixin.
As we discussed, redesigned efl_gfx_shape mixin.
Split path properties/methods from the shape so that other classes benefit from the path.
2016-11-23 17:36:57 +09:00
Jean-Philippe Andre 3df7b717c9 evas/box: Add support for align with stacked boxes
@feature
2016-11-23 13:04:13 +09:00
Jean-Philippe Andre aac8f6f114 evas: Add function on object to check is pointer is in
This fixes invalid mouse cursor used when windows are
created.

Due to the changes in the border theme and the fact that
a border is now always created, the event region
"elm.resize.bl" contains the point (0,0) when the window
size itself is 1x1. As a consequence every EFL application
would permanently have a cursor like the resize bottom/left
handle.

This fixes that by properly checking whether the pointer is
inside an object based on the ins list, and not just the
object geometry.

@feature

See also: b735386a45
2016-11-23 13:04:12 +09:00
Carsten Haitzler 7bdcb0b8ca evas render - clean up phase 1 process to be more funcs and faster
this refactors _evas_render_phase1_object_process() into a bunch of
sub functions with leaner code, some LIKELY/UNLIKELY hints etc. etc.
in the hope that we have better l1 instruction cache use when
executing. this actually measureably helps and drops the overhead of
this func ANd all its sub functions from (in my tests in enlightenment
compositing while a video plays) from about 13.2% of all cpu usage by
e to 10%. that's about a 25% drop in cost for passing through phase 1
of evas render... and thats a good thing.

and it also makes the code nicer and more broken up.

@optimize
2016-11-22 21:07:29 +09:00
Carsten Haitzler c844d9ae3d evas render - clean up phase1 process calls a bit to pass less in
we are passing the same things into every phase 1 process func - the
same ptrs to the same arrays of objects... why eat up valuable
registers with this? collect into context struct and just pass a ptr
to that. this also makes the code easier to read and maintain too so
bonus all over. also a tiny win in performance but i'd say its "within
error margins" (go from 11.48% to 11.42% overhead).
2016-11-22 20:01:25 +09:00
Carsten Haitzler 6d92850527 evas image prepare - add disabled code to test image prepare rendering
this tests rendering of images with border scaling if they are small
(smaller than 256x256) to reduce geometry. part of testing a cpu
reduction effort in gl engine by pre-rendering primitive objects to
buffers.
2016-11-22 20:01:25 +09:00
Wonki Kim 88e1fc9613 evas: Add shutdown logic on thread creation failure
Summary:
In case of thread creation failure, shutdown logic will be stuck.
To prevent stuck, set exit variables to make thread_shutdown working
even if init fails.

Also modify init logics to return init result to a caller.

Reviewers: jypark, woohyun, cedric, jpeg

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D4411

Note (@jpeg):
I have modified the patch just a little bit.

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2016-11-22 14:50:38 +09:00
Jean-Philippe Andre 55e88423ce evas: Redraw dirty images without updates
The proper way to use the pixel_get callback and dirty flag
is to also specify which exact region has been updated
with data_update_add.

Unfortunately many apps and even GLView are relying on
invalid behaviour that forced full redraw of the image
even though data_update_add was never called.

This amends c1a080f5e4

There is no dirty flag equivalent in EO as there is no
pixel_get callback defined (yet). One problem is that the GL
API is not defined, and may prove hard to define for bindings...
2016-11-22 14:32:37 +09:00
Hermet Park 36862e13ec evas canvas: remove a complation warning - unused variable. 2016-11-21 19:40:32 +09:00
Carsten Haitzler 3857b1cde0 evas prepare - disable prepare for image objects for now
it has been working fine for me for days... but manmower reported a
seg in T4906. so disable for now until we know more. this SHOULDNT be
happening...
2016-11-19 11:02:31 +09:00
Carsten Haitzler 470478030b evas map redraw update handling - dont trigger full redraw in e menus
this fixes T4904

dif e pops up menus it uses zoomap to zoom an existing object in and
out by forcing it to be mapped and controlling the map geom based on
smart obj geom. this will do a minimum update region for the case
where a map just got turned on or off for an obj since last frame and
cut this out.

@optimize
2016-11-18 18:59:03 +09:00
Carsten Haitzler f504950597 image prepares - put in some disabled code to show how to possibly use
this is how you would possibly use prepare stages for objects like
image objects by pre-rendering them to a buffer. this is not complete
and it's actually disabled right now, but it's to show how it might be
done. some more exploring is needed, but this is to share how it
might/should work.
2016-11-17 18:41:32 +09:00
Carsten Haitzler a479745e4f evas - add a prepare stage for objects before render
preparing an object is a good idea. especially with gl. you want to do
texture uploads BEFORE using textures all in one batch. otherwise this
may mean the gl implementation has to make a copy of your data in a
tmp location then copy it in later when texture becomes "unused" as it
may be in use at the moment, or it may have to stall and wait.

i have seen somewhere around 7-10% speedups on nvidia and intel
drivers with this on given a very special test case i brewed up (1000
32x32 images where i change 1 pixel every frame). this should have
impact really when we are modifying textures a lot. this is all i've
implemented for now, but this should/would/could do much more like
re-order map, proxy renders to render FIRST in a pre-render list
instead of inline and to pre-render fbo/buffer content for complex
objects like text or textblock etc.
2016-11-17 18:41:31 +09:00
Cedric BAIL 55ab71bd67 evas: make sync and async work in the same way and not trigger empty flush/clear. 2016-11-16 11:31:04 -08:00
Jean-Philippe Andre f50b0fed13 elm/evas: Fix disappearance of window icons with CSD
After a few patches trying to fix clipping of frame or
non-frame objects the icon finally ended up invisible. Even
if the elm_icon was marked as is_frame, its internal evas
object image would not have the flag set, thus it would be
clipped out.

Solution: Propagate the is_frame flag to all smart children,
not only when setting it but also when adding new members.
A hack with the API indicates that the frame edje is a very
special object that does not propagate the flag.

See also:
7ce79be1a1
0f6c33eff1
9c9c8809a7
ac5ca9281c
2016-11-16 20:48:58 +09:00
Jean-Philippe Andre ac5ca9281c evas: Try to fix bad clipping of non-frame objects
Test cases (in WL or X with client-side decorations on):

1. elementary_test -to Animation
  Resize the window to a small size (eg, 100x100) and observe the
  balls overflowing outside the window content part. This tests
  unclipped normal objects.

2. elementary_test "Window Plug" (requires also Window Socket)
  Drag the handles outside the window, observe overflow in the
  framespace area. This tests mapped images ('can_map').

3. elementary_test -to "Gesture Layer"
  Drag a photo around. This tests non-image mapped objects.
  NOTE: This test is badly broken!

This patch fixes both of those issues. I'm not sure what I'm
breaking, though.
2016-11-16 20:48:37 +09:00
Cedric BAIL ee16c647dc evas: make sure that the documentation match the behavior by return true only when something is rendering. 2016-11-15 15:54:29 -08:00
Stefan Schmidt 16143b62b4 docs: evas_canvas: fill gaps in evas canvas eo file documentation 2016-11-15 17:45:32 +01:00
Stefan Schmidt 237ab9c681 docs: efl_gfx: fill gaps in efl_gfx eo file documentation 2016-11-15 17:45:32 +01:00
Stefan Schmidt a198c2423c docs: efl_ui: fill gaps in efl_ui eo file documentation 2016-11-15 12:00:22 +01:00
Stefan Schmidt b768a365e6 docs: evas_canvas: fill gaps in evas canvas primitives eo file documentation 2016-11-15 12:00:21 +01:00
Stefan Schmidt 1abaecc481 docs: efl_vg: fill gaps in efl vector graphics eo file documentation 2016-11-15 12:00:21 +01:00
Stefan Schmidt 212fac6c37 docs: efl_input: fill gaps in efl_input eo file documentation 2016-11-15 12:00:21 +01:00
Stefan Schmidt f04d2817d2 docs: evas3d: fill gaps in evas 3D canvas eo file documentations 2016-11-15 12:00:21 +01:00
Guilherme Iscaro 883d41f006 evas focus: Do not allow two objects focused by the same seat.
Summary:
Before focusing an object, the intercept focus callback
is called. This callback may ask Evas to focus another object
instead, so it's necessary to check if the seat in question still
have a focused object event after a efl_canvas_object_seat_focus_del() call.

Reviewers: cedric, bdilly, barbieri, ProhtMeyhet, netstar

Subscribers: cedric, jpeg

Maniphest Tasks: T4864, T4886

Differential Revision: https://phab.enlightenment.org/D4396

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2016-11-14 10:24:57 -08:00
Cedric Bail 99b327598e evas: protect against wrong request to default seat.
Enlightenment kept crashing without this patch.
2016-11-12 13:56:24 -08:00
Guilherme Iscaro 17af933ae7 Evas: Change evas_canvas_default_device_get() to property.
Reviewers: barbieri, jpeg, bdilly

Reviewed By: bdilly

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4387
2016-11-09 11:24:07 -02:00
Jean-Philippe Andre bff8dcfe21 evas: Fix clipping of masks and masks of masks
When an object inside a genlist is masked, scrolling would
cause render issues as the mask is not redrawn on move (only
the clip geometry is marked as dirty and recalculated, the
mask pixels are assumed to be well prepared already). As a
result, masked objects in a genlist would not show up
properly once you start scrolling.

This fixes that by hacking into evas a safety test to avoid
unnecessary clipping, and by using parent masks even if they
are not the direct clipper.

Note that no_render is still quite broken (eg. a no_render
mask may cause major issues, even crashes).

This reverts 5917b49f59
2016-11-09 10:52:26 +09:00
Jean-Philippe Andre f909a6d6ea evas: Fix masks of masks and clippers of clippers in general
The root cause was simple: smart object clipped was not
calling efl_super() on clip_set.

Fixes T4813 (and probably a whole lot of other bugs)
2016-11-09 10:52:03 +09:00
Guilherme Iscaro 0e53b9a8ac Evas: Add support for multiple focused objects.
Using the multi-seat support, Evas is able to handle multiple focused objects.
This implementation allows one focused object per seat.
This patch introduces new APIs and events to handle this new scenario,
while keeping compatible with the old focus APIs.
2016-11-08 17:54:34 -02:00
Guilherme Iscaro add589c1b4 Evas: Properly set the device under legacy events.
If the user did an evas_device_push(), the event will contain the
pushed device, otherwise use the default devices.
2016-11-08 17:54:34 -02:00
Guilherme Iscaro fd4f17f315 Evas Events: Properly ref the Efl_Input_Devices. 2016-11-08 17:54:34 -02:00
Guilherme Iscaro 453770137f Evas: Add the default input devices for Evas.
This will be useful when Ecore_Evas is setting up the
EFL_POINTER/KEY_EVENT struct.
2016-11-08 17:54:34 -02:00
Guilherme Iscaro cb6b049987 Efl Input Hold: Increment/Decrement the device reference. 2016-11-08 17:54:34 -02:00
Guilherme Iscaro 6d668f011c Efl Input Key: Increment/Decrement the device reference. 2016-11-08 17:54:34 -02:00
Guilherme Iscaro 059bb53bec Efl Input Pointer: Increment/decrement the device reference. 2016-11-08 17:54:34 -02:00
Jean-Philippe Andre 04e3d40ec3 evas: Fix performance issue with move
See T4749, 11b7cf6b72 introduced an issue and
e1e28ce320 fixed it but caused a massive
performance impact.

This should fix that. Thanks @zmike for the first patch.

Fixes T4840
2016-11-08 14:15:15 +09:00
Jean-Philippe Andre 0c850f67ce evas: Fix previous pointer position in output coords
This fixes the test "Window Socket" map resize.
I broke that in 40fec5f608

Makes me wonder if the previous position should be exposed
in EO as well.
2016-11-08 14:15:14 +09:00
Marcel Hollerbach b56e508224 evas: move the error listing in dbg info to the canvas image
Summary:
the canvas image is the only one presenting the load api, in all other
implementations you would only see error messages.

Reviewers: jpeg

Subscribers: cedric, raster

Differential Revision: https://phab.enlightenment.org/D4380

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2016-11-07 14:41:06 -08:00
Mike Blumenkrantz e1e28ce320 evas: restore expected behavior for rejecting move with same coords
move the check to after the intercept where it was previously

ref 11b7cf6b72

fix T4749
2016-11-07 11:03:16 -05:00
Stefan Schmidt 095c8d2484 docs: efl_input: add missing docs for efl input pointer 2016-11-07 12:07:28 +01:00
Carsten Haitzler d6ed9e048d evas render evlog - add more evlog spots to help identify issues
this adds more logging spots to provide to evlog + efl debugd so we
can identify issues much more easily
2016-11-07 11:26:22 +09:00
Carsten Haitzler f18d9d7237 remove memcmp calls for better performance where size is known
so i have been doing some profiling on my rpi3 ... and it seems
memcmp() is like the number one top used function - especially running
e in wayland compositor mode. it uses accoring to perf top about 9-15%
of samples (samples are not adding up to 100%). no - i cant seem to
get a call graph because all that happens is the whole kernel locks up
solid if i try, so i can only get the leaf node call stats. what
function was currently active at the sample time. memcmp is the
biggest by far. 2-3 times anything else.

  13.47%  libarmmem.so                [.] memcmp
   6.43%  libevas.so.1.18.99          [.] _evas_render_phase1_object_pro
   4.74%  libevas.so.1.18.99          [.] evas_render_updates_internal.c
   2.84%  libeo.so.1.18.99            [.] _eo_obj_pointer_get
   2.49%  libevas.so.1.18.99          [.] evas_render_updates_internal_l
   2.03%  libpthread-2.24.so          [.] pthread_getspecific
   1.61%  libeo.so.1.18.99            [.] efl_data_scope_get
   1.60%  libevas.so.1.18.99          [.] _evas_event_object_list_raw_in
   1.54%  libevas.so.1.18.99          [.] evas_object_smart_changed_get
   1.32%  libgcc_s.so.1               [.] __udivsi3
   1.21%  libevas.so.1.18.99          [.] evas_object_is_active
   1.14%  libc-2.24.so                [.] malloc
   0.96%  libevas.so.1.18.99          [.] evas_render_mapped
   0.85%  libeo.so.1.18.99            [.] efl_isa

yeah. it's perf. it's sampling so not 100% accurate, but close to
"good enough" for the bigger stuff. so interestingly memcmp() is
actually in a special library/module (libarmmem.so) and is a REAL
function call. so doing memcmp's for small bits of memory ESPECIALLY
when we know their size in advance is not great. i am not sure our own
use of memcmp() is the actual culprit because even with this patch
memcmp still is right up there. we use it for stringshare which is
harder to remove as stringshare has variable sized memory blobs to
compare.

but the point remains - memcmp() is an ACTUAL function call. even on
x86 (i checked the assembly). and replacing it with a static inline
custom comparer is better. in fact i did that and benchmarked it as a
sample case for eina_tiler which has 4 ints (16 bytes) to compare
every time. i also compiled to assembly on x86 to inspect and make sure
things made sense.

the text color compare was just comparing 4 bytes as a color (an int
worth) which was silly to use memcmp on as it could just cast to an
int and do a == b. the map was a little more evil as it was 2 ptrs
plus 2 bitfields, but the way bitfields work means i can assume the
last byte is both bitfields combined. i can be a little more evil for
the rect tests as 4 ints compared is the same as comparing 2 long
longs (64bit types). yes. don't get pedantic. all platforms efl works
on work this way and this is a base assumption in efl and it's true
everywhere worth talking about.

yes - i tried __int128 too. it was not faster on x86 anyway and can't
compile on armv7. in my speed tests on x86-64, comparing 2 rects by
casting to a struct of 2 long long's and comparing just those is 70%
faster than comapring 4 ints. and the 2 long longs is 360% faster than
a memcmp. on arm (my rpi3) the long long is 12% faster than the 4 ints,
and it is 226% faster than a memcmp().

it'd be best if we didnt even have to compare at all, but with these
algorithms we do, so doing it faster is better.

we probably should nuke all the memcmp's we have that are not of large
bits of memory or variable sized bits of memory.

i set breakpoints for memcmp and found at least a chunk in efl. but
also it seems the vc4 driver was also doing it too. i have no idea how
much memory it was doing this to and it may ultimately be the biggest
culprit here, BUT we may as well reduce our overhead since i've found
this anyway. less "false positives" when hunting problems.

why am i doing this? i'm setting framerate hiccups. eg like we drop 3,
5 or 10 frames, then drop another bunch, then go back to smooth, then
this hiccup again. finding out WHAT is causing that hiccup is hard. i
can only SEE the hiccups on my rpi3 - not on x86. i am not so sure
it's cpufreq bouncing about as i've locked cpu to 600mhz and it still
happens. it's something else. maybe something we are polling? maybe
it's something in our drm/kms backend? maybe its in the vc4 drivers or
kernel parts? i have no idea. trying to hunt this is hard, but this is
important as this is something that possibly is affecting everyone but
other hw is fast enough to hide it...

in the meantime find and optimize what i find along the way.

@optimize
2016-11-06 13:13:10 +09:00
Stefan Schmidt f742c8488c docs: efl_ui*: add docs for interfaces and events 2016-11-04 12:28:11 +01:00
Mykyta Biliavskyi 132bac98c8 Evas events: fix for works with pipes on windows.
Evil implementation of pipe() function uses sockets. Windows functions
"write", "read" and "close" doesn't works with sockets. In this commit
added macros, that replace "read" with "recv", "write" with "send" and
"close" with "closesocket".

@fix
2016-11-04 11:06:11 +02:00
Daniel Kolesa 4fa4be2b14 evas_textgrid: remove pointers 2016-11-03 17:13:30 +01:00
Daniel Kolesa df47f92236 evas_box: remove pointers 2016-11-03 17:13:00 +01:00
Daniel Kolesa 713df88b66 efl_canvas_output: remove pointer 2016-11-03 17:10:40 +01:00