X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-terminal%2Fgrdev.c;h=0c21eac5512d37f8a98516c48ac9c907b4bd5c90;hb=b7af2c8740e91a73348457fade97609b93e70a8d;hp=aaac06ec3435eddd9c609cdfc6ad1b5a7723ae11;hpb=158c1e3e0c1e9dd8ebf1b93061e1c81805eac339;p=elogind.git diff --git a/src/libsystemd-terminal/grdev.c b/src/libsystemd-terminal/grdev.c index aaac06ec3..0c21eac55 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,52 +374,38 @@ 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; - } - /* if back-buffer is up-to-date, schedule flip */ - if (minage > 0 && fb->age >= minage) { - grdev_display_flip_target(display, target, fb->age); - continue; + assert(fb == pipe->back); } - /* we have an out-of-date back-buffer; return for redraw */ - target->fb = fb; + target->front = pipe->front; + target->back = pipe->back; + return target; } return NULL; } -void grdev_display_flip_target(grdev_display *display, const grdev_display_target *target, uint64_t age) { +void grdev_display_flip_target(grdev_display *display, const grdev_display_target *target) { grdev_display_cache *cache; - size_t i; assert(display); assert(!display->modified); assert(display->enabled); assert(target); - assert(target->fb); cache = container_of(target, grdev_display_cache, target); assert(cache->pipe); assert(cache->pipe->tile->display == display); - /* reset age of all FB on overflow */ - if (age < target->fb->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; cache->pipe->flip = true; }