summaryrefslogtreecommitdiff
path: root/src/libsystemd-terminal/grdev.c
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2014-10-02 18:26:06 +0200
committerDavid Herrmann <dh.herrmann@gmail.com>2014-10-03 15:57:00 +0200
commit51cff8bdedbc283b2403ab4a688903d8b1f2fab5 (patch)
tree8514ad964d0ba061244a8944c1fe4194cd77ef06 /src/libsystemd-terminal/grdev.c
parentaec3f44651998211d559b474bb830aad65680a62 (diff)
terminal/grdev: provide front and back buffer to renderers
We really want more sophisticated aging than just 64bit integers. So always provide front *and* back buffers to renderers so they can compare arbitrary aging information and decide whether to re-render.
Diffstat (limited to 'src/libsystemd-terminal/grdev.c')
-rw-r--r--src/libsystemd-terminal/grdev.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/src/libsystemd-terminal/grdev.c b/src/libsystemd-terminal/grdev.c
index bbc45afad4..a700a7316b 100644
--- a/src/libsystemd-terminal/grdev.c
+++ b/src/libsystemd-terminal/grdev.c
@@ -343,7 +343,7 @@ void grdev_display_disable(grdev_display *display) {
}
}
-const grdev_display_target *grdev_display_next_target(grdev_display *display, const grdev_display_target *prev, uint64_t minage) {
+const grdev_display_target *grdev_display_next_target(grdev_display *display, const grdev_display_target *prev) {
grdev_display_cache *cache;
size_t idx;
@@ -374,26 +374,19 @@ const grdev_display_target *grdev_display_next_target(grdev_display *display, co
if (!pipe->running || !pipe->enabled)
continue;
- /* if front-buffer is up-to-date, there's nothing to do */
- if (minage > 0 && pipe->front && pipe->front->age >= minage)
- continue;
-
/* find suitable back-buffer */
- if (!(fb = pipe->back)) {
- if (!pipe->vtable->target || !(fb = pipe->vtable->target(pipe)))
+ if (!pipe->back) {
+ if (!pipe->vtable->target)
+ continue;
+ if (!(fb = pipe->vtable->target(pipe)))
continue;
assert(fb == pipe->back);
}
- /* if back-buffer is up-to-date, schedule flip */
- if (minage > 0 && fb->age >= minage) {
- grdev_display_flip_target(display, target, fb->age);
- continue;
- }
+ target->front = pipe->front;
+ target->back = pipe->back;
- /* we have an out-of-date back-buffer; return for redraw */
- target->fb = fb;
return target;
}
@@ -408,7 +401,7 @@ void grdev_display_flip_target(grdev_display *display, const grdev_display_targe
assert(!display->modified);
assert(display->enabled);
assert(target);
- assert(target->fb);
+ assert(target->back);
cache = container_of(target, grdev_display_cache, target);
@@ -416,12 +409,12 @@ void grdev_display_flip_target(grdev_display *display, const grdev_display_targe
assert(cache->pipe->tile->display == display);
/* reset age of all FB on overflow */
- if (age < target->fb->age)
+ if (age < target->back->age)
for (i = 0; i < cache->pipe->max_fbs; ++i)
if (cache->pipe->fbs[i])
cache->pipe->fbs[i]->age = 0;
- ((grdev_fb*)target->fb)->age = age;
+ ((grdev_fb*)target->back)->age = age;
cache->pipe->flip = true;
}