Commit Graph

133 Commits

Author SHA1 Message Date
Jean-Philippe Andre 4f5c48236f evas/cserve2: Add proper tags to shm arrays
Use tags such as INDX, FONT, IMAG, FILE.
These can help debugging and for robustness, as they will
be visible in the memory dump.

Update generation_id after repack as well
2013-10-28 15:47:14 +09:00
Jean-Philippe Andre 1e4ee656a0 evas/cserve2: Fix cserve2_usage tool
Also, print shared arrays usage as it is sent as first message
upon connection to the server.

Add fonts to LRU and flush LRU as needed.
Seems to work okay. Could probably be finetuned a bit.
2013-10-28 15:47:14 +09:00
Jean-Philippe Andre 467b1b1739 evas/cserve2: Store Glyph_Data in shared mempools
- Create one Glyph_Data array per Font_Entry
- Copy Font_Source descriptors in shared array
- Copy font entries in shared index
- Send font index path over socket
- Merge Font_Source and Font_Data in shared memory
- Send font index path on client connect
- Repack font index after free
- Pass font shm name to clients
2013-10-28 15:47:14 +09:00
Jean-Philippe Andre c7515f3300 evas/cserve2: Add mempool_buffer_offset_get() api 2013-10-28 15:47:14 +09:00
Jean-Philippe Andre 7ebda2d123 evas/cserve2: Store glyphs in shared arrays
Also, change the internal structure of glyph listing:
 - Use lists instead of inlists

Switch to use Glyph_Data instead of Glyph_Entry
2013-10-28 15:47:14 +09:00
Jean-Philippe Andre 28a5c6f587 evas/cserve2: Add compile-time log level flag for cserve2
DBG and INF messages pollute the logs and performance reports
from valgrind, let's disable them at build-time for better
benchmarking.

Fix other compilation warnings and clean code a bit
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre 9d731364c1 evas/cserve2: Optimize cserve2_shared_string_del()
eina_hash_del_by_data is very expensive, so let's delete by key
since we can get the original data.
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre e95bd7755e evas/cserve2: Add binary search in server side 2013-10-28 15:47:13 +09:00
Jean-Philippe Andre f5fee255de evas/cserve2: Fix race condition on font load / socket fail
If the client exits while the server is loading fonts,
the font entry objects are accessed after being freed.

Note: This is not a proper fix. The race condition should still
be fixed, but delaying client deletion a bit might help for a while...
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre 88ef4131a0 evas/cserve2: Share paths of index tables with clients
- Send paths to all connected clients
- Send paths upon connection from a new client

- Client side:
 - Fast find opened images
 - Fast find loaded images
 - Optimize load by skipping socket wait

Also, remap indexes when needed (file size changed)
When index file grows, the clients are not notified, so they
must constantly check that their mapping matches the current array
size.
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre 47be3a2b81 evas/cserve2: Prepare shared indexes in clients
- Move required struct definitions to common evas_cs2.h

- Open/close shm and map arrays to memory
Pretty stupid for now as it will close & reopen the shm files
even when unchanged.

- Check shm size and array header consistency

- Implement message send

- Send messages from server when calling repack()
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre c0bb73c775 evas/cserve2: Fix image load premultiplication
There was a color problem in elementary_test since elm
sets premul to 0 while expedite sets it to 1 during image load.
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre db66f69104 evas/cserve2: _cserve2_cache_fast_scaling_check()
Adapt function to new Data/Entry model.
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre ee74562bf0 evas/cserve2: Simplify error logs 2013-10-28 15:47:13 +09:00
Jean-Philippe Andre 64e7d48296 evas/cserve2: Store Image_Data in shared array
Split image entries into Image_Data and Image_Entry.
Store, find and use Image_Data descriptors from shared array.
Fix some wrong hash table usages.
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre 315c2fd161 evas/cserve2: binary search in Shared_Array 2013-10-28 15:47:13 +09:00
Jean-Philippe Andre d0e647fee3 evas/cserve2: Repack File_Data shared array 2013-10-28 15:47:13 +09:00
Jean-Philippe Andre acae35b4d1 evas/cserve2: Use Shared_Array storage for File_Data
File_Entry and File_Data are now two different types,
one being stored in the shared array, the other one
is only a reference counting entry.
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre c57a319df3 evas/cserve2: Rename File_Data pointers to fd
The name fe is also used by Font_Entry, slightly confusing
2013-10-28 15:47:13 +09:00
Jean-Philippe Andre 12deed8073 evas/cserve2: Use unique id counter
Merge file id and image id into a single entry id.
2013-10-28 15:47:12 +09:00
Jean-Philippe Andre 07fb7172d5 evas/cserve2: Implement shared index and buffers
Only import the C file for now.
Implement the following features:

- Shared Arrays
Store arrays of elements of fixed size in shm.

- Shared Mempool
Store random sized buffers in shm.
These buffers are indexed in a Shared Array and are
referred to using their index only.

- Shared Strings
Store strings in a shm in a way similar to Eina_Stringshare
(except strings are referred to using an int index).

- Include evas_cserve2_index.c to the compilation.
- Declare shared index functions in header file.
- Call init() and shutdown() on the shared index subsystem.
- Add find and foreach functions
2013-10-28 15:47:12 +09:00
Jean-Philippe Andre deb8776de5 evas/cserve2: Add functions to resize shm files
- cserve2_shm_segment_request()
Creates a new shm segment (Shm_Handle) from an existing file,
without changing the current mmap.

- cserve2_shm_resize()
Grows the file and remaps in memory (new virtual address).

- cserve2_shm_id_get()
Returns the shm creation ID.
2013-10-28 15:47:12 +09:00
Jean-Philippe Andre 781c2e26e5 evas/cserve2: Prepare usage of shared strings
+ Add macros to fake usage of future cserve2 strings functions
+ Rename all File_Entry to fe
+ Other costmetic changes
2013-10-28 15:47:12 +09:00
Jean-Philippe Andre afde0c892b evas/cserve2: Add CRIT() macro
For easy debugging
2013-10-28 15:47:12 +09:00
Carsten Haitzler 69e27abdc3 eina - and e3fl in general - stop using eina_error_get/set - useless really 2013-10-11 16:50:40 +09:00
Cedric Bail b125a9afa6 gitignore: do not track generated files. 2013-09-26 15:51:25 +09:00
Cedric Bail ee72c809f0 efl: fix headers order. 2013-07-23 11:27:29 +09:00
Carsten Haitzler 4c970812f2 fix clang nonnull complaint 2013-07-16 17:16:20 +09:00
Jean-Philippe Andre ee037d3586 evas/cserve2: Add infix to shm filenames
Minor change
So, we can distinguish between image, font and index shm files.
2013-07-08 17:16:04 +09:00
Jean-Philippe Andre c6db8ba782 evas/cserve2: Implement fast(er) scaling of images
In its current model, cserve2 will reopen, reload and scale an
image whenever a new scaled version is requested by the client.

Instead, we can load the original image when too many scaled
versions are requested, and place the original in the LRU.
2013-07-08 16:06:08 +09:00
Jean-Philippe Andre cf61319ae1 evas/cserve2: Minor fixes from Coverity check
- CID 1042303
- CID 1039912
- CID 1039285
2013-07-08 16:06:08 +09:00
Jean-Philippe Andre 09a5c28e5b evas/cserve2: no cache for large images or non-smooth
The concept is taken from scalecache. I am not sure of the
performance impact.
2013-07-04 13:02:48 +09:00
Jean-Philippe Andre 7c7c231015 evas/cserve2: simplify more
Remove Image_Load_Opts and use Evas_Image_Load_Opts for cs2 master to
slave communication.
2 things to note:
- The struct size is bigger (but at the same time we removed a memcpy)
- The scale_load field is not passed to the slave
2013-07-04 13:02:48 +09:00
Jean-Philippe Andre 46b7baa379 evas/cserve2: merge SETOPTS into OPEN
When opening an image, OPEN and SETOPTS were always sent
consecutively. Merging these two messages may improve the
performance a bit (not measured), but also simplify the
whole thing.

Note: cserve2 debug tools have not been fixed yet.
2013-07-04 13:02:48 +09:00
Jean-Philippe Andre ca5d174568 evas/cserve2: use Evas_Image_Load_Opts directly
Image_Data contained a similar struct to the standard Evas struct,
let's not duplicate it uselessly.
2013-07-04 13:02:48 +09:00
Jean-Philippe Andre 67cccea61b evas/cserve2: fix usage of Evas_Image_Load_Opts
Since the load options are not copied but the pointer is simply
stored by the module, we need to move the struct higher in the
stack.

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre 687c4aa475 evas/cserve2: use Eina_Stringshare.
We must close the image after loading the data.
Also, Evas loaders expect stringshares.

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre 8db3d4d2bf evas/cserve2: remove dead code (old loaders API).
Remove: cserve-specific loaders and deprecated code.
Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre 48d97f7a90 evas/cserve2: use Evas loaders from slave
Use common loaders with evas, and ignore specific modules.

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre db6cba1429 evas/cserve2: avoid useless SETOPT messages.
Most of the time, the SETOPT message is sent only
to carry 0 data. Let's add a flag to the OPEN message to
avoid useless socket calls.
Server-side: implement with message faking.
Also, fix image ID logic on client side:
 - alloc data entry asap,
 - assign image_id during call to OPEN

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre f9a7820e02 evas/cserve2: Simplify debug logs (server side).
Remove newlines.

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre 29bf164c75 evas/cserve2: pass loader data during open.
Note: this path seems never to be used.
Loader options are set by the file loader or after open.

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre 6a2a0187ff evas/cserve2: write() can return other errors.
In case of error, return from the function and don't decrement
the send variable.

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre f7c6545170 evas/cserve2: minor fixes (error paths).
Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:10 +09:00
Jean-Philippe Andre d712a13a7a evas/cserve2: use null-terminated strings everywhere.
Some hashtable lookups failed because the keys were added
either with eina_stringshare_add() or e_s_add_lenth() but
looked for with e_s_add_length() only.

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-07-02 16:58:09 +09:00
Chris Michael 7e222b949c Fix klockwork memleak: If we allocate a colormap above, then we need
to free it on error.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2013-06-28 13:57:56 +01:00
Sebastian Dransfeld 068f1ddc62 efl: formatting 2013-06-20 13:08:36 +02:00
Sebastian Dransfeld 51023d2d4f evas: Keep sane name for public header
Evas_Common.h should be used for the public header, and rather rename
evas_common.h internal header to another name.

Sa:
Evas_Common_Header.h -> Evas_Common.h
evas_common.h -> evas_common_private.h

Shouldn't have both Evas_Common.h and evas_common.h because of case
insensitive filesystems.
2013-06-20 12:53:29 +02:00
Jean-Philippe Andre 9929ee9aec cserve2: add more error debug for font loading 2013-06-20 17:42:07 +09:00
Jean-Philippe Andre 16c8ab3b18 evas/cserve2: remove garbage shm files during server init
If server crashes or is forcefully killed, it will not
properly cleanup its shm files. So, some memory will be leaked pretty
badly.
2013-06-14 17:09:03 +09:00
Jean-Philippe Andre 42309042c6 evas/cserve2: fix crash when shutting down cserve2
If a slave is still alive during shutdown, then it will be killed
and the dead callback should be called. This would then trigger
a request failed callback on invalid data.
But there's no point in calling the dead_cb since we're shutting
down already.
2013-06-14 16:38:18 +09:00
Jean-Philippe Andre 681c8cda4c evas/cserve2: (shutdown) fix double free issue
glibc double free happens when shutting down cserve, while
requests are being processed. this is because the entry is
being deleted from the hash but the cancel request fails
(so it should be deleted again from the hash)

Another patch going to fix the double free.
2013-06-14 16:38:18 +09:00
Jean-Philippe Andre a3b3b5bd8e evas/cserve2: Handle SIGINT properly 2013-06-14 16:38:18 +09:00
Jean-Philippe Andre 338218109b evas/cserve2: catch more signals and exit nicely
Also, ignore USR1 and USR2.
2013-06-14 16:38:18 +09:00
Jean-Philippe Andre 07ef0fdd93 evas/cserve2: Add UID to shm file path
+ Improve debug for corner case (never happened)
2013-06-14 16:38:18 +09:00
Eduardo Lima (Etrunko) d3292a7ae9 Split .gitignore into multiple files
Signed-off-by: Eduardo Lima (Etrunko) <eduardo.lima@intel.com>
2013-06-11 18:18:50 -03:00
Jean-Philippe Andre 54e5d651e4 evas/cserve2: fix jpeg loader crash (invalid free)
Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-06-04 20:21:17 +09:00
Jean-Philippe Andre 5d7689d627 evas/cserve2: fix crash in server side when sending SIGINT.
Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-06-04 20:21:16 +09:00
Jean-Philippe Andre 6531423fd7 evas/cserve2: fix SIGFPE in expedite test case.
Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-06-04 20:21:16 +09:00
Jean-Philippe Andre 452a301bfa evas/cserve2: fix fonts flags.
aka: fix italic fonts or T25 .

Signed-off-by: Cedric Bail <cedric.bail@samsung.com>
2013-06-04 15:04:19 +09:00
Igor Murzov 32f27fee7e Evas: Fix double fclose() in WebP loader 2013-04-16 12:07:36 +04:00
Tom Hacohen 71e95fa386 Evas cserve2: Remove useless var when calculating size of sun_path.
I have no idea how I missed these 2.
2013-03-21 14:15:10 +00:00
Tom Hacohen ecc0972468 Evas cserve2: Remove useless var when calculating size of sun_path. 2013-03-21 13:15:47 +00:00
Henrique Dante de Almeida 2656d7097e evas: Fix PSD image loading 2013-02-26 10:17:28 -03:00
Henrique Dante de Almeida f5d4ae70bd evas: Fix buffer overflows on environment variables 2013-02-26 10:17:28 -03:00
Christopher Michael 7f7f7f7c1f Fix possible memory leak.
Dynamic memory stored in 'ptr2' allocated through function 'malloc' at
line 653 can be lost at line 1022. Also there is one similar error on
line 1029.

Signed-off-by: Christopher Michael <cp.michael@samsung.com>
2013-02-19 13:14:31 +00:00
Carsten Haitzler 5fa5f1430b small change to something never used/tested much ... cserve2 - FAIL if
an existing cserve 2 client is there.



SVN revision: 83866
2013-02-13 11:32:30 +00:00
Gustavo Sverzut Barbieri df701d8ca2 some clang warning cleanups i forgot to commit
SVN revision: 83024
2013-01-21 00:22:35 +00:00
Gustavo Sverzut Barbieri c6358ff322 fix evas_cserve2 utils linkage and includes.
they are basic eina apps, not evas (use EINA_CFLAGS), they just use
evas_cs2.h for types and enums.

they also must link with eina.



SVN revision: 82995
2013-01-18 19:30:44 +00:00
Lucas De Marchi 06ff74834f efl: remove checks for socket.h, net/*, arpa/*
SVN revision: 82585
2013-01-10 20:26:02 +00:00
Lucas De Marchi db395ef7eb efl: Remove check for unistd.h
* unistd.h: is very useful, very old and very standard.



SVN revision: 82577
2013-01-10 20:25:26 +00:00
Lucas De Marchi 56f62b1f5d efl/evas: move cserve2 binaries under MODULE_ARCH dir
SVN revision: 82491
2013-01-09 22:32:08 +00:00
Gustavo Sverzut Barbieri 71cf862c95 efl/evas_cserve2: use eina_prefix
SVN revision: 82220
2013-01-04 18:00:12 +00:00
Gustavo Sverzut Barbieri 16a9372e35 efl/evas_cserve2: don't use libexec
many distros deprecate libexec and it's better to keep our stuff
together inside /usr/lib/evas.

cserve2 binaries now lives in /usr/lib/evas/cserve2/bin



SVN revision: 81897
2012-12-30 11:42:04 +00:00
Paulo Alcantara fb97c82882 efl/cserve2: Fix some bugs regarding fonts
Signed-off-by: Paulo Alcantara <pcacjr@profusion.mobi>


SVN revision: 81582
2012-12-21 21:11:23 +00:00
Paulo Alcantara da061849b0 efl/cserve2: Fix invalid iteration over client references
The _request_failed() function is called by error responses from slaves,
and iterating over references of a entry and removing each of them must
be done with EINA_LIST_FOREACH_SAFE(), since _entry_free_cb() calls
_entry_reference_del() which then removes the reference that is used in
the next iteration in for-loop from _request_failed().

Signed-off-by: Paulo Alcantara <pcacjr@profusion.mobi>


SVN revision: 81580
2012-12-21 21:09:45 +00:00
Leandro Pereira f96a5aac5c evas: Get rid of RGBA_Image ref member
(It's not by anything in the code.)



SVN revision: 81182
2012-12-17 21:26:15 +00:00
Paulo Alcantara 633e29c5a5 evas/cserve2: Re-enable speculative load
I've tested it and I can confirm that it's working fine with the new
scalecache support on Cserve2. So, let's use it again.

Signed-off-by: Paulo Alcantara <pcacjr@profusion.mobi>

Patch by: Paulo Alcantara <pcacjr@profusion.mobi>



SVN revision: 80177
2012-12-04 15:40:00 +00:00
Paulo Alcantara f8f79f8599 evas/cserve2: Add scalecache support
Signed-off-by: Paulo Alcantara <pcacjr@profusion.mobi>

Patch by: Paulo Alcantara <pcacjr@profusion.mobi>



SVN revision: 79754
2012-11-27 18:23:25 +00:00
Carsten Haitzler 515d08491d add comments in cserve2 bin webp loader too.
SVN revision: 79316
2012-11-15 05:23:40 +00:00
Carsten Haitzler 66a43d2a7a more warn-- in efl tree.
SVN revision: 79314
2012-11-15 05:19:14 +00:00
ChunEon Park 0d8488a478 evas/jpeg, cserve2 - removed unused
SVN revision: 79094
2012-11-10 11:35:42 +00:00
Vincent Torri c15e9c6575 merge: and now Evas
I've tested make -j 3 install and it works nicely

I've tested expedite with software and opengl xlib,
and it works. Not tested other engines, so please
report any problems (engines or other) on the ML.

TODO: examples and tests, I'll add them later

ISSUE: Eina_Unicode size check. It indirectly depends on
       eina_config.h, which is created at the end of the
       configure script. So its size is always 0. I don't
       know how that size is used, so I can't do a lot,
       for now.


SVN revision: 78895
2012-11-04 11:51:42 +00:00