[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: simplelist speed
- From: Dan Espen <dane mk telcordia com>
- To: gtk-perl mailing list <gtk-perl-list gnome org>
- Subject: Re: simplelist speed
- Date: Tue, 04 Jan 2005 13:49:57 -0500
muppet <scott asofyet org> writes:
>
> On Jan 3, 2005, at 9:57 PM, Dan Espen wrote:
>
> > I needed to color the foreground of individual cells and the
> > background of some rows. I used pango markup for the foreground and
> > cell_data_func to color the background.
> >
> > On my 400MHz home machine, I can peg the CPU meter by moving the
> > pointer over the window. When I switch to the desk that shows 2
> > instances of this program the text takes about 5 seconds to appear.
>
> Unfortunately i can't say i'm surprised by this. The TreeView
> architecture is flexible and powerful, but the design requires it to do
> a hell of a lot of work.
>
> Every time a cell is rendered, the TreeViewColumn must fetch the data
> from the model and set appropriate properties on the CellRenderer
> before calling the renderer's render() vfunc. This is almost a stress
> test of the GObject property system.
>
> A way to approach the speed problems is to find ways to cache things.
> To avoid needing to parse pango markup or call a cell data func on
> every cell rendering, try using a hidden column (that is, a model
> column that is not shown in the view) to store the GdkColor to use for
> the foreground and background colors, and calculate them only once.
> You'll then tell the TreeViewColumn to use the hidden column as a cell
> attribute, that is, for a given cell it will fetch the color from the
> corresponding row of that column of the model. This would also avoid
> the need for the cell data func, but would require you to keep the
> color columns up to date by hand.
I've seen this mentioned, but I couldn't find a sample or detailed
explanation. Any pointers, hopefully to something in perl?
> SimpleList assumes that all model columns are visible, and keeps the
> view column and model column indices aligned for simplicity. To use a
> hidden column with a SimpleList, you'll have to add them by hand after
> creation.
My simplelist aleady has 3 hidden columns for input data
that I don't want displayed, I can use them. I don't have to
add them after creation. Maybe you mean, I have to add the colors
after creation.
> > If I disable the cell data func, its faster but not by much, maybe 20%.
>
> What improvement to you see from using text rather than markup columns?
That's not so easy to answer, changing everything to text
crashes the application. Not sure why...
> I've noticed that in the past, when writing custom cell renderers ---
> the render vfunc gets called *a* *lot*... whenever you move the mouse,
> whenever there's an expose, a cell resize, cursor/focus change, etc.
>
> Peeking at the source (gtk+/gtk/gtktreeview.c) it appears that the
> point is to support prelighting for cells, e.g., the expander triangles
> in tree mode. In theory, this should make it possible to render your
> control cells (like the check button) with prelighting, but that
> doesn't appear to happen.
>
> I suggest logging a bug against gtk+, to find some way to suppress
> spurious cell repaints.
Yep, I'll try to get more info on how many renders are taking
place first.
> > I'm not sure why the window takes so long to paint on a desk change.
> > I can see pretty big 100% CPU spikes on desk changes.
>
> Undoubtedly it's the slow cell rendering, exacerbated by the fact that
> instead of rendering a handful of cells hit by the pointer motion,
> you're now rendering every visible cell, as the entire window has
> gotten an expose event. I wager you'd see similar behavior when
> dragging another window in front of your TreeView (assuming you use
> opaque window moves in your window manager).
Yes, opaque moves over a window are also slow.
--
Dan Espen E-mail: dane mk telcordia com
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]