diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2011-06-04 21:10:39 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2011-06-04 21:10:39 +0000 |
commit | 522ddf041605a765fee18732037fa8641935aa21 (patch) | |
tree | e0cf91790a2f03afada4fb7ce90e12e0ec38ffdf /desktop/tree.c | |
parent | 48a0663999aed29a46fdd001a2161e12ffc81da3 (diff) | |
download | netsurf-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.c | 20 |
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; |