I made the following change to window.rkt 
<https://github.com/racket/gui/blob/master/gui-lib/mred/private/wx/gtk/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 
<https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#gdk-window-process-all-updates>

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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to