Summary:
A crash could happen on a bad call to free() context_dup() returns a
newly malloc'ed context if passed NULL (this seems dubious to me, why
not calloc?).
@fix
Test Plan:
Add an empty efl.ui.text object
Set markup text as "<gfx_filter='code'>Hello</>"
Reviewers: cedric, segfaultxavi, Jaehyun, herdsman, zmike
Reviewed By: zmike
Subscribers: zmike, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7368
So far, vg shapes had been rendered regardless of its visibility.
Recently, I pushed a patch - fa1420965dd264fc8836d133a3215b94e423b8bf
not to render nodes which is invisible. This occurred a side effect
because previous vg implementations didn't take care of nodes visiblity.
It means, though vg users didn't make nodes visible but nodes were
rendered in unintended way.
This is a sort of compatibility problem but I can't let vg users
to change their nodes visible by calling visible set api explicity.
Instead, I'm gonna change the nodes visibility default value to true
so that skiping invisible nodes and compatibility issue as well.
the reason for using dependency here is that meson *sometimes* uses
dependency as a wrapper arround finding a dependency, this is usefull if
a known target is having different library names on different OSs. On
macos the cc.find_library was causing errors, since the library is not
called GL there.
This fixes the macos build.
Cleaned up the case when null parent is coming.
and found out efl_data_scope_get() could return invalid data
when invalid CLASS type is given. it's handled as well.
Summary:
Here is an additional optmization patch for removing
unnecessary updation of path,
For instance, let's assume this scenario:
If one vg object has 20 path nodes(shapes),
and every single nodes would have 50 path changes.
(like, append_cubic, append_rect, append_xxx ...);
There would 1000 events triggering.
Furthermore, if there are 20 vector objects in one view,
hese events would be triggered 20000 in one frame.
It's insane, actually I could figured out that happens.
and it took a lot of cpu consumption in some vector usages.
efl_gfx_path_commit() is my idea to avoid this.
When path is ready, the path need to get this api call in the last
to make object changed properly.
@feature
Reviewers: #committers, cedric
Reviewed By: #committers, cedric
Subscribers: segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7494
Summary:
assumtion: textblock A has the clipper rect B.
1. evas_render_updates_internal start
: evas_object_clip_dirty_do( rect B)
: evas_object_textblock_render_pre( textblock A)
- if textlock A's o->redraw is EINA_TRUE (o->changed=1 is also same case)
- textblock A's vis 1->0
- clipper rect B lose the chance to call render_pre function.
- clipper rect B's evas_render_mapped function is not called
: pending_change(Rect B)
- obj->pre_render_done = 0, so rect cannot be get the change to call evas_object_change_reset
when rect b remained the pending list and changed value is EINA_TRUE, it cause textblock's rendering problem
Reviewers: raster, Hermet, kimcinoo
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7512
Summary:
Here is an additional optmization patch for removing
unnecessary updation of path,
For instance, let's assume this scenario:
If one vg object has 20 path nodes(shapes),
and every single nodes would have 50 path changes.
(like, append_cubic, append_rect, append_xxx ...);
There would 1000 events triggering.
Furthermore, if there are 20 vector objects in one view,
hese events would be triggered 20000 in one frame.
It's insane, actually I could figured out that happens.
and it took a lot of cpu consumption in some vector usages.
efl_gfx_path_commit() is my idea to avoid this.
When path is ready, the path need to get this api call in the last
to make object changed properly.
@feature
Reviewers: #committers, cedric
Subscribers: segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7494
Dectected huge amount of unnecessray internal events triggering
which were signaled via vg nodes.
By events, nodes were connected with each others,
and finally reaches to vg object to update its rendering properly.
However GFX_PATH_CHANGE signal is too commonly triggered for scenarios,
listening and response it is too burdensome.
We acutally don't need to do this if all nodes could share the
vg object. Nodes directly notify vg object to update it.
Next patch will come to remove stupid GFX_PATH_CHANGE that's aweful
in performance wise.
Summary:
If Efl.Canvas.Surface is changed from mixin to abstract, then its sub
classes do not need to inherit from Efl.Object to be a class.
Moreover, Efl.Canvas.Surface's data can be derived to its sub classes
easily.
Reviewers: jpeg, segfaultxavi, woohyun, Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7411
We want to pretend they're just not there at this point since the
hardware is responsible for drawing them.
Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7198
If only objects on planes change, we don't see any damage for the main
buffer, so a page flip never occurs and the plane doesn't update. For
now forcing a tiny damage area is the easy way to work around this.
Also force a pixels get callback for enlightenment's surface frame
callback tracking.
Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7196
When we move an object into or off of a plane, we need the scene to be
rendered as if the object wasn't there. This adds apprpopriate damage
to make that happen.
Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7195
Put this at the start of render so we can remove stuff on planes from
the scene graph entirely. This stops us from drawing the entire object
underneat the plane.
Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7194
This is used to check if an object has been put on or removed from a
hardware plane between calls.
Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7192
so evas cpu used to be the thing then eina cpu came and did the same
and evas cpu optionalyl could lsit on top... just move it all to eina
cpu so one central place does this and evas_cpu is purely a compat
wrapper.
This implementation uses Ector_Buffer to generate mask image from vg container,
and pass it to Ector engine. Ector renderer could blend this image as a mask.
Yet only vg container works as a mask, we could extend shape to support masking later.
Still vector gl drawing is not completed, We use software ector buffer to draw on it.
This is on progessing.
There was a big trouble that vg cache didn't free cached data properly.
Plus, there was a unnecessary copy of vg tree data.
This revised version is a improvement of our evas vg cache
in stable and optmization.
capsulate vector file data from efl canvas vg.
hide vector file data structure, capsulate it,
cut off the dependency by vector object.
yet it has evas_cache_entry interface.
This references a file that is not being installed, so the eo
file will fail to parse when used as a system-wide .eo file.
Introduced in 05682eed7d.
Fixes T7495.
As cache2 knows cached image could be not matched even though
hash key is not different.
Please refer to the following comment of evas_cache2_image_open.
/* image we found doesn't match what's on disk (stat info wise)
* so dirty the active cache entry so we never find it again. this
* also implicitly guarantees that we only have 1 active copy
* of an image at a given key. we wither find it and keep re-reffing
* it or we dirty it and get it out */
The hash key is created base on the image file address.
If the image file address to find does not equal cached image file address
then it means that the cached image is no longer valid.
This case could happen with the following step.
(1) Call evas_object_image_memfile_set with content data A
(2) Call evas_object_image_memfile_set with content data B
(3) Add timer with short time (ex: 0.01 sec)
(4) Delete A image, and add A image in timer callback
(5) Delete B image, and add B image in timer callback
Sometimes you could see image of A from the B image, because newly created
image at step 5 has same address of setp 1.
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D6870
Summary:
- Replace '\@ref name' with '@name'
- Remove unused \@internal tag
This tag affects text AFTER it, and there is no text after it.
- Remove \@note tag
Replaced with a simple NOTE: text, since eolian does not have an equivalent tag.
- Remove spurious \@Efl... tags
They should really be @Efl...
- Remove \@p tags
There is no eolian equivalent, and a simpler $ suffices in this case.
Fixes T7482
Reviewers: q66
Reviewed By: q66
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T7482
Differential Revision: https://phab.enlightenment.org/D7372
Summary:
The map geometry(cur.map->normal_geometry) is calculated only if
evas_render_updates_internal_loop calls evas_render_mapped as below.
evas_render_mapped
-> evas_object_map_update
-> evas_object_map_update
-> _evas_map_calc_map_geometry
If the mapped object is not on screen, then evas_render_updates_internal_loop
does not call evas_render_mapped, because the mapped object is not active.
The mapped object is not active(i.e. is_active is 0) always because cache.clip
data including visilbe and geometry is not updated after the object goes out
of screen.
Usually the unmapped object updates its cache.clip data with updated geometry
even though it is out of screen as below.
_efl_canvas_object_efl_gfx_entity_position_set
-> evas_object_recalc_clippees
-> evas_object_clip_recalc
-> evas_object_clip_recalc_do
So the mapped object geometry(cur.map->normal_geometry) should be updated in
evas_object_clip_recalc_do if it is out of screen.
Test Plan:
Sample code
{F3455674}
{F3455673}
{F3455672}
{F3455671}
Reviewers: Hermet, jypark
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7344
Since Efl.Interpolator's subclasses are used as interpolator class,
Efl.Interpolator class is changed to be an interface.
This change allows Efl.Canvas.Animation to have Efl.Interpolator as its
property in efl_canvas_animation.eo.
Summary:
condition:
1. full size rect
2. upper side, if there is same size image object and image object preload state is EVAS_IMAGE_PRELOADING.
below rect cannot be rendered because upper image object was added to cutout area event though image object is not opaque.
so fix opaque check function return false for opaque state of preloading image.
Reviewers: Hermet, raster
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7318
Summary:
if clipped color changed and not object color on rect objects, then
the updates could be missed. This bug seems to
have been here a while unnoticed.
Reviewers: Hermet, raster
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7301
you were not able to disable the header checks, so if the header was not
there it indicated that you could turn it of. However, the option check
was in the has_header if not outside of it. Further more, header checks
are done in the subdirectory that is done for header checks,
unneccessary cpu_**** flags are removed, global optimization options are
added to the global_arguments instead of just the package_c_args, which
leads to the fact that also all binaries etc. are build by default with
those optimization flags.
This also reduces the amount of options to a minimum of 1 option, to
just control if there should be the optimization or not.
This also changes from host_maschine to target_mschine, since we
probebly want to enable the optimization for the target maschine, not
the host.
Differential Revision: https://phab.enlightenment.org/D7296
Summary:
1. Pointed out gradient prepare step triggered duplicatedly,
because they are immediate children of container.
But gradients is desigend to fill shape,
shape could get ready of the gradients which are applied to.
So, container doesn't need to prepare gradient children.
2. Ector shape does prepare its gradient renderer in it's prepare time,
each gradients objects doesn't need to prepare renderer separately.
Here code skip duplication of sequences of gradients preparation step.
by cleaning up logic.
Reviewers: #committers
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7269
Summary:
In some cases, white space at end of line is remained after line-break.
This issue is happened when Textblock do word wrap at the next item. Without
spliting a previous text item. Then, Textblock just skipped calling
_layout_item_text_split_strip_white() function.
This patch also fixed a wrong test case based on wrong logic.
The range rectangles shouldn't be overlapped. Because of remained white space,
a meaningless rectangle was added. And it overlapped by next rectangle.
@fix
Test Plan:
Fixed an exising test case for range renctangles.
Run test case.
Reviewers: herdsman, woohyun, raster, cedric, subodh, subodh6129
Subscribers: #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7204
Summary:
: condition of problem
- rectangle object of RECT part(BASE part of below edje)
- mapped
- has clipper and clipper is ed's base clipper.
1. _evas_render_phase1_object_process is called of rect object
if rect is mapped, not changed, it call _evas_render_phase1_object_mapped.
2. _evas_render_phase1_object_mapped
when _evas_render_phase1_object_mapped is called,
condition is
src_changed=0 , is_active=0 , obj_changed=0
hmap=0 => because map of this object is only enabled once and not changed.
in this case, rect object's clipper always changed and it cause useless randering
so only call _evas_render_phase1_object_map_clipper_fix when obj is changed.
first time of map set, evas object always be changed, so it maybe ok we call clipper_fix only obj is chaned.
below is sample of edj.
group { name: "elm/notify/center/default";
parts {
part { name: "anim_start";
scale: 1;
type: SPACER;
description {
..
perspective {
zplane: -100;
focal: 1000;
}
}
}
part { name: "anim_stop";
scale: 1;
type: SPACER;
description {
..
perspective {
zplane: 0;
focal: 1000;
}
}
}
part { name: "base";
scale: 1;
type: RECT;
description { state: "default" 0.0;
..
map {
on: 1;
perspective_on: 1;
perspective: "anim_stop";
}
}
}
Reviewers: raster, Hermet
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7219
getting smart changed meant another scope data get when we already had
the protected data in the caller. don't do that and just pass down.
saves a lot of overhead...
@optimize
Summary:
Sometimes mouse_grabbed flag can not be zero.
Before version of EFL, object has just one mouse_grabbed flag.
But now we have a new feature, so object has list of pointer devices
and each pointer device has mouse_grabbed flag.
We need to check all of pointer devices mouse_grabbed flag.
And if all of mouse_grabbed flag are zero, dispatch move event.
Test Plan:
{F3384050}
gcc -o button_example_01 button_example_01.c `pkg-config --cflags --libs elementary`
Reviewers: iscaro, zmike, Hermet
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7216
Summary:
Refactor this so it can be used by another call site in a later commit.
Also, reduce its complexity, as we only need the callback to fire, we
don't care about any of the other machinery in _evas_image_pixels_get.
Depends on D7188
Reviewers: Hermet
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7189
Summary:
We use this code path for native image hardware planes. Force the
stacking check on those for now so planes don't accidentally occlude
surfaces above them.
Reviewers: Hermet
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7188
Summary:
When you run filter examples with enabling GL engine support,
you can see critical messages which say don't use efl_unref for buffer object.
So, efl_unref has to be replaced with efl_del.
@fix
Test Plan: Run filter example with GL
Reviewers: cedric, Hermet, raster, woohyun
Reviewed By: Hermet
Subscribers: segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7119
Summary:
The image.data is set to null by evas_common_rgba_image_unload_real.
After this point the cache->usage does not count cache_entry.w and h value when
evas_gl_common_image_free calls evas_cache_image_flush.
So the cache->usage increases just around 300. If the cache->limit is 4194304,
then the cache could have around 1398 items. This would be fine.
But each items hold eina_file, and the cache does not count eina_file size.
If the file size is 326352, then a process could use 456527385 bytes.
So this patch set make the cache->usage count eina_file size.
This would be better option than https://phab.enlightenment.org/D7029
Reviewers: Hermet, jypark, cedric
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7030
for bindings we needed a system that could be used to find all special
directories of every subsystem, for eo files headers etc.
The mechanism is documented in the root meson.build
Differential Revision: https://phab.enlightenment.org/D7180
This uses the meson/ninja depfile functionality + eolian to make
sure proper dependencies between generated files and .eo files
are managed, to ensure consistent re-generation of all generated
files that are affected upon .eo file modification.
For custom rules with multiple outputs, Ninja currently does not
support depfiles. Therefore, split those into two custom rules
so that the depfiles functionality can be enabled. While this
is ugly and slows down the process a little by having to invoke
Eolian twice instead of once, it has to be done and it's still
better than what we had in Autotools anyway.
Differential revision: D7187
Fixes T6700.
Summary:
This is one more corner-case issue that I found,
When second image doesn't use preload (but still share the resource)
canvas engine triggers cancellation for first image preload function.
Unluckly, preload thread is cancelled on the intermediate rendering,
First image is not going to rendered, even image turn it changed states.
Because end of that frame, canvas reset/flushed all active objects.
Here changes to retain the changes status to redraw it in the next frame.
Test Plan:
img1 = image_add;
image_file_set(img1, "test.jpg");
image_preload(img1, true);
show(img);
img2 = image_add;
image_file_set(img2, "test.jpg"); //same resource
image_preload(img2, false);
show(img2);
img1 is invisible.
Reviewers: #committers
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7157