Re: GtkTreeView: inserting rows faster.
- From: Jonathan Blandford <jrb redhat com>
- To: Peter Zelezny <pzel dodo com au>
- Cc: gtk-devel-list gnome org
- Subject: Re: GtkTreeView: inserting rows faster.
- Date: 28 Mar 2003 18:04:11 -0500
Peter Zelezny <pzel dodo com au> writes:
> > Also, it is (not surprisingly) slower when you
> > have a listener such as a GtkTreeView.
> 
> /timer -repeat 0 1 recv :nick!user host com JOIN :#debian
> /timer -repeat 0 1 recv :nick!user host com PART :#debian
> 
> This simulates one insert/delete once per second, and already it's creating
> quite a heavy load. I've noticed that it re-draws the userlist once
> incorrectly, then correctly. Something like this:
> 
> .------.------------.
> | Icon | Text       |
> )------+------------(
> | N*ck name         |
> | Nickname 2        |
> `-------------------'
> 
> Then it redraws:
> .------.------------.
> | Icon | Text       |
> )------+------------(
> |  *     Nick name  |
> |        Nickname 2 |
> `-------------------'
> 
> It does these two redraws for every 1 row inserted, you can see it
> flicker. Note, some rows don't have an Icon (pixbuf passed in as
> NULL, this might have something to do with it).
Can you possibly reduce this to a standalone test case?  I don't think
I'll be able to efficiently debug it otherwise.
> Admittadly, I have an old GTK (2.0.6 from RH8), but I've had reports
> from people of the high cpu load on 2.2.1 aswell.
> 
> The current calls that cause it are only:
> 
> gtk_list_store_insert_after and
> gtk_list_store_set.
Might be good to retry this with GTK+-2.2.  It has changed a lot since
then.
> > It doesn't.  This code is incredibly complicated, and cannot be
> > described in a paragraph.  It does measure all rows at some point
> > (mostly in an idle.)
> 
> What does it measure, text extents?
Yes.
> > > Ideally, it should be possible to insert rows in constant time when
> > > calling gtk_list_store_insert_(after/before). Is it achievable?
> > 
> > Insert before is not without adding a back pointer.  Also, we need to
> > know the location of rows when we emit the signal.  This does require
> > the walking of the list, but I feel this is prolly fast -- especially as
> > we special case the last row (which is reasonably common.)  We might be
> > able to do a few more special cases, but I'd really like to make sure
> > this is slow first.
> 
> Something in the idle timeout (incremental reflow?) is causing undue
> redraws or cpu usage. If I insert 500 rows in a loop, it doesn't cause
> any more of a cpu hit than inserting 1 row. It's got something to do
> with the icons in Column-0, because I can't reproduce it with a flat
> 1 column list.
Odd.  Unless you're marking the whole tree dirty, or swapping out models
or something, I can't see why that would happen.
Thanks,
-Jonathan
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]