Make llcache debugging less invasive

This commit is contained in:
Vincent Sanders 2014-02-21 11:43:48 +00:00
parent ff8c37a6ee
commit 60973fe5d1
1 changed files with 33 additions and 67 deletions

View File

@ -38,6 +38,12 @@
/** Define to enable tracing of llcache operations. */
#undef LLCACHE_TRACE
#ifdef LLCACHE_TRACE
#define LLCACHE_LOG(x) LOG(x)
#else
#define LLCACHE_LOG(x)
#endif
/** State of a low-level cache object fetch */
typedef enum {
LLCACHE_FETCH_INIT, /**< Initial state, before fetch */
@ -200,9 +206,7 @@ static nserror llcache_object_user_new(llcache_handle_callback cb, void *pw,
u->handle = h;
#ifdef LLCACHE_TRACE
LOG(("Created user %p (%p, %p, %p)", u, h, (void *) cb, pw));
#endif
LLCACHE_LOG(("Created user %p (%p, %p, %p)", u, h, (void *) cb, pw));
*user = u;
@ -219,9 +223,7 @@ static nserror llcache_object_user_new(llcache_handle_callback cb, void *pw,
*/
static nserror llcache_object_user_destroy(llcache_object_user *user)
{
#ifdef LLCACHE_TRACE
LOG(("Destroyed user %p", user));
#endif
LLCACHE_LOG(("Destroyed user %p", user));
assert(user->next == NULL);
assert(user->prev == NULL);
@ -260,9 +262,7 @@ static nserror llcache_object_remove_user(llcache_object *object,
user->next = user->prev = NULL;
#ifdef LLCACHE_TRACE
LOG(("Removing user %p from %p", user, object));
#endif
LLCACHE_LOG(("Removing user %p from %p", user, object));
return NSERROR_OK;
}
@ -318,9 +318,7 @@ static nserror llcache_object_new(nsurl *url, llcache_object **result)
if (obj == NULL)
return NSERROR_NOMEM;
#ifdef LLCACHE_TRACE
LOG(("Created object %p (%s)", obj, nsurl_access(url)));
#endif
LLCACHE_LOG(("Created object %p (%s)", obj, nsurl_access(url)));
obj->url = nsurl_ref(url);
@ -703,9 +701,7 @@ static nserror llcache_object_refetch(llcache_object *object)
/* Reset fetch state */
object->fetch.state = LLCACHE_FETCH_INIT;
#ifdef LLCACHE_TRACE
LOG(("Refetching %p", object));
#endif
LLCACHE_LOG(("Refetching %p", object));
/* Kick off fetch */
object->fetch.fetch = fetch_start(object->url, object->fetch.referer,
@ -751,9 +747,7 @@ static nserror llcache_object_fetch(llcache_object *object, uint32_t flags,
nsurl *referer_clone = NULL;
llcache_post_data *post_clone = NULL;
#ifdef LLCACHE_TRACE
LOG(("Starting fetch for %p", object));
#endif
LLCACHE_LOG(("Starting fetch for %p", object));
if (post != NULL) {
error = llcache_post_data_clone(post, &post_clone);
@ -786,9 +780,7 @@ static nserror llcache_object_destroy(llcache_object *object)
{
size_t i;
#ifdef LLCACHE_TRACE
LOG(("Destroying object %p", object));
#endif
LLCACHE_LOG(("Destroying object %p", object));
nsurl_unref(object->url);
free(object->source_data);
@ -872,9 +864,7 @@ llcache_object_rfc2616_remaining_lifetime(const llcache_cache_control *cd)
else
freshness_lifetime = 0;
#ifdef LLCACHE_TRACE
LOG(("%d:%d", freshness_lifetime, current_age));
#endif
LLCACHE_LOG(("%d:%d", freshness_lifetime, current_age));
if ((cd->no_cache == LLCACHE_VALIDATE_FRESH) &&
(freshness_lifetime > current_age)) {
@ -903,11 +893,9 @@ static bool llcache_object_is_fresh(const llcache_object *object)
remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(cd);
#ifdef LLCACHE_TRACE
LOG(("%p: (%d > 0 || %d != %d)", object,
LLCACHE_LOG(("%p: (%d > 0 || %d != %d)", object,
remaining_lifetime,
object->fetch.state, LLCACHE_FETCH_COMPLETE));
#endif
/* The object is fresh if:
* - it was not forbidden from being returned from the cache
@ -995,9 +983,8 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
nserror error;
llcache_object *obj, *newest = NULL;
#ifdef LLCACHE_TRACE
LOG(("Searching cache for %s (%x %s %p)", url, flags, referer, post));
#endif
LLCACHE_LOG(("Searching cache for %s (%x %p %p)",
nsurl_access(url), flags, referer, post));
/* Search for the most recently fetched matching object */
for (obj = llcache->cached_objects; obj != NULL; obj = obj->next) {
@ -1014,9 +1001,7 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
/* Found a suitable object, and it's still fresh, so use it */
obj = newest;
#ifdef LLCACHE_TRACE
LOG(("Found fresh %p", obj));
#endif
LLCACHE_LOG(("Found fresh %p", obj));
/* The client needs to catch up with the object's state.
* This will occur the next time that llcache_poll is called.
@ -1029,9 +1014,7 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
if (error != NSERROR_OK)
return error;
#ifdef LLCACHE_TRACE
LOG(("Found candidate %p (%p)", obj, newest));
#endif
LLCACHE_LOG(("Found candidate %p (%p)", obj, newest));
/* Clone candidate's cache data */
error = llcache_object_clone_cache_data(newest, obj, true);
@ -1062,9 +1045,7 @@ static nserror llcache_object_retrieve_from_cache(nsurl *url, uint32_t flags,
if (error != NSERROR_OK)
return error;
#ifdef LLCACHE_TRACE
LOG(("Not found %p", obj));
#endif
LLCACHE_LOG(("Not found %p", obj));
/* Attempt to kick-off fetch */
error = llcache_object_fetch(obj, flags, referer, post,
@ -1103,9 +1084,8 @@ static nserror llcache_object_retrieve(nsurl *url, uint32_t flags,
bool has_query;
nsurl *defragmented_url;
#ifdef LLCACHE_TRACE
LOG(("Retrieve %s (%x, %s, %p)", url, flags, referer, post));
#endif
LLCACHE_LOG(("Retrieve %s (%x, %p, %p)",
nsurl_access(url), flags, referer, post));
/**
* Caching Rules:
@ -1158,9 +1138,7 @@ static nserror llcache_object_retrieve(nsurl *url, uint32_t flags,
obj->has_query = has_query;
#ifdef LLCACHE_TRACE
LOG(("Retrieved %p", obj));
#endif
LLCACHE_LOG(("Retrieved %p", obj));
*result = obj;
@ -1192,9 +1170,7 @@ static nserror llcache_object_add_user(llcache_object *object,
object->users->prev = user;
object->users = user;
#ifdef LLCACHE_TRACE
LOG(("Adding user %p to %p", user, object));
#endif
LLCACHE_LOG(("Adding user %p to %p", user, object));
return NSERROR_OK;
}
@ -1636,9 +1612,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
llcache_object *object = p;
llcache_event event;
#ifdef LLCACHE_TRACE
LOG(("Fetch event %d for %p", msg->type, object));
#endif
LLCACHE_LOG(("Fetch event %d for %p", msg->type, object));
switch (msg->type) {
case FETCH_HEADER:
@ -2180,9 +2154,7 @@ void llcache_clean(void)
uint32_t llcache_size = 0;
int remaining_lifetime;
#ifdef LLCACHE_TRACE
LOG(("Attempting cache clean"));
#endif
LLCACHE_LOG(("Attempting cache clean"));
/* Candidates for cleaning are (in order of priority):
*
@ -2200,9 +2172,8 @@ void llcache_clean(void)
(object->candidate_count == 0) &&
(object->fetch.fetch == NULL) &&
(object->fetch.outstanding_query == false)) {
#ifdef LLCACHE_TRACE
LOG(("Found victim %p", object));
#endif
LLCACHE_LOG(("Found victim %p", object));
llcache_object_remove_from_list(object,
&llcache->uncached_objects);
llcache_object_destroy(object);
@ -2227,9 +2198,8 @@ void llcache_clean(void)
llcache_size += object->source_len + sizeof(*object);
} else {
/* object is not fresh */
#ifdef LLCACHE_TRACE
LOG(("Found stale cacheable object (%p) with no users or pending fetches", object));
#endif
LLCACHE_LOG(("Found stale cacheable object (%p) with no users or pending fetches", object));
llcache_object_remove_from_list(object,
&llcache->cached_objects);
llcache_object_destroy(object);
@ -2251,9 +2221,8 @@ void llcache_clean(void)
(object->candidate_count == 0) &&
(object->fetch.fetch == NULL) &&
(object->fetch.outstanding_query == false)) {
#ifdef LLCACHE_TRACE
LOG(("Found victim %p", object));
#endif
LLCACHE_LOG(("Found victim %p", object));
llcache_size -=
object->source_len + sizeof(*object);
@ -2264,10 +2233,7 @@ void llcache_clean(void)
}
}
#ifdef LLCACHE_TRACE
LOG(("Size: %u", llcache_size));
#endif
LLCACHE_LOG(("Size: %u", llcache_size));
}
/* See llcache.h for documentation */