GNOME Bugzilla – Bug 738423
Does GtkCellRendererSpinner update cause repaint of the whole GtkTreeView?
Last modified: 2018-04-15 00:06:28 UTC
Not entirely sure why it's eating 90-100% of CPU. It's doing this: 00:42:30.555182 poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN}], 4, 0) = 0 (Timeout) 00:42:30.555282 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.555312 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.555340 poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN}], 4, 0) = 0 (Timeout) 00:42:30.562837 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.562938 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.563028 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.563117 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.563161 close(42) = 0 00:42:30.563703 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.563759 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.563798 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.563829 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.563861 close(42) = 0 00:42:30.564184 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.564222 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.564251 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.564279 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.564306 close(42) = 0 00:42:30.564799 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.564838 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.564873 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.564901 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.564928 close(42) = 0 00:42:30.565242 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.565283 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.565313 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.565340 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.565369 close(42) = 0 00:42:30.565577 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.565617 poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN}], 4, 0) = 0 (Timeout) 00:42:30.565955 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.565994 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.566024 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.566053 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.566080 close(42) = 0 00:42:30.566413 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.566454 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.566484 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.566515 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.566544 close(42) = 0 00:42:30.568785 recvfrom(6, "\241 0\0\23\0\0\2l\1\0\0\212\204\0\0\0\0\0\0\6&^>\331\0\0\0\0\0\0\0", 4096, 0, NULL, NULL) = 32 00:42:30.568825 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.568862 poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN}], 4, 0) = 0 (Timeout) 00:42:30.568906 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.569017 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.569051 poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN}], 4, 0) = 0 (Timeout) 00:42:30.569411 lstat("/usr/share/icons/gnome/16x16/places/user-trash.png", {st_mode=S_IFREG|0644, st_size=997, ...}) = 0 00:42:30.569454 open("/usr/share/icons/gnome/16x16/places/user-trash.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.569484 open("/usr/share/icons/gnome/16x16/places/user-trash.png", O_RDONLY) = 42 00:42:30.569512 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 997 00:42:30.569540 close(42) = 0 00:42:30.579979 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.580058 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.580170 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.580221 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.580256 close(42) = 0 00:42:30.580642 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.580722 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.580762 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.580792 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.580820 close(42) = 0 00:42:30.581324 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.581361 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.581390 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.581418 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.581445 close(42) = 0 00:42:30.581748 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.581785 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.581814 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.581842 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.581872 close(42) = 0 00:42:30.588363 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.588417 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.588448 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.588476 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.588503 close(42) = 0 00:42:30.588813 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.588858 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.588888 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.588916 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.588942 close(42) = 0 00:42:30.589408 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.589457 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.589487 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.589514 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.589541 close(42) = 0 00:42:30.589849 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.589899 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.589929 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.589956 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.589982 close(42) = 0 00:42:30.592396 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.592441 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.592470 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.592497 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.592523 close(42) = 0 00:42:30.592829 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.592876 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.592905 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.592933 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.592959 close(42) = 0 00:42:30.595671 poll([{fd=6, events=POLLIN|POLLOUT}], 1, 4294967295) = 1 ([{fd=6, revents=POLLIN|POLLOUT}]) 00:42:30.595712 recvfrom(6, "\241 0\0\23\0\0\2m\1\0\0\212\204\0\0\0\0\0\0\2421\0\0)A\0\0\320\7\0\0", 4096, 0, NULL, NULL) = 32 00:42:30.595742 writev(6, [{"\16\0\2\0\23\0\0\2", 8}, {NULL, 0}, {"", 0}], 3) = 8 00:42:30.595775 poll([{fd=6, events=POLLIN}], 1, 4294967295) = 1 ([{fd=6, revents=POLLIN}]) 00:42:30.595832 recvfrom(6, "\1\0301\0\0\0\0\0\225\0\0\0\n\0/\0\21\4\21\4\0\0\0\0\0\0\0\0\0\0\0\0", 4096, 0, NULL, NULL) = 32 00:42:30.595864 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.595893 poll([{fd=6, events=POLLIN|POLLOUT}], 1, 4294967295) = 1 ([{fd=6, revents=POLLOUT}]) 00:42:30.595920 writev(6, [{"(\0\4\0\23\0\0\2\225\0\0\0\0\0\0\0", 16}, {NULL, 0}, {"", 0}], 3) = 16 00:42:30.595950 poll([{fd=6, events=POLLIN}], 1, 4294967295) = 1 ([{fd=6, revents=POLLIN}]) 00:42:30.596010 recvfrom(6, "\1\0012\0\0\0\0\0\301\272\2\1\246\2R\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096, 0, NULL, NULL) = 32 00:42:30.596037 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.596062 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.608163 poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN}], 4, 0) = 0 (Timeout) 00:42:30.608245 poll([{fd=6, events=POLLIN|POLLOUT}], 1, 4294967295) = 1 ([{fd=6, revents=POLLOUT}]) 00:42:30.608278 writev(6, [{"\22\0\16\0\23\0\0\2\316\1\0\0\6\0\0\0 \30\4\0\10\0\0\0\7\0\0\0\0\0\0\0"..., 15060}, {NULL, 0}, {"", 0}], 3) = 15060 00:42:30.608331 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.608386 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.608426 poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=3, events=POLLIN}, {fd=11, events=POLLIN}], 4, 0) = 0 (Timeout) 00:42:30.608614 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.608920 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.609154 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.609359 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.609613 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.609841 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.610063 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.610277 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.610496 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.610773 lstat("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", {st_mode=S_IFREG|0644, st_size=328, ...}) = 0 00:42:30.610824 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.610900 open("/usr/share/icons/gnome/8x8/emblems/emblem-new.png", O_RDONLY) = 42 00:42:30.610945 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\10\0\0\0\10\10\6\0\0\0\304\17\276"..., 4096) = 328 00:42:30.610980 close(42) = 0 00:42:30.611106 recvfrom(6, "\34\0003\0\23\0\0\2\316\1\0\0^G\2357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096, 0, NULL, NULL) = 1088 00:42:30.611154 recvfrom(6, 0x660d64, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 00:42:30.611450 lstat("/usr/share/icons/gnome/16x16/places/folder.png", {st_mode=S_IFREG|0644, st_size=675, ...}) = 0 00:42:30.611496 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY|O_NOATIME) = -1 EPERM (Operation not permitted) 00:42:30.611526 open("/usr/share/icons/gnome/16x16/places/folder.png", O_RDONLY) = 42 00:42:30.611553 read(42, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"..., 4096) = 675 00:42:30.611580 close(42) = 0 0x00000035b768ca0a in g_mutex_get_impl (mutex=0x624040) at gthread-posix.c:120 120 pthread_mutex_t *impl = g_atomic_pointer_get (&mutex->p); (gdb) bt
+ Trace 234217
That's kind of expected. One of your accounts (or maybe multiple) is connecting, which shows a spinner beside its name in the folder tree. To repaint it the row is invalidated, though it seems like you've got invalidated many more rows. The repaint happens about 12 times per 750 ms (times the number of spinners in use). The circle GtkSpinner-s are quite CPU expensive, which was the reason why I added the ESpinner. There is no replacement for the cell-renderer spinner though, and I do not plan to do that, because it seems like at least in your case the core of the issue lays elsewhere, deeper in the GtkTreeView. I would move this there, to GtkTreeView, because the only thing evolution does is that it defines columns for the "pulse" property of the spinner and increments it in a timer, around here: https://git.gnome.org/browse/evolution/tree/mail/em-folder-tree-model.c#n542
We're moving to gitlab! As part of this move, we are moving bugs to NEEDINFO if they haven't seen activity in more than a year. If this issue is still important to you and still relevant with GTK+ 3.22 or master, please reopen it and we will migrate it to gitlab.
As announced a while ago, we are migrating to gitlab, and bugs that haven't seen activity in the last year or so will be not be migrated, but closed out in bugzilla. If this bug is still relevant to you, you can open a new issue describing the symptoms and how to reproduce it with gtk 3.22.x or master in gitlab: https://gitlab.gnome.org/GNOME/gtk/issues/new