summaryrefslogtreecommitdiff
path: root/content/handlers/image/image_cache.h
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2016-05-23 23:32:16 +0100
committerVincent Sanders <vince@kyllikki.org>2016-05-23 23:32:16 +0100
commit3224d7121aff91ab8d888831dc493ef621e3dd39 (patch)
tree5e4585fd78b6b247a5e602ea1a1d55e0dfe206fb /content/handlers/image/image_cache.h
parent93be8d805e7e1f32638015770446476fef22ceac (diff)
downloadnetsurf-3224d7121aff91ab8d888831dc493ef621e3dd39.tar.gz
netsurf-3224d7121aff91ab8d888831dc493ef621e3dd39.tar.bz2
move image content handlers to accomodate core build changes
Diffstat (limited to 'content/handlers/image/image_cache.h')
-rw-r--r--content/handlers/image/image_cache.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/content/handlers/image/image_cache.h b/content/handlers/image/image_cache.h
new file mode 100644
index 000000000..2f1a5caee
--- /dev/null
+++ b/content/handlers/image/image_cache.h
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2011 John-Mark Bell <jmb@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
+ * The image content handler intermediate image cache.
+ *
+ * This cache allows netsurf to use a generic intermediate bitmap
+ * format without keeping the
+ * intermediate representation in memory.
+ *
+ * The bitmap structure is opaque to the rest of netsurf and is
+ * controlled by the platform-specific code (see image/bitmap.h for
+ * detials). All image content handlers convert into this format and
+ * pass it to the plot functions for display,
+ *
+ * This cache maintains a link between the underlying original content
+ * and the intermediate representation. It is intended to be flexable
+ * and either manage the bitmap plotting completely or give the image
+ * content handler complete control.
+ */
+
+#ifndef NETSURF_IMAGE_IMAGE_CACHE_H_
+#define NETSURF_IMAGE_IMAGE_CACHE_H_
+
+#include "utils/errors.h"
+
+struct content_redraw_data;
+struct redraw_context;
+
+typedef struct bitmap * (image_cache_convert_fn) (struct content *content);
+
+struct image_cache_parameters {
+ /** How frequently the background cache clean process is run (ms) */
+ unsigned int bg_clean_time;
+
+ /** The target upper bound for the image cache size */
+ size_t limit;
+
+ /** The hysteresis allowed round the target size */
+ size_t hysteresis;
+
+ /** The speculative conversion "small" size */
+ size_t speculative_small;
+};
+
+/** Initialise the image cache
+ *
+ * @param image_cache_parameters The control parameters for the image cache
+ */
+nserror image_cache_init(const struct image_cache_parameters *image_cache_parameters);
+nserror image_cache_fini(void);
+
+/** adds an image content to be cached.
+ *
+ * @param content The content handle used as a key
+ * @param bitmap A bitmap representing the already converted content or NULL.
+ * @param convert A function pointer to convert the content into a bitmap or NULL.
+ * @return A netsurf error code.
+ */
+nserror image_cache_add(struct content *content,
+ struct bitmap *bitmap,
+ image_cache_convert_fn *convert);
+
+nserror image_cache_remove(struct content *content);
+
+
+/** Obtain a bitmap from a content converting from source if neccessary. */
+struct bitmap *image_cache_get_bitmap(const struct content *c);
+
+/** Obtain a bitmap from a content with no conversion */
+struct bitmap *image_cache_find_bitmap(struct content *c);
+
+/** Decide if a content should be speculatively converted.
+ *
+ * This allows for image content handlers to ask the cache if a bitmap
+ * should be generated before it is added to the cache. This is the
+ * same decision logic used to decide to perform an immediate
+ * conversion when a content is initially added to the cache.
+ *
+ * @param c The content to be considered.
+ * @return true if a speculative conversion is desired false otherwise.
+ */
+bool image_cache_speculate(struct content *c);
+
+/**
+ * Fill a buffer with information about a cache entry using a format.
+ *
+ * The format string is copied into the output buffer with the
+ * following replaced:
+ * %e - The entry number
+ * %k - The content key
+ * %r - The number of redraws of this bitmap
+ * %c - The number of times this bitmap has been converted
+ * %s - The size of the current bitmap allocation
+ *
+ * \param string The buffer in which to place the results.
+ * \param size The size of the string buffer.
+ * \param entryn The opaque entry number.
+ * \param fmt The format string.
+ * \return The number of bytes written to \a string or -1 on error
+ */
+int image_cache_snentryf(char *string, size_t size, unsigned int entryn,
+ const char *fmt);
+
+/**
+ * Fill a buffer with information about the image cache using a format.
+ *
+ * The format string is copied into the output buffer with the
+ * following replaced:
+ *
+ * a Configured cache limit size
+ * b Configured cache hysteresis size
+ * c Current caches total consumed size
+ * d Number of images currently in the cache
+ * e The age of the cache
+ * f The largest amount of space the cache has occupied since initialisation
+ * g The number of objetcs when the cache was at its largest
+ * h The largest number of images in the cache since initialisation
+ * i The size of the cache when the largest number of objects occoured
+ * j The total number of read operations performed on the cache
+ * k The total number of read operations satisfied from the cache without
+ * conversion.
+ * l The total number of read operations satisfied from the cache which
+ * required a conversion.
+ * m The total number of read operations which could not be sucessfully
+ * returned. ie. not available in cache and conversion failed.
+ * n The total size of read operations performed on the cache
+ * o The total size of read operations satisfied from the cache without
+ * conversion.
+ * q The total size of read operations satisfied from the cache which
+ * required a conversion.
+ * r The total size of read operations which could not be sucessfully
+ * returned. ie. not available in cache and conversion failed.
+ * s The number of images which were placed in the cache but never read.
+ * t The number of images that were converted on insertion into the cache which were subsequently never used.
+ * u The number of times an image was converted after the first
+ * v The number of images that had extra conversions performed.
+ * w Size of the image that was converted (read missed cache) highest number
+ * of times.
+ * x The number of times the image that was converted (read missed cache)
+ * highest number of times.
+ *
+ * format modifiers:
+ * A p before the value modifies the replacement to be a percentage.
+ *
+ *
+ * \param string The buffer in which to place the results.
+ * \param size The size of the string buffer.
+ * \param fmt The format string.
+ * \return The number of bytes written to \a string or -1 on error
+ */
+
+int image_cache_snsummaryf(char *string, size_t size, const char *fmt);
+
+/********* Image content handler generic cache callbacks ************/
+
+/** Generic content redraw callback
+ *
+ * May be used by image content handlers as their redraw
+ * callback. Performs all neccissary cache lookups and conversions and
+ * calls the bitmap plot function in the redraw context.
+ */
+bool image_cache_redraw(struct content *c,
+ struct content_redraw_data *data,
+ const struct rect *clip,
+ const struct redraw_context *ctx);
+
+void image_cache_destroy(struct content *c);
+
+void *image_cache_get_internal(const struct content *c, void *context);
+
+content_type image_cache_content_type(void);
+
+#endif