This function should be used internally by the input system
(Ecore_Evas_Input) to feed Evas with move events. The x,y event info is
relative to the base of the window/surface, instead of the 0,0 of the
canvas.
This case only happens for now under Wayland, where the 0,0 of the
canvas is translated due to the window decorations that are drawn by the
client.
- pack active flag and generation nbr in an _Eo_Id_Entry struct
- replace Eina_Trash with a fifo which lives in mmaped memory owned by eo_id.
- fifo uses indexes instead of pointers to spare memory
- never used entries are served first, then those in the fifo
are reused, thus we ensure that a freed entry won't soon be reused.
num size.. and alloc size is much bigger as it makes room for 1024
quads per alloc increase (6*1024 vertexes etc.). literally this drops
e17's cpu usage while compositing stuff by 40%...at least in my test
case.
If Ecore_Evas is requested to draw its own frame, then set the
framespace too. Otherwise, keep it at 0,0 + 0x0, which means not
framespace offset at all (and the window will have exactly the
requested size).
Also remove the Classes section from the Ecore_Audio_Group, we don't
need it as the pages are linked automatically
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
We want to introduce a new mechanism concerning the data of the Eo
objects.
The goal is to improve the memory management by defragmenting the memory
banks used by the Eo objects. The first phase has been done by raster
and consists in allocating the objects into a separate memory region
that the one used by malloc. So now, we know where our objects are
located.
Now, moving objects means moving data of objects. The issue we have here
is that a lot of data pointers are stored into data of other objects,
e.g Evas Object data into lists for rendering...
We need a way to reference the data and eo_data_get doesn't provide us
that. So we need to improve the API for data extraction by requesting
from the developer if the data will be stored or not. Five functions are
supplied:
- eo_data_scope_get: no referencing, the data pointer is no more used after
exiting the function.
- eo_data_ref: reference the data of the object. It means that while the
data is referenced, the object cannot be moved.
- eo_data_xref: reference the data of the object but for debug purpose,
we associate the objects that references. Same behavior as eo_data_ref
for non-debug.
- eo_data_unref: unreference the data of an object.
- eo_data_xunref: unreference the data of an object previously
referenced by another object.
I deprecated the eo_data_get function. Most of the time,
eo_data_scope_get needs to be used.
In the next patches, I changed the eo_data_get to the corresponding
functions, according to the usage of the data pointer.
The next step is to find all the places in the code where the data is
stored but not yet referenced. This will be done by:
- requesting from every object to unreference all data to other objects.
- moving all the objects from one region to another
- requesting from every object to rerefenrence the data.
- debugging by hunting the segmentation faults and other weird
creatures.
This reverts commit 809144780e.
Conflicts:
src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Since we don't have a changed state callback on Wayland, just call the
changed_state callback of Ecore_Evas from the configure callback.
There's no need to add the Ecore_Job that will send the event later.
This makes the code cleaner, simpler, and will call the callback when
the configure event is received, which is a good place to check for the
changes.
Reduce duplicated code in ecore_evas_wl_resize and just call the
_common_resize function
Fix segfault on elm app closing
Signed-off-by: Chris Michael <cp.michael@samsung.com>
In the window_configure callback, reduce duplicated/not needed code.
Account for rotation when getting new size during common_rotation_set.
Reduce duplicated code in ecore_evas_wl_resize function and just call
the _common_resize function (as that already has most of this code).
Fix issue of Segfault on elm app closing:
- During hide we need to call evas_sync to make sure the async
render has flushed out everything that is pending.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
not needed.
During buffer_attach, just call window_damage function which already
handles surface_damage & commit.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
when async_render).
NB: If buffer is still valid, that means compositor is not finished
with it yet, so don't release it.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Start on code to setup the output buffer.
Add code to init evas_common functions
Add override for engine setup.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
The framespace offset must be taken into account when searching the list
of objects which received events, since the objects now have their
original position.
Instead of moving the objects by adding the framespace offset to them,
use this offset when rendering them. This way there's no change in the
object's geometry/position, it works correctly with map, and will be
automatically updated in case that the framespace values change (for
instance if one sets a window to borderless).
There are 2 main places where changes were needed:
- output redraws, when they come from an object being changed, must be
add the framespace offset to their damaged area;
- checks to see if the object is inside a given rendering area, must
also add this offset, since the object is actually being rendered on
a different position;
Buffer data (in this instance) is from the swapper (ie: the creation
of the swapper allocates & mmaps the data). As such, we should not
unmap it when we free buffer(s), just when we free the swapper.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
calling evas cache image data.
When we push an updated region, be sure to account for the rectangle
position during the conversion function.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
use of an array of the below struct instead of 3 separate arrays
leads to better cache performance and smaller memory usage
typedef struct
{
_Eo *ptr;
unsigned int active : 1;
unsigned int generation : BITS_FOR_GENERATION_COUNTER;
} _Eo_Id_Entry;
ecore_audio_obj_out now also supports VIO. Add attribute need_writer so
we can generalize the idler creation for subclasses at a later time.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
* The idler for the write callback is now in the output struct because
different outputs might need it.
* Remove paused attribute from output - we have it in Ecore_Audio_Object
already
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
The VIO wrapper functions are needed from the sndfile inputs and outputs
so move them to a separate file and access from both.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
Using pa_stream_write_begin we can just request a buffer to write into
This reduces the amount of calloc()/free() and memcpy calls.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
Now, Evas.h includes three new files:
- Evas_Eo.h: Eo API functions (functions defines, enums, base id).
- Evas_Legacy.h: contains the API functions related to objects
- Evas_Common.h: common data (structs, enums...) +
functions not related to objects.
This phase is needed for the EFL 1.8 release to disable Eo APIs if we
consider it is not enough mature to be used by applications.
When the window is rotated, the logical pointer position is calculated
based on the window size (width or height) minus the current position,
depending on the rotation used. For wayland, we must add the window
decorations to the ecore_evas size, when doing this calculation.
Now, Edje.h includes three new files:
- Edje_Eo.h: Eo API functions (functions defines, enums, base id).
- Edje_Legacy.h: contains the API functions related to objects
- Edje_Common.h: common data (structs, enums...) + functions not related to
objects.
This phase is needed for the EFL 1.8 release to disable Eo APIs if we
consider it is not enough mature to be used by applications.
Finally have a way to compile the merged efl tree against the latest tizen
things. Only three typos after all this changes it quite good imho. Zero
would have been better though. :)
This clipper caused several bugs already, and there are some bugs still
not fixed. Let's remove it and try to fix any remaining with some other
kind of solution that does not depend on adding or clipping objects
during the evas render phase, which causes unexpected behavior.
Add 4 rectangles to be used as border of the window, instead of a single
rectangle under the framespace. This allows to move the frame object to
the top layer, instead of staying on the lowest layer. With the frame
over the other objects, there's no need of framespace clipper object,
which causes several bugs.
input_attach, input_detach, format_set, and source_set now return an
Eina_Bool
Tests, examples and edje_multisense adapted
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
Now, Ecore.h includes three new files:
- Ecore_Eo.h: Eo API functions (functions defines, enums, base id).
- Ecore_Legacy.h: contains the API functions related to objects
- Ecore_Common.h: common data (structs, enums...) + functions not
related to objects.
This phase is needed for the EFL 1.8 release to disable Eo APIs if we
consider it is not enough mature to be used by applications.
Summary: This feature replaces Eo pointers with ids to prevent bad usage
or reuse of these pointers. It doesn't change API.
The mechanism uses tables storing the real pointers to the objects.
See the src/lib/eo/eo_ptr_indirection.c file for more details on the
mechanism.
This follows the simplified handling of sensor object we are already
doing for the sync paths. Its a bit more complicated here as we need
to pass all data through the module specific async handling. But the
result should be the same.
Now instead of having ifdefs in the .c files we just don't compile the
ones we don't need. Much cleaner.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
We rely on the app to provide a sensible object pointer and we now longer
need to have a copy of the object around to operate on it.
Simplifies code, maintenance and reduces mem copies. Win-Win :)
The frame should not stay in the same layer as the other objects. If the
application wants to allow it to be on top of the content, then it must
provide a custom frame object and set it to that layer.
NOTE: Should we make Elementary's be on a lower layer too?
These objects should be clipped only during rendering, since keeping
them clipped after that allows for unexpected behavior on the
application side. For instance, an application could check if objects
have clippers before doing something to them, assuming that some objects
should have no clipper, but under wayland, after the first render
iteration, there will be no objects without a clipper.
This commit fixes this behavior by unclipping objects that had no
clipper prior to the render iteration.
Additionally, it fixes a bug where a maximized/fullscreen window could
have not all of its content rendered immediately. This was occuring
because some objects could be clipped to the framespace clipper, but
considered invisible in the beginning of the render phase, where they
are evaluated. They were considered invisible because the framespace
clipper object was not resized at that phase yet, and thus these objects
were being clipped out from the viewport.
In case of short reads just make sure that playback is started
immediately. No need to drain just yet as that just causes issues with
delayed removals of streams.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
A protected read function must now be implemented by the child class to
perform the actual reading.
Signals on playback loop and end are sent.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
(udev registered it as fake)... and in the process i found that we
probably double free as sensor is calloced in the module and AGAIN in
eeze sensor core... oh and symbols probably might lak from modules..
so static them up yo.
Because of the way eo is dispatching method calls of objects the usual
error log you get if you mix up objects or try to call non-existent
methods is:
ERR<12404>:eo lib/eo/eo.c:362 _eo_dov_internal() Can't find func for op
0x24 (ecore_audio_obj_in:ECORE_AUDIO_OBJ_IN_SUB_ID_SPEED_GET) for class
'ecore_audio_obj_out_pulse'. Aborting.
Of course the problem is not really in lib/eo/eo.c, but in the function
calling eo_do()
Now the macros pass source file and line number on to the _internal
functions so we can log where the error originally happened:
ERR<1938>:eo lib/eo/eo.c:362 _eo_dov_internal() in
lib/ecore_audio/ecore_audio_obj_out_pulse.c:119: Can't find func for op
0x24 (ecore_audio_obj_in:ECORE_AUDIO_OBJ_IN_SUB_ID_SPEED_GET) for class
'ecore_audio_obj_out_pulse'. Aborting.
This makes debugging with eo a lot easier.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
Eina value type does not support pointer so I used int as of now.
This needs to be converted into hexa later.
By using Clouseau, one can see this Clipper information.
- re-enabling split BiDi cursor tests, disabled in 0d68ffbe;
ligatures tests are still disabled;
- change "fail_if" to "ck_assert_int_*",
because it prints error message with values;
- fixing usage of embedding LTR/RTL codes in tests;
Signed-off-by: Yakov Goldberg <yakov.g@samsung.com>
Switch from absolut microseconds since epoch to a monotonic clock with
realtive values. Switch from unsigned long long to double.
This aligns it with how we present time in efl. ecore_time_get is used
when possible. For the tizen modules we convert the the epoch timestamp
we get into a double. This is still a working monotone clock source.
As this will be released the first time with 1.8 we don't have any API
break here.
Together with eeze_sensor_module_register/unregister these are the functions
that are irrelevant for developer when they just want to use the eeze_sensor
API.
Still all three need to be marked with EAPI as they are used in the backend
modules and due to our visibility hidden usage the module loading would fail
if we remove EAPI from them.
Moving them into the private header should give an indication that these are
not meant for pure API users.
These functions let you pass an array of callbacks instead of just one.
It's more memory efficient to use this if you just add a bulk of events
on the same object.
This commits breaks ABI, and breaks API of the EO_EV_CALLBACK_ADD/DEL
signals (the event info passed).
Eeze sensor and Tizen types can't be in sync as the order have been changed
several times in Tizen already. We need to keep the order stable for ABI
compliance though after 1.8.
While we did the translation in one direction we did not in the other. Fix
this bug that shows now.
We use the typedef everywhere else. This makes sure we also use it
in the struct to avoid any confusion. The API is new for upcoming
1.8 release so no problem in changing it now.
It's implemented exactly the same way as on the X11 backend. It does
handle multiple devices, though may need some adjustments when
multi-touch is added, since there's no support for multi-touch on
EFL-wayland yet.
Some of tests fail on e5-jenkins-slave-x86_64-1.
Tests seem right and pass locally,
but not on the server.
Signed-off-by: Yakov Goldberg <yakov.g@samsung.com>
If logical cursor is between LTR/RTL text two cursors will be shown.
Upper cursor is shown for the text of the same direction as
paragraph, lower cursor - for opposite.
NOT DONE YET
Signed-off-by: Tom 'TAsn' Hacohen <tom@stosb.com>
The wl_display_sync() request doesn't really wait for all the requests
to be processed, but instead sends a request for the "done" event.
Wayland relies on the fact that the requests are processed in order, so
when the "done" event is received, it means that all the other requests
requested prior to the respective "sync" have been processed already.
This commit makes the ecore_wl_sync() call actually wait for its "done"
event (thus blocking the ecore mainloop).