After changing my custom widgets with label widgets, I found that the 
application runs fine.  So the gtk queue is being bogged down by my widgets.  
So now the hard part is determining where the problem is in my custom widgets.
   
  I have 5 custom widgets.  I have put them up for sharing at 
http://flashpages.prodigy.net/richarmt/
  I also put up images of them in use.  I believe the customled widget is fine. 
 But I think the customnumeric and customlabel widgets are what is causing the 
slow down. I know the customlevel widget has a problem (gets an error about 
g_object_unref() floating object finalized - use g_object_ref_sink()).  The 
goal behind these widgets was to setup the widget with indicators, min, max, 
formatting, etc.  Then, to call one function (say custom_label_set_text()) to 
set the text in that widget (or custom_numeric_set_value()) or set the value, 
which is then translated to text.  The widgets are NOT supposed to redraw if 
the value being set is the same as what it currently has. There is also a 
property for every widget called type - and this is to set the color of the 
widget (sometimes the background) - to one of 4 values - off, green(normal), 
yellow(caution), red(alert). This is indendent of the text or the value for the 
widget.  I've recoded these widgets a number of times (from
 gtk2.4.1, gtk 2.8.17, gtk 2.10.0).  I used the gtk widget that is closest to 
the custom widget as a template.  Gtk label for custom label, custom numeric, 
and custom led. Gtk range for level, gtk range for dial.  I would have liked to 
have them running well before releasing to the public - but alas, I need the 
help.
   
  I know digging in someone else's code is a pain, but I would greatly 
appreciate any insight anyone can give me - I've learned lots, but I still have 
lots more to learn.  My intention is to share them with all (hopefully the data 
acquisition widgets that I saw someone else posting).
   
  Thanks again for any help - especially Tristan Van Berkom - you've been very 
helpful.
  Mark

Tristan Van Berkom <[EMAIL PROTECTED]> wrote:
  On Tue, 2007-01-30 at 12:40 -0800, Mark Richardson wrote:
> I can't figure out why my gui becomes sluggish. I have a main window with a 
> bunch of vboxes and hboxes - in one area, I don't put in a widget - because I 
> load glade.xml files (so you can swap your views). I should say that I have 
> some custom widgets, and I've been pulling them out so I can see if the fault 
> lies in my code or not. But, when the application is first run, everything is 
> fast. If I leave it up for a few hours (or overnight) - it becomes very slow. 
> Even the mouse over of a button highlight takes 5 or 6 seconds.
> 
> I'm assuming that the fault lies in my custom widgets, and that they are 
> calling redraw too much, so it creates a "back-log" of redraws in the gtk 
> even queue. But I don't know how to look at the event queue to determine the 
> true cause. I've run the debugger and stopped it a bunch of times, but that's 
> hit or miss. Is there anyway to examine the queue in a debugger?
> 
> This application is designed for showing information - not really processing 
> user/gui events. As data comes in, it updates different displays. I've played 
> around with the frequency of updating the gui and that doesn't seem to help 
> (even 1 second per gui update becomes slow).
> 
> The custom widgets I wrote can run overnight without delay when I code them 
> into an application - so I'm starting to think that maybe the xml parser or 
> how gtk handles the xml widgets might be the culprit.
> 
> Thanks in advance for any help that you can provide - I can't seem to get 
> this one, and I don't know what else to try.
> Mark

I dont think your problem has to do with the frequency at which you
update the GUI, typically when data arrives, you update your private
data representation of what should be displayed and then flag your UI as
"dirty" - whenever you happen to get a chance later on... you go and
actually update the GUI (i.e. no matter how many times you go and
call gdk_window_invalidate_region(), that region will only be "dirty"
once untill the server sends an expose event and your widget updates
widget->window).

Rather, 
a.) Does your program or other programs on your desktop consume alot
of memory (is your program getting swapped out after time ?), does
it become responsive again after poking it ?

b.) Is it possible that you are leaking event sources ?
(GSourceFuncs fed to g_idle_add/g_timeout_add that neglect to
return FALSE ever, or are accumulated over time without
properly bookkeeping the event source id and calling
g_source_remove())

Cheers,
-Tristan




 
---------------------------------
Don't pick lemons.
See all the new 2007 cars at Yahoo! Autos.
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to