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/04f57b82-45d5-46d2-979b-4cdbd6b854e1%40googlegroups.com.

