diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2013-09-23 17:51:06 +0900 |
---|---|---|
committer | Cedric Bail <cedric.bail@free.fr> | 2013-10-17 20:48:25 +0900 |
commit | 4000cce2dc65c77864223d5193aea14e2d0cb395 (patch) | |
tree | 31fda21ea588e642d682951492ea7dd8ab0758fc | |
parent | 7bcecb6334e266bd2206ef20c1b2dc2aa95ce12f (diff) | |
download | efl-4000cce2dc65c77864223d5193aea14e2d0cb395.tar.gz |
evas/cserve2: (TEST) Disable server-side scaling
All scaling is done on-the-fly in the client side now.
TODO next:
- Avoid OPEN and LOAD when base image is already loaded (see smooth scale test)
- Scaling in client-side cserve2 (save on-the-fly scaled image in shm)
- Send scaled image descriptor to server
-rw-r--r-- | src/bin/evas/evas_cserve2_cache.c | 13 | ||||
-rw-r--r-- | src/lib/evas/cache2/evas_cache2.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_object_image.c | 6 | ||||
-rw-r--r-- | src/lib/evas/cserve2/evas_cs2.h | 4 | ||||
-rw-r--r-- | src/lib/evas/cserve2/evas_cs2_client.c | 13 |
5 files changed, 34 insertions, 5 deletions
diff --git a/src/bin/evas/evas_cserve2_cache.c b/src/bin/evas/evas_cserve2_cache.c index f714d752ab..779d11e2f4 100644 --- a/src/bin/evas/evas_cserve2_cache.c +++ b/src/bin/evas/evas_cserve2_cache.c @@ -506,6 +506,8 @@ _image_loaded_msg_create(Image_Entry *ientry, Image_Data *idata, int *size) msg->shm.mmap_size = cserve2_shm_map_size_get(ientry->shm); msg->shm.image_size = cserve2_shm_size_get(ientry->shm); msg->alpha_sparse = idata->alpha_sparse; + msg->image.w = idata->w; + msg->image.h = idata->h; if (idata->shm_id) { @@ -892,6 +894,12 @@ _load_request_response(Image_Entry *ientry, if (!idata->doload) DBG("Entry %d loaded by speculative preload.", idata->id); + idata->w = resp->w; + idata->h = resp->h; + + /* + TEST: Sending FULL-SIZE image instead of scaled image to client! + if (_scaling_needed(idata, resp)) { DBG("About to scale image %u", idata->id); @@ -903,6 +911,7 @@ _load_request_response(Image_Entry *ientry, } else DBG("No scaling needed for image %u", idata->id); + */ return _image_loaded_msg_create(ientry, idata, size); } @@ -2869,11 +2878,15 @@ cserve2_cache_image_entry_create(Client *client, int rid, fentry = _file_entry_find(ref->entry->id); fentry->images = eina_list_append(fentry->images, ientry); + /* + TEST: Sending FULL-SIZE image instead of scaled image to client! + if (opts && opts->scale_load.dst_w && opts->scale_load.dst_h) { if (!_cserve2_cache_fast_scaling_check(client, ientry)) return 0; } + */ ASENTRY(ientry)->request = cserve2_request_add( CSERVE2_REQ_IMAGE_SPEC_LOAD, diff --git a/src/lib/evas/cache2/evas_cache2.c b/src/lib/evas/cache2/evas_cache2.c index fc7982d5ba..d799dc719e 100644 --- a/src/lib/evas/cache2/evas_cache2.c +++ b/src/lib/evas/cache2/evas_cache2.c @@ -929,9 +929,6 @@ evas_cache2_image_scale_load(Image_Entry *im, evas_cache2_image_load_data(ret); ret->references++; - ret->w = dst_w; - ret->h = dst_h; - return ret; parent_out: diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index 5b2ef9388d..2f002fa491 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -4003,8 +4003,10 @@ evas_object_image_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, v if (ie != &((RGBA_Image *)pixels)->cache_entry) { data = ie; - w = iw; - h = ih; + //w = iw; + //h = ih; + w = ie->w; + h = ie->h; mustclose = EINA_TRUE; } diff --git a/src/lib/evas/cserve2/evas_cs2.h b/src/lib/evas/cserve2/evas_cs2.h index 6cc8804e29..e556f18624 100644 --- a/src/lib/evas/cserve2/evas_cs2.h +++ b/src/lib/evas/cserve2/evas_cs2.h @@ -90,6 +90,9 @@ struct _Msg_Loaded { int mmap_size; int image_size; } shm; + struct { + int w, h; // Real dimensions of this image. May differ from Msg_Opened::image::{w,h} after scaling. + } image; Eina_Bool alpha_sparse : 1; }; @@ -354,6 +357,7 @@ struct _Image_Data { uint32_t file_id; string_t shm_id; Evas_Image_Load_Opts opts; + uint32_t w, h; Eina_Bool alpha_sparse : 1; Eina_Bool unused : 1; Eina_Bool doload : 1; diff --git a/src/lib/evas/cserve2/evas_cs2_client.c b/src/lib/evas/cserve2/evas_cs2_client.c index e6f43a73cb..a1861f2a1e 100644 --- a/src/lib/evas/cserve2/evas_cs2_client.c +++ b/src/lib/evas/cserve2/evas_cs2_client.c @@ -539,6 +539,15 @@ _loaded_handle(Image_Entry *ie, const Msg_Loaded *msg, int size) goto fail; } + // FIXME: Client-side scaling! + if (msg->image.w && msg->image.h) + { + WRN("Forcing image %p size to %dx%d", ie, msg->image.w, msg->image.h); + ie->w = msg->image.w; + ie->h = msg->image.h; + } + else WRN("keeping original image %p size %dx%d", ie, ie->w, ie->h); + // dentry->shm.path = strdup(shmpath); dentry->shm.mmap_offset = msg->shm.mmap_offset; dentry->shm.use_offset = msg->shm.use_offset; @@ -1089,6 +1098,10 @@ evas_cserve2_image_load_data_wait(Image_Entry *ie) ie->flags.loaded = EINA_TRUE; im->image.no_free = 1; + // FIXME: Is this valid? Can we change ie's w,h here? + ie->w = idata->w; + ie->h = idata->h; + ie->load_rid = 0; return CSERVE2_NONE; } |