summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Kendrick <rjek@netsurf-browser.org>2008-03-11 00:14:39 +0000
committerRob Kendrick <rjek@netsurf-browser.org>2008-03-11 00:14:39 +0000
commit4ec38922ac17f72a52cccb1e3ad875618ce00df5 (patch)
tree15bb061c9c22f7eda752e36374273706018da779
parentb91ad2b1ffdb2b52bcb23a81fb272ab5d4e9877b (diff)
downloadnetsurf-4ec38922ac17f72a52cccb1e3ad875618ce00df5.tar.gz
netsurf-4ec38922ac17f72a52cccb1e3ad875618ce00df5.tar.bz2
Change meaning of c->redraw_time to be the earliest time to reflow during page asset fetch. Have the time selected vary depending on how long the last reflow took.
svn path=/trunk/netsurf/; revision=3925
-rw-r--r--content/content.h6
-rw-r--r--desktop/options.c4
-rw-r--r--desktop/options.h2
-rw-r--r--render/html.c19
4 files changed, 21 insertions, 10 deletions
diff --git a/content/content.h b/content/content.h
index c49aef3a5..4f2fa0ed6 100644
--- a/content/content.h
+++ b/content/content.h
@@ -205,9 +205,9 @@ struct content {
LOADING or READY,
otherwise total time. */
- unsigned int reformat_time; /**< Time the HTML content was last
- reformatted. Used while fetching
- a page's objects. */
+ unsigned int reformat_time; /**< Earliest time to attempt a
+ period reflow while fetching a
+ page's objects. */
unsigned int size; /**< Estimated size of all data
associated with this content, except
diff --git a/desktop/options.c b/desktop/options.c
index cfa89abcc..9a1111c83 100644
--- a/desktop/options.c
+++ b/desktop/options.c
@@ -132,9 +132,9 @@ int option_scale = 100;
bool option_incremental_reflow = true;
/* Minimum time between HTML reflows while objects are fetching */
#ifdef riscos
-int option_min_reflow_period = 100; /* time in cs */
+unsigned int option_min_reflow_period = 100; /* time in cs */
#else
-int option_min_reflow_period = 25; /* time in cs */
+unsigned int option_min_reflow_period = 25; /* time in cs */
#endif
/* Fetcher configuration */
diff --git a/desktop/options.h b/desktop/options.h
index 6b9fd66e7..89e99969b 100644
--- a/desktop/options.h
+++ b/desktop/options.h
@@ -81,7 +81,7 @@ extern int option_window_screen_height;
extern int option_toolbar_status_width;
extern int option_scale;
extern bool option_incremental_reflow;
-extern int option_min_reflow_period;
+extern unsigned int option_min_reflow_period;
/* Fetcher configuration. */
extern int option_max_fetchers;
diff --git a/render/html.c b/render/html.c
index d7dff203a..e803f2ea6 100644
--- a/render/html.c
+++ b/render/html.c
@@ -407,6 +407,7 @@ bool html_convert(struct content *c, int width, int height)
xmlDoc *document;
xmlNode *html, *head;
union content_msg_data msg_data;
+ unsigned int time_before, time_taken;
/* finish parsing */
if (c->source_size == 0)
@@ -491,8 +492,15 @@ bool html_convert(struct content *c, int width, int height)
html_set_status(c, messages_get("Formatting"));
content_broadcast(c, CONTENT_MSG_STATUS, msg_data);
LOG(("Layout document"));
+ time_before = wallclock();
html_reformat(c, width, height);
- c->reformat_time = wallclock();
+ time_taken = wallclock() - time_before;
+ LOG(("Layout took %dcs", time_taken));
+ c->reformat_time = wallclock() +
+ ((time_taken < option_min_reflow_period ?
+ option_min_reflow_period : time_taken * 1.25));
+ LOG(("Scheduling relayout no sooner than %dcs",
+ c->reformat_time - wallclock()));
/*box_dump(c->data.html.layout->children, 0);*/
if (c->active == 0)
@@ -1417,10 +1425,13 @@ void html_object_callback(content_msg msg, struct content *object,
else if (option_incremental_reflow && msg == CONTENT_MSG_DONE &&
(c->status == CONTENT_STATUS_READY ||
c->status == CONTENT_STATUS_DONE) &&
- (option_min_reflow_period <
- (int)(wallclock() - c->reformat_time))) {
+ (wallclock() > c->reformat_time)) {
+ unsigned int time_before = wallclock(), time_taken;
content_reformat(c, c->available_width, c->height);
- c->reformat_time = wallclock();
+ time_taken = wallclock() - time_before;
+ c->reformat_time = wallclock() +
+ ((time_taken < option_min_reflow_period ?
+ option_min_reflow_period : time_taken * 1.25));
}
if (c->status == CONTENT_STATUS_READY)
html_set_status(c, "");