summaryrefslogtreecommitdiff
path: root/desktop/tree.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2011-06-04 21:10:39 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2011-06-04 21:10:39 +0000
commit522ddf041605a765fee18732037fa8641935aa21 (patch)
treee0cf91790a2f03afada4fb7ce90e12e0ec38ffdf /desktop/tree.c
parent48a0663999aed29a46fdd001a2161e12ffc81da3 (diff)
downloadnetsurf-522ddf041605a765fee18732037fa8641935aa21.tar.gz
netsurf-522ddf041605a765fee18732037fa8641935aa21.tar.bz2
Rudimentary text width caching to speed up many duplicate "Today", "Yesterday" calcs
svn path=/trunk/netsurf/; revision=12461
Diffstat (limited to 'desktop/tree.c')
-rw-r--r--desktop/tree.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/desktop/tree.c b/desktop/tree.c
index 696b4356f..695899fa4 100644
--- a/desktop/tree.c
+++ b/desktop/tree.c
@@ -273,6 +273,8 @@ static void tree_recalculate_node_element(struct tree *tree,
{
struct bitmap *bitmap = NULL;
int width, height;
+ static char *cache_text = NULL;
+ static int cache_size = 0;
assert(element != NULL);
@@ -286,10 +288,20 @@ static void tree_recalculate_node_element(struct tree *tree,
textarea_get_dimensions(tree->textarea,
&element->box.width, NULL);
} else {
- nsfont.font_width(&plot_fstyle,
- element->text,
- strlen(element->text),
- &element->box.width);
+ if ((cache_text != NULL) &&
+ (strcmp(cache_text, element->text) == 0)) {
+ element->box.width = cache_size;
+ #ifdef TREE_NOISY_DEBUG
+ LOG(("Tree font width cache hit"));
+ #endif
+ } else {
+ nsfont.font_width(&plot_fstyle,
+ element->text,
+ strlen(element->text),
+ &cache_size);
+ element->box.width = cache_size;
+ cache_text = strdup(element->text);
+ }
}
element->box.width += 8;