Resurrecting this old thread. This issue should now be resolved with this commit: https://github.com/racket/gui/commit/20e589c091998b0121505e25c7ff2f95e8116dcb
No need to use PLT_DISPLAY_BACKING_SCALE with this fix. Evan On Thursday, May 28, 2020 at 4:18:44 AM UTC-10 evdubs wrote: > I suppose that may be helpful, but this performance issue extends to any > other Racket GUI application on Linux, including the simple editor example > from earlier in this thread. Maybe printing something to a console could > help, but it would be better if there was some fix to improve fractional > scaling performance :) > > Evan > > On Thursday, May 28, 2020 at 2:37:49 AM UTC-10, Jens Axel Søgaard wrote: > >> Slack users confirm the problem when the backing scale is 1.5. >> >> Should DrRacket give a warning dialog on Linux, when started with a >> non-integer backing scale? >> >> /Jens Axel >> >> >> Den ons. 13. maj 2020 kl. 05.48 skrev evdubs <[email protected]>: >> > I did some more digging and found locations in racket/draw that control >>> antialiasing. I tried changing them around, and saw no impact on >>> performance. >>> >>> However, I eventually stumbled upon the environment variable >>> PLT_DISPLAY_BACKING_SCALE. By using an integer value for this variable, >>> performance is nice and smooth (I tried 1 and 2; trying 1.25 and 1.5 hurt >>> performance). In Ubuntu, I do not have my display set to a fractional >>> scaling value, but I do have "Large Text" enabled. I am unsure if this >>> setting interferes with whatever PLT_DISPLAY_BACKING_SCALE defaults to. >>> >>> If you're having typing lag issues on Linux within Dr Racket or other >>> Racket GUI applications, you may want to try PLT_DISPLAY_BACKING_SCALE=1 to >>> see if that affects performance. >>> >>> Evan >>> >>> On Monday, May 11, 2020 at 2:05:06 PM UTC-10, evdubs wrote: >>>> >>>> I think what I have seen previously with setting the canvas style to >>>> 'transparent ultimately is turning off antialiasing in Cairo. >>>> >>>> Using the sample text editor from this thread, I ran the following: >>>> >>>> $ cairo-trace racket text-editor.rkt >>>> $ cairo-trace racket text-editor-transparent.rkt >>>> >>>> In the non-transparent version, we see these two lines: >>>> >>>> 16 0 0 16 0 0 matrix 2 0 0 2 0 0 matrix << /antialias >>>> //ANTIALIAS_SUBPIXEL /subpixel-order //SUBPIXEL_ORDER_RGB /hint-style >>>> //HINT_STYLE_SLIGHT /hint-metrics //HINT_METRICS_ON >> scaled-font /sf0 >>>> exch def >>>> f0 32 0 0 32 0 0 matrix 2 0 0 2 0 0 matrix << /antialias >>>> //ANTIALIAS_SUBPIXEL /subpixel-order //SUBPIXEL_ORDER_RGB /hint-style >>>> //HINT_STYLE_SLIGHT /hint-metrics //HINT_METRICS_ON >> scaled-font /sf1 >>>> exch def >>>> >>>> These lines look like this in the transparent version: >>>> >>>> 16 0 0 16 0 0 matrix 2 0 0 2 0 0 matrix << /hint-metrics >>>> //HINT_METRICS_ON >> scaled-font /sf0 exch def >>>> f0 32 0 0 32 0 0 matrix 2 0 0 2 0 0 matrix << /hint-metrics >>>> //HINT_METRICS_ON >> scaled-font /sf1 exch def >>>> >>>> I am not really sure how this initialization is happening. Can someone >>>> help me poke through the code to see how I might disable antialiasing? >>>> Should I try to make changes to gui-lib/mred/private/wx/gtk/gcwin.rkt? >>>> >>>> Evan >>>> >>>> On Friday, March 29, 2019 at 12:29:11 AM UTC-10, Bryan Lee wrote: >>>>> >>>>> I’m facing the same issues, and I came across an interesting >>>>> observation. >>>>> >>>>> It seems that DrRacket mimics scrolling behaviour by literally >>>>> replacing each line of code with the line above or below, and uses a >>>>> really >>>>> inefficient method of tracking which lines should go where, thereby >>>>> limiting how fast you can “scroll”. >>>>> >>>>> I realised that resizing the window horizontally does nothing to >>>>> improve performance, but shrinking the window height significantly >>>>> improved >>>>> performance, even if the canvas area is adjusted to remain the same. >>>>> >>>>> In addition to some function definitions in unit.rkt describing the >>>>> transposing of lines, that leads me to my conclusion. >>>>> >>>>> Thoughts? >>>>> >>>>> >>>>> >>>>> On Friday, 2 November 2018 10:46:29 UTC+8, evdubs wrote: >>>>> > Resurrecting an old thread. >>>>> > >>>>> > >>>>> > I recently tried to see what would happen if I changed the >>>>> interactions-canvas% and definitions-canvas% to be the following: >>>>> > >>>>> > >>>>> > (define interactions-canvas% >>>>> > (class editor-canvas% >>>>> > (init [style '(transparent)]) >>>>> > (super-new (style (cons 'auto-hscroll style))) >>>>> > (inherit set-scroll-via-copy) >>>>> > (set-scroll-via-copy #t))) >>>>> > >>>>> > >>>>> > >>>>> > (define definitions-canvas% >>>>> > (class editor-canvas% >>>>> > (init [style '(transparent)]) >>>>> > (super-new (style (cons 'auto-hscroll style))) >>>>> > (inherit set-scroll-via-copy) >>>>> > (set-scroll-via-copy #t))) >>>>> > >>>>> > >>>>> > This seemed to work well for entering text into a blank file, but >>>>> opening another file still showed the same lag. I was able to remove this >>>>> last bit of lag by unchecking Edit / Preferences / Editing / General >>>>> Editing / Color syntax interactively. I can now enter text into Dr Racket >>>>> as smoothly as I can in most other text editors and even the example >>>>> 'transparent editor-canvas% text editor. Background expansion can even be >>>>> enabled without incurring a per-character-entered performance hit. >>>>> > >>>>> > >>>>> > >>>>> > I do not know why setting 'transparent helps the performance of >>>>> editor-canvas%. Likewise, I do not know why interactive syntax coloring >>>>> also incurs a noticeable performance hit. As a reminder, this is mostly a >>>>> problem for large resolution displays. Shrinking the DrRacket window will >>>>> improve performance at the cost of not being able to see as much of the >>>>> text. >>>>> > >>>>> > >>>>> > >>>>> > If anyone has advice for why this might be so, or how to better >>>>> profile this code to determine what can be improved, please share. I do >>>>> not >>>>> think my current modifications merit a PR to the DrRacket repository. >>>>> > >>>>> > >>>>> > Evan >>>>> > >>>>> > >>>>> > On Wednesday, February 21, 2018 at 10:50:58 PM UTC-10, evdubs wrote: >>>>> > My apologies for the continued spam, but it feels like I am close to >>>>> having buttery-smooth text editing in DrRacket on large resolution >>>>> windows. >>>>> I just need some help :) >>>>> > >>>>> > When I set the interactions-canvas% and definitions-canvas% in >>>>> unit.rkt to have the 'transparent style (after hacking the background >>>>> handling to not throw an exception when 'transparent is set while >>>>> backgrounds are being set), I can get smooth text entry in DrRacket until >>>>> it starts getting really buggy due to my hack (like when inserting an >>>>> end-parenthesis or when resizing the window). So, it seems like what is >>>>> desired here is something like 'transparent in editor-canvas% that isn't >>>>> forcing flushes or refreshes while respecting the background setting. It >>>>> looks like canvas% provides 'no-autoclear, but editor-canvas% does not. I >>>>> am not sure where to start to see if implementing that in editor-canvas% >>>>> makes sense. Also, I tried to set lazy-refresh for the >>>>> interactions-canvas% >>>>> and definitions-canvas% but this does not seem to have the same >>>>> performance >>>>> impact as 'transparent. >>>>> > >>>>> > Anyway, if someone still happens to be following along with this and >>>>> has any ideas for what to do here, please let me know. >>>>> > >>>>> > Evan >>>>> > >>>>> > On Wednesday, February 21, 2018 at 10:42:22 AM UTC-10, evdubs wrote: >>>>> > I played around with is a bit more and noticed that setting >>>>> editor-canvas%'s style to (list 'transparent) greatly increases the >>>>> performance of the simple editor to where it performs just like any other >>>>> text editor. However, I tried applying this to DrRacket in >>>>> drracket/drracket/private/app.rkt and this did not seem to make much of a >>>>> difference. Anyway, I think the key to improving performance here is >>>>> still >>>>> the removal of the call to gdk_window_process_all_updates. The "improved" >>>>> editor looks like: >>>>> > >>>>> > >>>>> > >>>>> > #lang racket >>>>> > >>>>> > (require racket/gui) >>>>> > (define frame (new frame% [label "Simple Edit"] >>>>> > [width 1800] >>>>> > [height 1800])) >>>>> > (define canvas (new editor-canvas% [parent frame] >>>>> > [style (list 'transparent)])) >>>>> > (define text (new text%)) >>>>> > (send canvas set-editor text) >>>>> > (send frame show #t) >>>>> > >>>>> > >>>>> > >>>>> > Evan >>>>> > >>>>> > On Sunday, February 11, 2018 at 11:41:53 AM UTC-10, evdubs wrote: >>>>> > I created PR 95 to remove the call to >>>>> gdk_window_process_all_updates. I am still unsure if there are legacy or >>>>> compatibility reasons for having this call. >>>>> > >>>>> > Evan >>>>> > >>>>> > On Saturday, February 10, 2018 at 12:39:58 PM UTC-10, evdubs wrote: >>>>> > I made the following change to window.rkt's flush-display >>>>> > >>>>> > >>>>> > >>>>> > (define (flush-display) >>>>> > (try-to-sync-refresh) >>>>> > ;; (gdk_window_process_all_updates) >>>>> > (gdk_display_flush (gdk_display_get_default))) >>>>> > >>>>> > >>>>> > I made this change after finding the following note for the >>>>> gdk_window_process_all_updates documentation >>>>> > >>>>> > gdk_window_process_all_updates has been deprecated since version >>>>> 3.22 and should not be used in newly-written code. >>>>> > Things run much better now in DrRacket (and in the little editor >>>>> example), but still the performance isn't great. >>>>> > >>>>> > I would create a pull request with the removal of >>>>> gdk_window_process_all_updates but I don't know if there are other Racket >>>>> instances out there relying on older GTK versions that need this call. Is >>>>> there a way to check for that? >>>>> > >>>>> > Evan >>>>> > >>>>> > On Saturday, February 10, 2018 at 11:08:16 AM UTC-10, evdubs wrote: >>>>> > I had to add a sampler to that code so what I really had was this: >>>>> > >>>>> > >>>>> > >>>>> > #lang racket/gui >>>>> > >>>>> > (require profile) >>>>> > (require profile/analyzer) >>>>> > (require profile/render-text) >>>>> > (require profile/sampler) >>>>> > >>>>> > (define s (create-sampler (current-thread) 0.0)) >>>>> > >>>>> > (s 'get-snapshots) >>>>> > >>>>> > (define ec% >>>>> > (class editor-canvas% >>>>> > (define/override (on-paint) >>>>> > (profile (super on-paint) #:threads #t #:order 'self)) >>>>> > (define/override (on-char e) >>>>> > (profile (super on-char e) #:threads #t #:order 'self)) >>>>> > (super-new))) >>>>> > (define frame (new frame% [label "Simple Edit"] >>>>> > [width 1800] >>>>> > [height 1800])) >>>>> > >>>>> > (define canvas (new ec% [parent frame])) >>>>> > (define text (new text%)) >>>>> > (send canvas set-editor text) >>>>> > (send frame show #t) >>>>> > Then, I could use the following in the interactions window to get >>>>> results after typing in some text to the text editor. >>>>> > >>>>> > >>>>> > >>>>> > (render (analyze-samples (s 'get-snapshots))) >>>>> > Here are my results for the rows that had significant values for >>>>> "self" >>>>> > >>>>> > >>>>> > >>>>> > >>>>> ================================================================================================================ >>>>> >>>>> >>>>> > Caller >>>>> > Idx Total Self Name+src >>>>> Local% >>>>> > ms(pct) ms(pct) Callee >>>>> > >>>>> ================================================================================================================ >>>>> >>>>> >>>>> > call-with-break-parameterization >>>>> [2] 100.0% >>>>> > [5] 19000(10.6%) 6221(3.5%) dispatch-on-char method in window% >>>>> ...ow.rkt:778:4 >>>>> > ??? [45] >>>>> 29.3% >>>>> > flush-display [14] >>>>> 27.8% >>>>> > call-pre-on-char method in >>>>> window% [15] 10.2% >>>>> > >>>>> ---------------------------------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> > call-with-break-parameterization >>>>> [2] 100.0% >>>>> > [7] 2580(1.4%) 2580(1.4%) ??? >>>>> ...acket/collects/ffi/unsafe/atomic.rkt:115:16 >>>>> > >>>>> ---------------------------------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> > dispatch-on-event method in >>>>> window% [9] 3.1% >>>>> > dispatch-on-char method in >>>>> window% [5] 96.9% >>>>> > [14] 5442(3.0%) 5442(3.0%) flush-display >>>>> ...d/private/wx/gtk/window.rkt:891:0 >>>>> > >>>>> ---------------------------------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> > ??? [13] >>>>> 100.0% >>>>> > [22] 179456(100.0%) 158080(88.1%) loop >>>>> .../drracket/drracket/private/rep.rkt:1456:17 >>>>> > ??? [3] >>>>> 11.3% >>>>> > wait-now [32] >>>>> 0.0% >>>>> > >>>>> ---------------------------------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> > ??? [70] >>>>> 100.0% >>>>> > [75] 5512(3.1%) 5512(3.1%) channel-put >>>>> ...lects/racket/private/misc.rkt:169:2 >>>>> > >>>>> ---------------------------------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> > The culprit, to me, looks like flush-display. Do you perhaps have >>>>> any thoughts on the flush-display usage within window.rkt? I will try to >>>>> poke at this a bit more. >>>>> > >>>>> > Evan >>>>> > >>>>> > On Saturday, February 10, 2018 at 3:35:35 AM UTC-10, Robby Findler >>>>> wrote:If you run this code, does the profiling information reveal >>>>> anything >>>>> > >>>>> > interesting? >>>>> > >>>>> > >>>>> > >>>>> > #lang racket/gui >>>>> > >>>>> > (require profile) >>>>> > >>>>> > (define ec% >>>>> > >>>>> > (class editor-canvas% >>>>> > >>>>> > (define/override (on-paint) >>>>> > >>>>> > (profile (super on-paint))) >>>>> > >>>>> > (define/override (on-char e) >>>>> > >>>>> > (profile (super on-char e))) >>>>> > >>>>> > (super-new))) >>>>> > >>>>> > (define frame (new frame% [label "Simple Edit"] >>>>> > >>>>> > [width 1800] >>>>> > >>>>> > [height 1800])) >>>>> > >>>>> > (define canvas (new ec% [parent frame])) >>>>> > >>>>> > (define text (new text%)) >>>>> > >>>>> > (send canvas set-editor text) >>>>> > >>>>> > (send frame show #t) >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > On Fri, Feb 9, 2018 at 11:05 PM, Evan Whitmer <[email protected]> >>>>> wrote: >>>>> > >>>>> > > I forgot to mention that I have a 4K display, and I think that's >>>>> important >>>>> > >>>>> > > to note here. >>>>> > >>>>> > > >>>>> > >>>>> > > >>>>> > >>>>> > > On Friday, February 9, 2018 at 7:00:18 PM UTC-10, Evan Whitmer >>>>> wrote: >>>>> > >>>>> > >> >>>>> > >>>>> > >> I, too, am having typing latency issues in DrRacket in the >>>>> definitions >>>>> > >>>>> > >> window. As Dave noted, the size of the window seems to be related >>>>> to the >>>>> > >>>>> > >> issue, and, in my experience, it's not just an issue with the >>>>> Definitions >>>>> > >>>>> > >> window. Both the Interactions window and even the following code >>>>> snippet >>>>> > >>>>> > >> (taken from StackOverflow) will have this same lag: >>>>> > >>>>> > >> >>>>> > >>>>> > >> (define frame (new frame% [label "Simple Edit"] >>>>> > >>>>> > >> [width 1800] >>>>> > >>>>> > >> [height 1800])) >>>>> > >>>>> > >> (define canvas (new editor-canvas% [parent frame])) >>>>> > >>>>> > >> (define text (new text%)) >>>>> > >>>>> > >> (send canvas set-editor text) >>>>> > >>>>> > >> (send frame show #t) >>>>> > >>>>> > >> >>>>> > >>>>> > >> (define delta (make-object style-delta% 'change-size 14)) >>>>> > >>>>> > >> (send delta set-face "Menlo") >>>>> > >>>>> > >> (send text change-style delta) >>>>> > >>>>> > >> >>>>> > >>>>> > >> I am on Ubuntu 17.10 using Racket 6.11 with the proprietary >>>>> nVidia drivers >>>>> > >>>>> > >> and X.org. My GTK version is 3. I don't have this issue with any >>>>> of the >>>>> > >>>>> > >> other text editors that I've tried to use. >>>>> > >>>>> > >> >>>>> > >>>>> > >> I tried to profile the above text editor, but I am a novice >>>>> Racketeer and >>>>> > >>>>> > >> could not figure out a way to profile a thread managed in >>>>> racket/gui. Does >>>>> > >>>>> > >> anyone perhaps know of a way to hook the above into a profiler to >>>>> see what >>>>> > >>>>> > >> might be the cause of this lag? >>>>> > >>>>> > >> >>>>> > >>>>> > >> Has anyone happened to stumble onto this issue recently and >>>>> solved it? >>>>> > >>>>> > >> >>>>> > >>>>> > >> Evan >>>>> > >>>>> > >> >>>>> > >>>>> > >> On Saturday, April 1, 2017 at 6:07:28 AM UTC-10, gneuner2 wrote: >>>>> > >>>>> > >>> >>>>> > >>>>> > >>> On Fri, 31 Mar 2017 13:34:38 -0700 (PDT), Dave Musicant >>>>> > >>>>> > >>> <[email protected]> wrote: >>>>> > >>>>> > >>> >>>>> > >>>>> > >>> >I'm using DrRacket on a 64-bit Ubuntu 16.04 system with the >>>>> > >>>>> > >>> >default Unity windowing system, and am finding that typing >>>>> > >>>>> > >>> >in the definitions window is laggy. >>>>> > >>>>> > >>> >>>>> > >>>>> > >>> I've seen similar behavior on CentOS 6.5-6.8 under Gnome(2) - it >>>>> has >>>>> > >>>>> > >>> persisted across a number of OS and Racket versions. >>>>> > >>>>> > >>> >>>>> > >>>>> > >>> I have seen the lag in Dr Racket with 6.1, 6.5, 6.7 and 6.8. I >>>>> > >>>>> > >>> compiled 6.1 and 6.5 myself, so there might have been something >>>>> > >>>>> > >>> strange in those cases, but 6.7 and 6.8 were stock Linux x86_64 >>>>> > >>>>> > >>> downloads. >>>>> > >>>>> > >>> >>>>> > >>>>> > >>> Turning off background expansion helps somewhat, but I have >>>>> found that >>>>> > >>>>> > >>> limiting memory seems to help the most. On Linux I run Dr >>>>> Racket with >>>>> > >>>>> > >>> the limit set to 512MB. That might be too low for some people, >>>>> but it >>>>> > >>>>> > >>> works fine for my typical (webserver app) uses. >>>>> > >>>>> > >>> >>>>> > >>>>> > >>> George >>>>> > >>>>> > >>> >>>>> > >>>>> > > -- >>>>> > >>>>> > > You received this message because you are subscribed to the Google >>>>> Groups >>>>> > >>>>> > > "Racket Users" group. >>>>> > >>>>> > > To unsubscribe from this group and stop receiving emails from it, >>>>> send an >>>>> > >>>>> > > email to [email protected]. >>>>> > >>>>> > > For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Racket Users" group. >>> >> To unsubscribe from this group and stop receiving emails from it, send an >>> email to [email protected]. >> >> >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/racket-users/c369c5b0-9c78-4636-be07-1a36c4f35bdd%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/racket-users/c369c5b0-9c78-4636-be07-1a36c4f35bdd%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> >> >> -- >> -- >> Jens Axel Søgaard >> >> -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/de7d997e-7ec6-432a-8fe9-c6732688be9cn%40googlegroups.com.

