Re-enable asynchronous backing store writes

This commit is contained in:
Chris Young 2014-11-22 16:52:27 +00:00
commit 4589cab433
5 changed files with 124 additions and 7 deletions

View File

@ -26,10 +26,6 @@ NETSURF_USE_AMIGA_DATATYPES := YES
# Valid options: YES, NO
NETSURF_USE_NSSVG := YES
# Enable building the source object cache filesystem based backing store.
# Valid options: YES, NO
NETSURF_FS_BACKING_STORE := YES
# Enable NetSurf's use of Spidermonkey 1.80+
# Only here to stop the build complaining;
# enable NETSURF_USE_MOZJS instead for JavaScript support

View File

@ -72,7 +72,7 @@ S_AMIGA := gui.c tree.c history.c hotlist.c schedule.c file.c \
sslcert.c gui_options.c print.c theme.c drag.c icon.c libs.c \
datatypes.c dt_picture.c dt_anim.c dt_sound.c plugin_hack.c \
stringview/stringview.c stringview/urlhistory.c \
agclass/amigaguide_class.c
agclass/amigaguide_class.c fs_backing_store.c
S_AMIGA := $(addprefix amiga/,$(S_AMIGA))
# This is the final source build list

98
amiga/fs_backing_store.c Normal file
View File

@ -0,0 +1,98 @@
/*
* Copyright 2014 Chris Young <chris@unsatisfactorysoftware.co.uk>
*
* 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/>.
*/
#include <proto/dos.h>
#include <proto/exec.h>
#include "content/fs_backing_store.c"
struct ami_backing_store_write {
nsurl *url;
enum backing_store_flags flags;
uint8_t *data;
size_t datalen;
};
static int32 ami_backing_store_write_process(STRPTR args, int32 length, APTR execbase)
{
struct Process *proc = (struct Process *)FindTask(NULL);
struct ami_backing_store_write *absw = proc->pr_Task.tc_UserData;
filesystem_llcache_table->store(absw->url, absw->flags, absw->data, absw->datalen);
FreeVec(absw);
return RETURN_OK;
}
/**
* Place an object in the backing store.
* This implementation starts a new process and calls the core routine.
*
* @param url The url is used as the unique primary key for the data.
* @param flags The flags to control how the object is stored.
* @param data The objects source data.
* @param datalen The length of the \a data.
* @return NSERROR_OK on success or error code on faliure.
*/
static nserror
ami_backing_store_store(nsurl *url,
enum backing_store_flags flags,
const uint8_t *data,
const size_t datalen)
{
struct ami_backing_store_write *absw =
AllocVecTagList(sizeof(struct ami_backing_store_write), NULL);
if(absw == NULL) return NSERROR_NOMEM;
absw->url = url;
absw->flags = flags;
absw->data = (uint8_t *)data;
absw->datalen = datalen;
struct Process *proc = CreateNewProcTags(
NP_Name, "NetSurf backing store write process",
NP_Entry, ami_backing_store_write_process,
NP_Child, TRUE,
NP_StackSize, 16384,
NP_Priority, -1,
NP_UserData, absw,
TAG_DONE);
if(proc == NULL) {
FreeVec(absw);
return NSERROR_NOMEM;
}
return NSERROR_OK;
}
static struct gui_llcache_table amiga_llcache_table = {
.initialise = initialise,
.finalise = finalise,
.store = ami_backing_store_store,
.fetch = fetch,
.invalidate = invalidate,
.release = release,
};
struct gui_llcache_table *amiga_filesystem_llcache_table = &amiga_llcache_table;

23
amiga/fs_backing_store.h Normal file
View File

@ -0,0 +1,23 @@
/*
* Copyright 2014 Chris Young <chris@unsatisfactorysoftware.co.uk>
*
* 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/>.
*/
#ifndef AMIGA_FS_BACKING_STORE_H
#define AMIGA_FS_BACKING_STORE_H
extern struct gui_llcache_table *amiga_filesystem_llcache_table;
#endif

View File

@ -93,7 +93,6 @@
#include "utils/utils.h"
#include "utils/nsurl.h"
#include "utils/file.h"
#include "content/backing_store.h"
#include "content/fetchers.h"
#include "content/fetchers/resource.h"
#include "content/urldb.h"
@ -126,6 +125,7 @@
#include "amiga/file.h"
#include "amiga/filetype.h"
#include "amiga/font.h"
#include "amiga/fs_backing_store.h"
#include "amiga/gui_options.h"
#include "amiga/help.h"
#include "amiga/history.h"
@ -5310,7 +5310,7 @@ int main(int argc, char** argv)
.utf8 = amiga_utf8_table,
.search = amiga_search_table,
.search_web = &amiga_search_web_table,
.llcache = filesystem_llcache_table,
.llcache = amiga_filesystem_llcache_table,
};
signal(SIGINT, SIG_IGN);