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