[PD-dev] Fwd: [MACTCL] Improving Application GUI Speed

cyrille henry cyrille.henry at la-kitchen.fr
Tue Apr 15 22:03:51 CEST 2008


hello,

this patch is great.
i hope miller will accept it!

thanks

Cyrille


Jakob Leben a écrit :
> I will think of doing it the displace_fn way. Though my first thoughts 
> are sort of equally sceptic as your critique of including new 
> widgetbehavior:
> 
> Displacefn functions usually either create or delete graphics, so to 
> "displace" the graphics you usually call it twice: first with vis = 0 to 
> erase the graphics and then again with vis = 1 to recreate the graphics. 
> Now, to implement new style of moving graphics we could call the 
> displace_fn with a new value for it's vis argument which would require 
> displace_fn to act accoringly to this flag. But displace_fn functions 
> usually only check if "vis" = true or false, so all the objects that 
> wouldn't have a dedicated interpretation of our new vis value would 
> either erase their graphics and never draw it again, or create it again 
> without the old being erased. Which means again that for the system to 
> function properly all the GUI objects should have their displace_fn 
> functions modified.
> 
>  From this perspective it looks to me better to make a dedicated 
> widgetbehavior. This way when compiling some code that wouldn't have 
> this widgetbehavior initialized you at least get a warning from 
> compiler, or on the other hand pd crashes when calling the uninitialized 
> widgetbehavior and you know for sure that something is wrong.
> 
> Plus, do you think there's a large amount of GUI externals? I think a 
> big many of externals only have basic "t_text" graphical represantion. 
> And I have already written displace_fn functions for all the pd vanilla 
> GUI classes.
> 
> I've uploaded the patch:
> http://sourceforge.net/tracker/index.php?func=detail&aid=1943301&group_id=55736&atid=478072 
> <http://sourceforge.net/tracker/index.php?func=detail&aid=1943301&group_id=55736&atid=478072>
> 
> J.
> 
> On Tue, Apr 15, 2008 at 7:11 PM, Hans-Christoph Steiner <hans at eds.org 
> <mailto:hans at eds.org>> wrote:
> 
> 
>     Sounds interesting, you can post the code here in the email.  If it
>     is a patch against Pd, then you can submit it to the patch tracker:
> 
>     http://puredata.info/dev/patchtracker
> 
>      From how you described this, I think there might be a better way to
>     implement this.  Adding another function to widgetbehavior means
>     that in order to take advantage of this fix, every single GUI object
>     will have to be changed to use that new function. 
> 
>     Perhaps there is a way of implementing this in the displace_fn?
>      IIRC, the displace_fn is meant for moving already, so no need to
>     define a new move function.
> 
>     Thanks for taking this on, it is a very valuable contribution!
> 
>     .hc
> 
> 
>     On Apr 15, 2008, at 1:04 AM, Jakob Leben wrote:
>>     OK, I think I did it. Solved the slow garray drawing.
>>
>>     I introduced a new widgetbehavior of the same form as
>>     t_displacefn. All children of a graph get their new widgetbehavior
>>     called from graph_displace. That's way I called the new
>>     widgetbehavior t_graphfn, maybe we could find something better to
>>     make clear the following notion: each object should write into
>>     it's graphfn function only procedures to move it's graphical
>>     content with calls to Tk command "move"; t_graphfn function
>>     provides in form of it's arguments dx and dy to use with Tk move
>>     just as t_displacefn does (graph_display passes it's dx and dy
>>     arguments on to every t_graphfn call it makes).
>>
>>     I've filled in graphfn functions for everything connected with
>>     data structures and arrays, it remains to write those functions
>>     for iemgui and oldschool "text" objects. Coming soon. And for
>>     somebody who wants to write new graphical externals the change
>>     will be almost invisible, because we can make an iemgui_graph
>>     function to map to t_graphfn, that will call x_gui.x_draw with
>>     IEM_GUI_DRAW_MODE_MOVE, so one really doesn't need to write any
>>     more GUI code than before.
>>
>>     Performance is greatly improved, I can load 20secs of audio into
>>     an array and it moves around a patch smoothly, though it demands
>>     it's 40-50% cpu. But anyway, it works. I also tweaked some other
>>     pieces of code to remove unnecessary multiple calls to garray_vis.
>>     I haven't yet tried if it disturbs heavy audio processing when you
>>     load a large sample into an array. That's my main concern with
>>     arrays to be honest.
>>
>>     So, what's the regime for spreading this code of mine into the
>>     wide world? do you want to check it out? Shall I simply attach it
>>     to an email? Can I upload the code somewhere?
>>
>>     J.
>>
>>     On Mon, Apr 14, 2008 at 7:19 PM, Hans-Christoph Steiner
>>     <hans at eds.org <mailto:hans at eds.org>> wrote:
>>
>>
>>         On Apr 14, 2008, at 6:28 AM, IOhannes m zmoelnig wrote:
>>
>>             Jakob Leben wrote:
>>
>>
>>                 If someone has thought on these proposals or any
>>                 ideas, please comment.
>>
>>
>>             not directly, but: does anybody know how one could setup a
>>             shared-memory
>>             between pd and pd-gui?
>>             i think it would be a good idea to not send large amounts
>>             of data
>>             through a network socket.
>>             (i had a look at [pix_preview] the other day, and noticed
>>             that it is not
>>             really usable with larger image-data; shared-memory might
>>             be a solution
>>             for this as well...)
>>
>>             fmgasdr
>>             IOhannes
>>
>>
>>         For pix_preview, I was thinking, it could allocate two
>>         framebuffers and one lock variable.  In the lock variable
>>         would be the address of the framebuffer that is currently
>>         ready for Tcl to draw.  On the C side, it would be filling the
>>         other framebuffer in the meantime.  Once that is all done, it
>>         would change the lock variable to point to the new one.  This
>>         could be done with mmap and the lock variable would just be a
>>         filename, and the Tcl image object would just read the mmap'ed
>>         file for the image data.
>>
>>         Just throwing it out there.
>>
>>         .hc
>>
>>         ----------------------------------------------------------------------------
>>
>>         There is no way to peace, peace is the way.       -A.J. Muste
>>
>>
>>
> 
> 
> 
>     ----------------------------------------------------------------------------
> 
>     Computer science is no more related to the computer than astronomy
>     is related to the telescope.      -Edsger Dykstra
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> PD-dev mailing list
> PD-dev at iem.at
> http://lists.puredata.info/listinfo/pd-dev




More information about the Pd-dev mailing list