Bill,

Brilliant.  Like solving global warming with a cotter pin.  Many thanks.

Ed

> On Mar 23, 2023, at 7:18 AM, bill lam <bbill....@gmail.com> wrote:
> 
> you need to add wd'msgs' to the tight loop to enable asynchronous event
> processing.
> 
> sys_timer_z_ =: 3 : 0
> wd 'set vocContext invalid'
> wd 'msgs'
> )
> 
> On Thu, Mar 23, 2023 at 7:09 PM Ed Gottsman <edward.j.gotts...@gmail.com>
> wrote:
> 
>> Raul,
>> 
>> Yes—I forgot.  Modern browsers’ rendering engines are concurrent and will
>> recruit additional cores, so WebView is not entirely dependent on its
>> “home” core. Still, there is apparently something that the home core needs
>> to do before a page can be loaded.  Below is a script that demonstrates the
>> problem.
>> 
>> 1) Evaluate starve’'
>> 2) Resize the window that appears
>> 3) Type in a URL and press enter.  It should load in the right pane.
>> 4) Select the “Draw Frames” check box.  This turns on animation, which
>> tries (and fails, on my machine) to hit 100 fps.  It’s doing a lot of work
>> per frame; the core is pegged.
>> 5) Type in a URL and press enter.  On my machine it did not load until
>> I—eventually—turned off “Draw Frames”.
>> 
>> This (and your comments) suggest to me that if I thread off all of the
>> “data wrangling” (which is considerable and could be a lot smarter) and
>> just leave a shared data structure that a relatively lightweight
>> main-thread rendering routine can turn into gl2 calls, that might fix it.
>> Unfortunately, the only way to know for sure is to build it.
>> 
>> Thank you.
>> 
>> Ed
>> 
>> load 'gl2'
>> coinsert 'jgl2'
>> 
>> buildForm =: 3 : 0
>> wd 'pc vizform;'
>> wd 'bin h;'
>> wd   'bin v;'
>> wd     'bin h;'
>> wd       'cc drawFrames checkbox;cn Draw Frames;'
>> wd       'cc urlBox edit;'
>> wd     'bin z;'
>> wd     'cc vocContext isigraph;'
>> wd   'bin z;'
>> wd   'cc browser webview;'
>> wd 'bin z;'
>> )
>> 
>> layoutForm =: 3 : 0
>> 'w h' =. ". wd 'getp wh'
>> winW =. w - 20
>> winH =. h - 20
>> wd 'set drawFrames maxwh ' , (": (<. winW * 0.15) , 30) , ';'
>> wd 'set urlBox maxwh ' , (": (<. winW * 0.3) , 30) , ';'
>> wd 'set vocContext maxwh ' , (": (<. winW * 0.5) , winH) , ';'
>> wd 'set browser maxwh ' , (": (<. winW * 0.5) , winH) , ';'
>> )
>> 
>> vizform_resize =: 3 : 0
>> layoutForm ''
>> )
>> 
>> vizform_close =: 3 : 0
>> wd 'timer 0'
>> wd 'pclose'
>> )
>> 
>> sys_timer_z_ =: 3 : 0
>> wd 'set vocContext invalid'
>> )
>> 
>> vizform_urlBox_button =: 3 : 0
>> smoutput 'Loading' ; urlBox
>> wd 'set browser url *' , urlBox
>> )
>> 
>> vizform_drawFrames_button =: 3 : 0
>> if. drawFrames = '1' do.
>>        wd 'timer 10'
>> else.
>>        wd 'timer 0'
>>        FrameTimeStamps =: ''
>>        wd 'set vocContext invalid'
>> end.
>> )
>> 
>> vizform_vocContext_paint =: 3 : 0
>> glfill 255 255 255 255
>> k =. 1e7 ?@$ 1000
>> drawFrameRate ''
>> )
>> 
>> FrameTimeStamps =: ''
>> 
>> drawFrameRate =: 3 : 0
>> FrameTimeStamps =: (t =. (6!:1) '' ) , FrameTimeStamps
>> fps =. +/ (t - 1) < FrameTimeStamps
>> glfont 'arial bold 24'
>> glrgb 0 0 0
>> gltextcolor ''
>> gltextxy 10 10
>> gltext (": fps) , ' fps'
>> )
>> 
>> starve =: 3 : 0
>> buildForm ''
>> layoutForm ''
>> wd 'pshow'
>> wd 'set urlBox text "https://www.cnn.com";;'
>> )
>> 
>> 
>>> On Mar 22, 2023, at 10:25 PM, Raul Miller <rauldmil...@gmail.com> wrote:
>>> 
>>> If only it were that simple.
>>> 
>>> Sadly, Qt's design is such that all UI activity must happen on the main
>> thread.
>>> 
>>> https://doc.qt.io/qt-5/thread-basics.html
>>> 
>>> Looking at how the system works, I believe that this was not the
>>> original plan, but instead was an organic response to some of the very
>>> reasonable expectations about how a user interface works.
>>> 
>>> Here, it's perhaps also worth noting that a typical web browser, while
>>> it will use multiple threads, also uses multiple processes.
>>> Effectively, giving control over some part of screen real estate or
>>> some underlying form of infrastructure to an independent program. And,
>>> the webview control is, roughly speaking, a web browser.
>>> 
>>> --
>>> Raul
>>> 
>>> On Wed, Mar 22, 2023 at 6:36 PM Ed Gottsman <edward.j.gotts...@gmail.com>
>> wrote:
>>>> 
>>>> Hello.
>>>> 
>>>> I've got a Window Driver application whose left side is an isigraph
>> control and whose right side is a webview control.  The webview loads pages
>> in response to interaction with the isigraph.
>>>> 
>>>> The isigraph side is quite snappy despite almost zero optimization
>> effort (a tribute to the developers of the J runtime, the gl2 library,
>> etc.).
>>>> 
>>>> The webview…is much less responsive, even when loading locally-cached
>> HTML.  In fact, as long as the mouse is moving and frames are being
>> generated in the isigraph, the webview is unresponsive.  Only when the
>> mouse pauses (and no frames are generated) does the webview load a page.
>>>> 
>>>> I *think* that what's happening is that the two Window Driver child
>> controls share a core, and the isigraph side steals all of the available
>> cycles to service mouse-move events by generating frames, leaving no cycles
>> for the webview to parse and render HTML.
>>>> 
>>>> With that in mind, it seems possible that I could improve the
>> responsiveness of the webview by threading off some or all of the
>> (considerable) work that goes into generating an isigraph frame, leaving
>> most of the shared core's cycles for the webview.
>>>> 
>>>> I hesitate, however, before re-arranging the code because 1) I'm not
>> sure about the diagnosis and 2) I've worked in graphics environments where
>> you're not allowed to update GUI controls off the main thread and 3) maybe
>> there's a much simpler approach (can I somehow thread off the webview,
>> e.g.?).
>>>> 
>>>> Comments on any part of this would be greatly appreciated.
>>>> 
>>>> Thank you.
>>>> 
>>>> Ed
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to