unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Daniel Colascione <dancol@dancol.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: raeburn@raeburn.org, emacs-devel@gnu.org
Subject: Re: RFC: flicker-free double-buffered Emacs under X11
Date: Thu, 27 Oct 2016 12:56:41 -0700	[thread overview]
Message-ID: <965a0fad-3e19-a72a-694b-558816ae23e0@dancol.org> (raw)
In-Reply-To: <db81befd-7a72-58d9-b7a8-107df89bcab3@dancol.org>

On 10/27/2016 12:44 PM, Daniel Colascione wrote:
> On 10/27/2016 12:36 PM, Eli Zaretskii wrote:
>>> Date: Thu, 27 Oct 2016 12:06:25 -0700
>>> From: dancol@dancol.org
>>> Cc: Daniel Colascione <dancol@dancol.org>, Ken Raeburn
>>> <raeburn@raeburn.org>,
>>>     emacs-devel@gnu.org
>>>
>>> Below is a new much-improved version of the patch. It should address the
>>> legibility concerns while probably adding more. It addresses all the
>>> bugs
>>> I've been able to find and on my machine, produces buttery smooth
>>> editing
>>> and resizing.
>>
>> Thanks.
>>
>>>>> Why _do_ we have a path that short-circuits the rest of the redisplay
>>>>> code? What would happen if we just removed it? It appears to be some
>>>>> kind of optimization, and I'm not sure it's actually necessary
>>>>> (especially since, according to the comment, we disable it anyway
>>>>> in the
>>>>> case of a blinking cursor).
>>>>
>>>> It's an optimization for the case that nothing needs to be
>>>> redisplayed.
>>>
>>> Isn't the "goto update" path fast enough?
>>
>> That would still call hscroll_windows and update_frame, which is just
>> waste of cycles when we know nothing's changed.
>>
>>> @@ -14072,6 +14072,17 @@ redisplay_internal (void)
>>>            if (!f_redisplay_flag && f->redisplay)
>>>                      goto retry_frame;
>>>
>>> +                  /* In some case (e.g., window resize), we notice
>>> +                     only during window updating that the window
>>> +                     content changed unpredictably (e.g., a GTK
>>> +                     scrollbar moved) and that our previous estimation
>>> +                     of the frame content was garbage.  We have to
>>> +                     start over.  These cases should be rare, so going
>>> +                     all the way back to the top of redisplay should
>>> +                     be good enough.  */
>>> +                  if (FRAME_GARBAGED_P (f))
>>> +                    goto retry;
>>
>> This worries me a bit: FRAME_GARBAGED_P returns non-zero for TTY
>> frames very frequently, whereas at least the comment seems to imply
>> this is needed only for GUI frames, perhaps even only in GTK builds.
>> If that is correct, then perhaps add a FRAME_WINDOW_P test here, to
>> avoid unnecessarily slowing down redisplay.
>
> Sure.
>

By the way: why would we ever _want_ to allow redisplay to return 
without having redrawn all garbaged frames? The design of redisplay 
suggests that a postcondition on redisplay_internal should be that 
there's nothing left to draw, at least in the case that we weren't 
interrupted by input.



  parent reply	other threads:[~2016-10-27 19:56 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-21  1:32 RFC: flicker-free double-buffered Emacs under X11 Daniel Colascione
2016-10-21  2:27 ` Lars Ingebrigtsen
2016-10-21  2:31   ` Daniel Colascione
2016-10-21  3:24 ` Óscar Fuentes
2016-10-21  3:31   ` Clément Pit--Claudel
2016-10-21  3:41     ` Óscar Fuentes
2016-10-21  3:50       ` Clément Pit--Claudel
2016-10-21  8:23     ` Andreas Schwab
2016-10-21  8:25       ` Andreas Schwab
2016-10-21  3:56 ` Clément Pit--Claudel
2016-10-21  8:49 ` Eli Zaretskii
2016-10-21 11:04   ` Daniel Colascione
2016-10-21 17:43     ` Eli Zaretskii
2016-10-21 18:27       ` Daniel Colascione
2016-10-21 19:27         ` Eli Zaretskii
2016-10-23 20:51           ` Daniel Colascione
2016-10-24  8:05             ` Eli Zaretskii
2016-10-24 18:43               ` Ken Raeburn
2016-10-27 19:06               ` dancol
2016-10-27 19:36                 ` Eli Zaretskii
     [not found]                   ` <db81befd-7a72-58d9-b7a8-107df89bcab3@dancol.org>
2016-10-27 19:56                     ` Daniel Colascione [this message]
2016-10-28  6:31                       ` Eli Zaretskii
2016-10-27 22:18                 ` Paul Eggert
2016-10-27 22:46                   ` Clément Pit--Claudel
2016-10-28 13:14                     ` Stefan Monnier
2016-11-01  0:03                       ` Dmitry Gutov
2016-10-27 23:10                   ` Daniel Colascione
2016-10-28  2:07                     ` Paul Eggert
2016-10-28  7:19                       ` Eli Zaretskii
2016-11-06  3:51                         ` Paul Eggert
2016-11-06 15:46                           ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=965a0fad-3e19-a72a-694b-558816ae23e0@dancol.org \
    --to=dancol@dancol.org \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=raeburn@raeburn.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).