summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2013-09-23 17:51:06 +0900
committerCedric Bail <cedric.bail@free.fr>2013-10-17 20:48:25 +0900
commit4000cce2dc65c77864223d5193aea14e2d0cb395 (patch)
tree31fda21ea588e642d682951492ea7dd8ab0758fc
parent7bcecb6334e266bd2206ef20c1b2dc2aa95ce12f (diff)
downloadefl-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.c13
-rw-r--r--src/lib/evas/cache2/evas_cache2.c3
-rw-r--r--src/lib/evas/canvas/evas_object_image.c6
-rw-r--r--src/lib/evas/cserve2/evas_cs2.h4
-rw-r--r--src/lib/evas/cserve2/evas_cs2_client.c13
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;
}