summaryrefslogtreecommitdiff
path: root/content/llcache.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2014-11-25 23:11:41 +0000
committerVincent Sanders <vince@kyllikki.org>2014-11-25 23:11:41 +0000
commit81417ae4a5a58ef75ac4113ea2b2d8c72474ea97 (patch)
tree6bcde3180061864e252c371ac20da9fde9573021 /content/llcache.c
parentcd2e3364492ae3f41373b3bb0e4e121ac85bb7c7 (diff)
downloadnetsurf-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.c53
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);
}