This is for now just a small experiment. It was based on the experiment made
with OpenMP. I prefered to only use Eina here as we have already all the infrastructure
to do this nicely and simply. As a result I get a 65% speed improved on average for
the involved scaling operation. The secondary CPU is on my laptop running with a load of
75% percent. I don't have right now the time to do power consumption analysis, but I
think it shouldn't be to bad. I am also not throwing more core at this as we are not able
to use the second core at its max already, so additional core may result in a bigger
energy loss without enough gain.
Summary: add a block "position" to fill the position field for nodes.
Reviewers: raster, Hermet, cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1977
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Martin reported a porblem with one of the SHR project edc files after an upgrade
to 1.13. The segfault itself is easy enough to fix here but I think there might
be other problems with the edc after this segfault is gone. We will see.
Fixes T2106
Summary:
I have added some methods to edje_cc_out.c to organize model lookups. The same methods already exists for images.
Also, I have removed source_type because now we don't need it in efl_file_set.
@feature
Reviewers: raster, Hermet, cedric
Reviewed By: cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1886
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Amitesh Singh fixed this issue with Commit
e66e132d9d, but this commit has been reverted
recently, by a commit freeing ressources
(6d0b834a76). It's clear that we are leaking here
if we remove the free, but there is also a valgrind error when this memory is
freed. After trying to debug and understand the code of epp, i can only
propose to remove this free, we will need to include a lot of files before this
memory leak could be visible.
It is also not a real problem, the memory leak only concern the file name passed
in the include directive and epp is started per file anyway. It is unlikely to
create any real life problem and we better spend our time on more pressing matter.
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
It is easy to create edj collections that aren't working at all and
edje_cc easily allows user to do that.
For example:
> Having group A with GROUP part that has group B as source.
> Having group B with GROUP part that has group A as source.
In this case edje_cc compile source code perfectly, but if user try to load
this edje as layout or use together with edje_edit it will cause unexpacted
and wrong behaviour.
@fix
Reviewers: seoz, Hermet, reutskiy.v.v, cedric
Reviewed By: cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1908
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Updated the code for the "inheritance helper" functions and classes
to be in conformance with the new wrapper architecture.
Member variable "parents" of efl::eo::eo_class struct was split in two
member variables, "ancestors" and "parents", the former containing all
Eo class ancestors and the later only the direct bases.
Changed all required files accordingly.
Check to avoid using biding string when the parameter is @out now matches
any variation of "char".
Add default constructor to efl::eo::concrete in order to allow it to be
NULL initialized in the "inheritance helper" classes.
Removed conflicting parent_set member function in the efl::eo::inherit
class.
Removed the "inheritance_extension_function" generator since it is no
longer used.
Solved diamond inheritance problem by completely removing inheritance in
the abstract class.
All ancestors are inherited directly in the concrete class.
The algorithm that list the ancestors also avoid repetition.
Now concrete classes define methods too. This helps referring the correct
method directly by the object type (when there are methods with the same
name).
Moved the declaration and definition of constructor methods to the concrete
class, since they should not be used in derived classes.
Updated example that call "color_set".
With this model, if two ancestor classes have a method with the same name,
to call one of them from a derived class you must write the scoped name of
the member function in the wrapper.
In this case, either Evas.Object and Evas.SmartObject have a property
named "color".
Added "from_global" option to the full_name grammar too.
Using a new architecture in the generated files that simplify multiple
inheritance and allows the use of interface types as parameters.
No longer using a hand-crafted C++ header for eo_base.eo.
This file was added to the generation process.
Updated all files that are dependent in the hand-crafted eo_base
C++ header.
Now there is a class that contains the essentials functions of the former
eo::base wrapper and that is used to create (through inheritance) the
"concrete" classes for all Eo generated wrappers.
No longer binding any function or property that are protected, private or
legacy for now.
eolian_type_instance is now a struct with general information for the
whole type.
Added the new header file namespace_generator.hh to hold namespace
generation grammars.
Separated declaration and definition of Eo wrappers methods.
Referring for most objects by its full name (starting at the global
namespace ::) in the generated files.
Created additional helper grammars to avoid code replication.
Removed a TODO comment referring to a doubt about inheritance of
constructor methods.
Added a TODO comment regarding memory allocation for callbacks in static
member functions.
No longer reverting to the native type when the parameter has "@out"
direction.
Added "is_out" member variable to eolian_type class.
With that, generators can keep track of the direction of the parameters.
Also added helper functions "type_is_out" and "type_is_complex".
Created "to_native" functions in eo_cxx_interop.hh to convert binding types
from C++ arguments to the actual C function arguments.
Added static assertions in these functions to enforce compatibility
between the binding and the native type (Required by @out parameters).
Reworked the overload of the "to_c" function for eo::base derivated
objects. Now there is a overload that rely in the compatibility
between the native type and the wrapper, enabling a wrapper to be used as
an output parameter.
In convert.cc: Reading functions instead of implements to convert the
Eolian_Class. It avoids creation of methods that do not belong to the
class, in special it avoids calling the default constructor twice in the
generated code.
No longer generating one constructor in the C++ wrapper for each eolian
class constructor, since the correct behavior demands that all constructor
should be called. Now the wrappers have "constructor methods" that
must be called when creating a new object.
Updated test cases and examples to match the new interface. Some class
constructors and some test cases have to be removed since they were based
on the wrong assumption that constructors are mutually exclusive.
Created new generators for forwarding parameters and for looping over
the relevant parameters to the C++ wrapper executing a generic lambda.
Added a TODO comment regarding the call of constructor methods of all
base classes. Currently there is no base type with constructors, so this
situation should be discussed more.
Added a TODO comment regarding the way callback parameters are being
processed.
Summary:
Variable include_defaults can be allocated and
go out of scope without freeing it.
Reviewers: cedric, seoz, woohyun, Hermet
Reviewed By: Hermet
Differential Revision: https://phab.enlightenment.org/D1784
Summary:
While going through the code, I found this. Thought this was just a redundant and fixed it.
@fix
Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>
Reviewers: devilhorns
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1774
Summary:
The name was freed after exit, so freeing it before and also freeing in a error case. There was a return statement after exit, thought it was redundant and removed.
@fix
Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>
Reviewers: devilhorns, cedric
Reviewed By: cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1758
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
In the end we should call eina_shutdown, but by mistake eina_init is being called. So have corrected that.
@fix
Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>
Reviewers: devilhorns
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1751
This is not perfect at the moment, as the decoded output might change
drastically in some cases, however this is still useful for the other cases.
Anyway, we should fix the eet decoding to have a consistent order, so this
will be more useful.
@feature.
thjis was deprecated even before efl 1.0 by never removed. lua
replaced it for script_only objects and you havent been able to
compile an edje file with script_only enabled since 1.0, so no point
having the code here.
this cleans up that code and cruft.
If eldbus_message_arguments_append we would never unref the message.
This will fix various Coverity issues in generatd eldbus code.
@fix
CID: 1255634, 1255636, 1255637, 1255639
Whenever you tried using a propset function from code generated with
eldbus-codegen it would segfault as we never set the callback function but
passed in data instead.
@fix
Set the min, max sizes of the image automatically,
if it uses image set and there's no setting about min, max sizes.
This idea is originated by Jinsol Park.
@feature
This unbreaks parallel builds where an elua process tries to read a bytecode
file that is currently being written. Now, we write into a temporary file first
instead and when it's written, rename.
@fix
Instead, check if there is a file specified by the argument to elua and
if there is, execute it, otherwise treat it as app name. The reason this
is done is that the colon triggered ugly stuff in certain environments,
such as our MinGW crossbuild Jenkins slave.
@fix
Summary:
On OSX, libraries are generated as .dylib instead of .so. This led elua to
try loading missing libraries, and therefore crashing.
@fix
Reviewers: cedric, q66
Reviewed By: q66
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1642
This allows us to get rid of the LD_LIBRARY_PATH hack and thus make it more
cross-plaform as well as fix some bad behavior (with the hack it still looked
up the systemwide library if present instead of preferring in-tree)
There are still lots of unsafe uses of strcpy, strcat, etc...
Dunno if they are relevant though. Also, assert() may be
compiled out at build time (release mode) so don't rely on it
for safety.
Fixes CID 1039593
NOTE: I do believe their is still the possibility that a wrong program
or part may reference a dead part. Would require to check that scenario
better later.
Someone fixed a CID without looking of the full use path a data, resulting
in a value being used after free and stored in edje file. Leading to a garbage
string with no meaning for those poor externals.
Summary:
This reverts commit f6eb1f17a1.
This will result into failure of edc compilation with recursive use of include.
Reviewers: cedric, raster, seoz
Reviewed By: seoz
Subscribers: chinmaya061, cedric, seoz
Differential Revision: https://phab.enlightenment.org/D1475
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
The pointer used is not freed at the end of the function which
results resource leak.
@fix
Test Plan: Not Available
Reviewers: seoz, raster, cedric
Reviewed By: cedric
Subscribers: raster, seoz, cedric
Differential Revision: https://phab.enlightenment.org/D1438
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Local and base class functions are supported.
When @empty is provided, dummy functions (initializing the parameters with default
values if needed) are generated.
When @auto is provided on properties, access to internal data variables is done. On
set, it will assign parameters values to private data members. On get,
parameters are set with private data members values.
See the supplied tests as examples.
@feature
As the implements list will soon contain all methods and properties,
do some preparations. The Eolian library now fills in class field in
implements early on when the implement is local. The Eolian C generator
now checks for local implements and skips them (so that things don't break).
This is needed when get properties or methods have to return a
value in case of failure or to initialize parameters.
The way used is to generate an intermediate function that will
initialize the parameters and then invoke the "user" function.
Because of Eina_Value being less than optimal in our usage, we're dropping it in Eolian.
This simplifies the code and makes it easier to bind to other languages, which
will aid new generators. Also, we're dropping long double support from eo files
and expressions as it causes an ABI breakage in gcc 4.4.
This change adds a new API to retrieve the legacy prefix for enum members
and also adds support for generating enums into the C generator. Besides that,
it prevents generation of entire struct contents when the .eo file declares
a named struct inside of a typedef - as the struct itself gets generated later on.
This commit also does several side (related) changes. Particularly, it updates
the Eolian C generator to use the new API, it adds missing expr types (null, char)
and masks, updates the API dealing with default return values to use expressions
instead of strings and does several fixes (mainly in lexer) around the place.
It also disallows single quoted strings as those are reserved for characters.
so the test suites were useless because they didn't ecompile what was
generated. it was missing a ) at the end of calling eo_do_super to
start with. it was missing a call to do_uper fo destructors too. also
it didnt deal with the #include "blah.eo.c" at the file end either so
it produced uncompilable src at the start. again - also fix. this also
fixes test case comparisons to match the now correct generation that
compiles.
Summary:
wrong structure, a Edje_Image_Directory_Set_Entry, used for copy
a set's data to new file.
@fix
Reviewers: raster, seoz, cedric, Hermet
Reviewed By: Hermet
Subscribers: Sachiel, cedric, seoz
Differential Revision: https://phab.enlightenment.org/D1304
Also fixed some incorrect @context
Changed the @edcsubsection tags so they live in first line of the doccomment, this way you can read them when the file is folded-closed, improving the code readability.
Summary:
This dpi is used to get the scale for each collection.
If each collection has a described dpi, it calculates a proper scale
based on the dpi and dpi which is described in the collection.
@feature
Test Plan:
If add dpi to collection of edc, the edje will save the value as the dpi of the collection.
For example, if the dpi of your device is 100, you just set dpi: 100 in the collection of edc.
If the edj is loaded in another device(dpi is 200), it will scaled 2 times.
It is possible that the described dpi of application and theme are different.
In that case, application and theme have a different scale.
It makes the edj that made in different environment works in one device.
Reviewers: seoz, zmike, JackDanielZ, Hermet, woohyun, cedric, raster
Reviewed By: raster
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1190
Whenever a getter explicitly defines a void return the generated code
shall not convert single-parameter getters in any ways.
Actually the correct approach would be to delegate all conversions to
Eolian Database instead of for the generators.