diff options
author | Vincent Sanders <vince@kyllikki.org> | 2014-11-25 23:11:41 +0000 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2014-11-25 23:11:41 +0000 |
commit | 81417ae4a5a58ef75ac4113ea2b2d8c72474ea97 (patch) | |
tree | 6bcde3180061864e252c371ac20da9fde9573021 /content/llcache.c | |
parent | cd2e3364492ae3f41373b3bb0e4e121ac85bb7c7 (diff) | |
download | netsurf-81417ae4a5a58ef75ac4113ea2b2d8c72474ea97.tar.gz netsurf-81417ae4a5a58ef75ac4113ea2b2d8c72474ea97.tar.bz2 |
caclulate the total amount of time spent writing an object out
In order to calculate the writeout bandwidth we need to know how long
it took to write the data to peristant storage in addition to how much
was written.
Diffstat (limited to 'content/llcache.c')
-rw-r--r-- | content/llcache.c | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/content/llcache.c b/content/llcache.c index c786ad02d..e97beb97e 100644 --- a/content/llcache.c +++ b/content/llcache.c @@ -2301,11 +2301,16 @@ build_candidate_list(struct llcache_object ***lst_out, int *lst_len_out) * \return NSERROR_OK on success or appropriate error code. */ static nserror -write_backing_store(struct llcache_object *object, size_t *written_out) +write_backing_store(struct llcache_object *object, size_t *written_out, unsigned long *elapsed) { nserror ret; uint8_t *metadata; size_t metadatasize; + struct timeval start_tv; + struct timeval end_tv; + struct timeval elapsed_tv; + + gettimeofday(&start_tv, NULL); /* put object data in backing store */ ret = guit->llcache->store(object->url, @@ -2338,10 +2343,16 @@ write_backing_store(struct llcache_object *object, size_t *written_out) guit->llcache->invalidate(object->url); return ret; } + gettimeofday(&end_tv, NULL); + + timersub(&end_tv, &start_tv, &elapsed_tv); + object->store_state = LLCACHE_STATE_DISC; *written_out = object->source_len + metadatasize; + *elapsed = (elapsed_tv.tv_sec * 1000) + (elapsed_tv.tv_usec / 1000); + return NSERROR_OK; } @@ -2358,30 +2369,34 @@ static void llcache_persist(void *p) struct llcache_object **lst; int lst_count; int idx; + unsigned long total_elapsed = 0; + unsigned long elapsed; ret = build_candidate_list(&lst, &lst_count); - if (ret == NSERROR_OK) { - /* obtained a candidate list, make each object - * persistant in turn - */ - for (idx = 0; idx < lst_count; idx++) { - ret = write_backing_store(lst[idx], &size_written); - if (ret != NSERROR_OK) { - break; - } - total_written += size_written; + if (ret != NSERROR_OK) { + LOG(("Unable to construct candidate list for persisatnt writeout")); + return; + } - if (total_written > llcache->bandwidth) { - /* The bandwidth limit has been reached. - * Writeout scheduled for the remaining objects - */ - guit->browser->schedule(1000, llcache_persist, NULL); - break; - } + /* obtained a candidate list, make each object persistant in turn */ + for (idx = 0; idx < lst_count; idx++) { + ret = write_backing_store(lst[idx], &size_written, &elapsed); + if (ret != NSERROR_OK) { + break; } + total_written += size_written; + total_elapsed += elapsed; - free(lst); + if (total_written > llcache->bandwidth) { + /* The bandwidth limit has been reached. + * Writeout scheduled for the remaining objects + */ + guit->browser->schedule(1000, llcache_persist, NULL); + break; + } } + + free(lst); } |