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.

