diff options
Diffstat (limited to 'src/engine/e_snapshot.c')
| -rw-r--r-- | src/engine/e_snapshot.c | 87 |
1 files changed, 58 insertions, 29 deletions
diff --git a/src/engine/e_snapshot.c b/src/engine/e_snapshot.c index 91b7797b..112f8fed 100644 --- a/src/engine/e_snapshot.c +++ b/src/engine/e_snapshot.c @@ -1,6 +1,7 @@ /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ #include "e_snapshot.h" #include "e_compression.h" +#include "e_interface.h" int *snapitem_data(SNAPSHOT_ITEM *item) { return (int *)(item+1); } @@ -154,52 +155,80 @@ int snapshot_create_delta(SNAPSHOT *from, SNAPSHOT *to, void *dstdata) delta->num_temp_items = 0; /* pack deleted stuff */ - for(i = 0; i < from->num_items; i++) { - fromitem = snapshot_get_item(from, i); - if(snapshot_get_item_index(to, (snapitem_key(fromitem))) == -1) + static PERFORMACE_INFO scope = {"delete", 0}; + perf_start(&scope); + + for(i = 0; i < from->num_items; i++) { - /* deleted */ - delta->num_deleted_items++; - *data = snapitem_key(fromitem); - data++; + fromitem = snapshot_get_item(from, i); + if(snapshot_get_item_index(to, (snapitem_key(fromitem))) == -1) + { + /* deleted */ + delta->num_deleted_items++; + *data = snapitem_key(fromitem); + data++; + } } + + perf_end(); } /* pack updated stuff */ - for(i = 0; i < to->num_items; i++) { - /* do delta */ - itemsize = snapshot_get_item_datasize(to, i); - - curitem = snapshot_get_item(to, i); - pastindex = snapshot_get_item_index(from, snapitem_key(curitem)); - if(pastindex != -1) + static PERFORMACE_INFO scope = {"update", 0}; + perf_start(&scope); + + for(i = 0; i < to->num_items; i++) { - pastitem = snapshot_get_item(from, pastindex); - if(diff_item((int*)snapitem_data(pastitem), (int*)snapitem_data(curitem), data+3, itemsize/4)) + /* do delta */ { + static PERFORMACE_INFO scope = {"find", 0}; + perf_start(&scope); + itemsize = snapshot_get_item_datasize(to, i); + curitem = snapshot_get_item(to, i); + pastindex = snapshot_get_item_index(from, snapitem_key(curitem)); + perf_end(); + } + + if(pastindex != -1) + { + static PERFORMACE_INFO scope = {"diff", 0}; + perf_start(&scope); + + pastitem = snapshot_get_item(from, pastindex); + if(diff_item((int*)snapitem_data(pastitem), (int*)snapitem_data(curitem), data+3, itemsize/4)) + { + *data++ = itemsize; + *data++ = snapitem_type(curitem); + *data++ = snapitem_id(curitem); + /*data++ = curitem->key();*/ + data += itemsize/4; + delta->num_update_items++; + } + perf_end(); + } + else + { + static PERFORMACE_INFO scope = {"copy", 0}; + perf_start(&scope); + *data++ = itemsize; *data++ = snapitem_type(curitem); *data++ = snapitem_id(curitem); /*data++ = curitem->key();*/ + + mem_copy(data, snapitem_data(curitem), itemsize); + size_count += itemsize; data += itemsize/4; delta->num_update_items++; + count++; + + perf_end(); } } - else - { - *data++ = itemsize; - *data++ = snapitem_type(curitem); - *data++ = snapitem_id(curitem); - /*data++ = curitem->key();*/ - - mem_copy(data, snapitem_data(curitem), itemsize); - size_count += itemsize; - data += itemsize/4; - delta->num_update_items++; - count++; - } + + perf_end(); } if(0) |