Shunt the schedule function definitions to desktop/schedule.h. Shunt the hlcache/llcache to using schedule to get their cleanups run.

svn path=/trunk/netsurf/; revision=12029
This commit is contained in:
Daniel Silverstone 2011-03-13 18:26:46 +00:00
parent c615507e15
commit 93e9bfe323
21 changed files with 102 additions and 61 deletions

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "amiga/os3support.h"
#include "amiga/schedule.h"

View File

@ -19,7 +19,7 @@
#include <sys/time.h>
#include <time.h>
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "atari/schedule.h"
#include "utils/log.h"

View File

@ -44,6 +44,7 @@
#include "content/urldb.h"
#include "desktop/netsurf.h"
#include "desktop/options.h"
#include "desktop/schedule.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/url.h"

View File

@ -26,6 +26,7 @@
#include "content/content.h"
#include "content/hlcache.h"
#include "desktop/schedule.h"
#include "utils/http.h"
#include "utils/log.h"
#include "utils/messages.h"
@ -74,7 +75,8 @@ static hlcache_entry *hlcache_content_list;
/** Ring of retrieval contexts */
static hlcache_retrieval_ctx *hlcache_retrieval_ctx_ring;
static void hlcache_clean(void);
static void hlcache_clean(void *ignored);
static nserror hlcache_llcache_callback(llcache_handle *handle,
const llcache_event *event, void *pw);
static bool hlcache_type_is_acceptable(llcache_handle *llcache,
@ -88,13 +90,31 @@ static void hlcache_content_callback(struct content *c,
* Public API *
******************************************************************************/
nserror
hlcache_initialise(llcache_query_callback cb, void *pw)
{
nserror ret = llcache_initialise(cb, pw);
if (ret != NSERROR_OK)
return ret;
/* Schedule the cache cleanup for 5 seconds time */
schedule(500, hlcache_clean, NULL);
return NSERROR_OK;
}
/* See hlcache.h for documentation */
void hlcache_finalise(void)
{
uint32_t num_contents, prev_contents;
hlcache_entry *entry;
hlcache_retrieval_ctx *ctx, *next;
/* Remove the hlcache_clean schedule */
schedule_remove(hlcache_clean, NULL);
/* Obtain initial count of contents remaining */
for (num_contents = 0, entry = hlcache_content_list;
entry != NULL; entry = entry->next) {
@ -107,7 +127,7 @@ void hlcache_finalise(void)
do {
prev_contents = num_contents;
hlcache_clean();
hlcache_clean(NULL);
for (num_contents = 0, entry = hlcache_content_list;
entry != NULL; entry = entry->next) {
@ -123,7 +143,7 @@ void hlcache_finalise(void)
LOG((" %p : %s (%d users)", entry,
content_get_url(&entry_handle), content_count_users(entry->content)));
} else {
LOG((" %p", entry));
LOG((" %p", entry));
}
}
@ -155,23 +175,9 @@ void hlcache_finalise(void)
/* See hlcache.h for documentation */
nserror hlcache_poll(void)
{
static uint32_t last_clean_time;
uint32_t now;
llcache_poll();
/* Only attempt to clean the cache every 5 seconds */
#define HLCACHE_CLEAN_INTERVAL_CS (500)
now = wallclock();
if (now > last_clean_time + HLCACHE_CLEAN_INTERVAL_CS) {
/* Give the cache a clean */
hlcache_clean();
last_clean_time = now;
}
#undef HLCACHE_CLEAN_INTERVAL_CS
return NSERROR_OK;
}
@ -368,7 +374,7 @@ nserror hlcache_handle_replace_callback(hlcache_handle *handle,
/**
* Attempt to clean the cache
*/
void hlcache_clean(void)
void hlcache_clean(void *ignored)
{
hlcache_entry *entry, *next;
@ -407,6 +413,12 @@ void hlcache_clean(void)
/* Destroy entry */
free(entry);
}
/* Attempt to clean the llcache */
llcache_clean();
/* Re-schedule ourselves for 5 seconds time */
schedule(500, hlcache_clean, NULL);
}
/**
@ -447,7 +459,7 @@ nserror hlcache_llcache_callback(llcache_handle *handle,
llcache_handle_abort(handle);
llcache_handle_release(handle);
free((char *) ctx->child.charset);
free((char *) ctx->child.charset);
free(ctx);
return error;
}

View File

@ -63,6 +63,15 @@ enum hlcache_retrieve_flag {
HLCACHE_RETRIEVE_MAY_DOWNLOAD = (1 << 31)
};
/**
* Initialise the high-level cache, preparing the llcache also.
*
* \param cb Query handler for llcache
* \param pw Pointer to llcache query handler data
* \return NSERROR_OK on success, appropriate error otherwise.
*/
nserror hlcache_initialise(llcache_query_callback cb, void *pw);
/**
* Finalise the high-level cache, destroying any remaining contents
*/

View File

@ -193,8 +193,6 @@ static nserror llcache_object_notify_users(llcache_object *object);
static nserror llcache_object_snapshot(llcache_object *object,
llcache_object **snapshot);
static nserror llcache_clean(void);
static nserror llcache_post_data_clone(const llcache_post_data *orig,
llcache_post_data **clone);
@ -307,8 +305,6 @@ void llcache_finalise(void)
/* See llcache.h for documentation */
nserror llcache_poll(void)
{
static uint32_t last_clean_time;
uint32_t now;
llcache_object *object;
fetch_poll();
@ -324,18 +320,6 @@ nserror llcache_poll(void)
llcache_object_notify_users(object);
}
/* Only attempt to clean the cache every 5 seconds */
#define LLCACHE_CLEAN_INTERVAL_CS (500)
now = wallclock();
if (now > last_clean_time + LLCACHE_CLEAN_INTERVAL_CS) {
/* Attempt to clean the cache */
llcache_clean();
last_clean_time = now;
}
#undef LLCACHE_CLEAN_INTERVAL_CS
return NSERROR_OK;
}
@ -1611,10 +1595,8 @@ nserror llcache_object_snapshot(llcache_object *object,
/**
* Attempt to clean the cache
*
* \return NSERROR_OK.
*/
nserror llcache_clean(void)
void llcache_clean(void)
{
llcache_object *object, *next;
uint32_t llcache_size = 0;
@ -1697,7 +1679,6 @@ nserror llcache_clean(void)
LOG(("Size: %u", llcache_size));
#endif
return NSERROR_OK;
}
/**
@ -2241,8 +2222,8 @@ nserror llcache_fetch_split_header(const char *data, size_t len, char **name,
* \return NSERROR_OK on success, appropriate error otherwise
*
* \note This function also has the side-effect of updating
* the cache control data for the object if an interesting
* header is encountered
* the cache control data for the object if an interesting
* header is encountered
*/
nserror llcache_fetch_parse_header(llcache_object *object, const char *data,
size_t len, char **name, char **value)

View File

@ -166,14 +166,19 @@ nserror llcache_initialise(llcache_query_callback cb, void *pw);
void llcache_finalise(void);
/**
* Cause the low-level cache to emit any pending notifications
* and attempt to clean the cache. No guarantee is made about
* what, if any, cache cleaning will occur.
* Cause the low-level cache to emit any pending notifications.
*
* \return NSERROR_OK on success, appropriate error otherwise.
*/
nserror llcache_poll(void);
/**
* Cause the low-level cache to attempt to perform cleanup. No
* guarantees are made as to whether or not cleanups will take
* place and what, if any, space savings will be made.
*/
void llcache_clean(void);
/**
* Retrieve a handle for a low-level cache object
*

View File

@ -51,6 +51,7 @@
#include "desktop/knockout.h"
#include "desktop/options.h"
#include "desktop/selection.h"
#include "desktop/schedule.h"
#include "desktop/textinput.h"
#include "desktop/plotters.h"

View File

@ -291,12 +291,6 @@ void global_history_add(const char *url);
void global_history_add_recent(const char *url);
char **global_history_get_recent(int *count);
/* In platform specific schedule.c. */
typedef void (*schedule_callback_fn)(void *p);
void schedule(int t, schedule_callback_fn callback, void *p);
void schedule_remove(schedule_callback_fn callback, void *p);
/* In platform specific theme_install.c. */
#ifdef WITH_THEME_INSTALL
void theme_install_start(struct hlcache_handle *c);

View File

@ -32,6 +32,7 @@
#include "content/urldb.h"
#include "desktop/cookies.h"
#include "desktop/options.h"
#include "desktop/schedule.h"
#include "desktop/tree.h"
#include "utils/messages.h"
#include "utils/log.h"

View File

@ -145,8 +145,9 @@ nserror netsurf_init(int *pargc,
setlocale(LC_ALL, "C");
fetch_init();
llcache_initialise(netsurf_llcache_query_handler, NULL);
/* Initialise the hlcache and allow it to init the llcache for us */
hlcache_initialise(netsurf_llcache_query_handler, NULL);
/* Initialize system colours */
gui_system_colour_init();

32
desktop/schedule.h Normal file
View File

@ -0,0 +1,32 @@
/*
* Copyright 2011 Daniel Silverstone <dsilvers@netsurf-browser.org>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
* NetSurf is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Job scheduler (interface).
*/
#ifndef _NETSURF_DESKTOP_SCHEDULE_H_
#define _NETSURF_DESKTOP_SCHEDULE_H_
/* In platform specific schedule.c. */
typedef void (*schedule_callback_fn)(void *p);
void schedule(int t, schedule_callback_fn callback, void *p);
void schedule_remove(schedule_callback_fn callback, void *p);
#endif

View File

@ -37,6 +37,7 @@
#include "desktop/netsurf.h"
#include "desktop/options.h"
#include "desktop/shape.h"
#include "desktop/schedule.h"
#include "utils/resource.h"
#include "utils/log.h"
#include "utils/url.h"

View File

@ -18,8 +18,9 @@
#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "framebuffer/schedule.h"
#include "utils/log.h"

View File

@ -20,7 +20,7 @@
#include <stdlib.h>
#include <stdbool.h>
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "gtk/schedule.h"
#ifdef DEBUG_GTK_SCHEDULE

View File

@ -38,7 +38,7 @@
#include <libnsgif.h>
#include "utils/config.h"
#include "content/content_protected.h"
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "desktop/options.h"
#include "desktop/plotters.h"
#include "image/bitmap.h"

View File

@ -33,7 +33,7 @@
#include <sys/time.h>
#include <time.h>
#include <libmng.h>
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "desktop/options.h"
#include "desktop/plotters.h"
#include "image/bitmap.h"

View File

@ -20,7 +20,7 @@
#include <stdlib.h>
#include <stdbool.h>
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "gtk/schedule.h"
#undef DEBUG_MONKEY_SCHEDULE

View File

@ -34,6 +34,7 @@
#include "desktop/browser.h"
#include "desktop/gui.h"
#include "desktop/options.h"
#include "desktop/schedule.h"
#include "image/bitmap.h"
#include "render/box.h"
#include "render/favicon.h"

View File

@ -27,6 +27,7 @@
#include "oslib/os.h"
#include "riscos/gui.h"
#include "utils/log.h"
#include "desktop/schedule.h"
/** Entry in the queue of scheduled callbacks. */

View File

@ -19,7 +19,7 @@
#include <sys/time.h>
#include <time.h>
#include "desktop/browser.h"
#include "desktop/schedule.h"
#include "framebuffer/schedule.h"
#include "utils/log.h"