Closed Bug 450925 Opened 16 years ago Closed 16 years ago

xulrunner redraws display very frequently even when idle

Categories

(Firefox for Android Graveyard :: General, defect)

Other
Linux
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: jayakumar.lkml, Unassigned)

References

Details

Attachments

(1 file)

User-Agent:       Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20060601 Firefox 2.0 (Ubuntu-edgy)
Build Identifier: Mozilla XULRunner 1.9.1a2pre - 2008080105

Hi. I'm using xulrunner on a gumstix embedded system with an e-paper display and it works quite well. The one problem that I have is that even when idle, xulrunner still redraws the display about once a second. This results in full flashing on the screen every second. Specifically, xulrunner appears to be generating calls to gdk functions repeatedly (even when idle) that results in redrawing of the display.
(gdb) bt
#0  0x41371060 in XFlush () from /usr/lib/libX11.so.6
#1  0x411779ac in gdk_window_process_all_updates ()
   from /usr/lib/libgdk-x11-2.0.so.0
#2  0x41177a00 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
Cannot access memory at address 0x1

Reproducible: Always

Steps to Reproduce:
The gumstix build environment is a bit complex. There are details of how to build it here: http://www.gumstix.net/Software/view/Getting-started/Setting-up-a-build-environment/111.html

But I suspect the issue is not related to gumstix and is probably platform independent. In any case, one could set breakpoint in XFlush and see if it is  called repeatedly even when system is idle.
(gdb) b XFlush
Breakpoint 2 at 0x41371060
(gdb) c
Continuing.

Breakpoint 2, 0x41371060 in XFlush () from /usr/lib/libX11.so.6
(gdb) bt
#0  0x41371060 in XFlush () from /usr/lib/libX11.so.6
#1  0x411779ac in gdk_window_process_all_updates ()
   from /usr/lib/libgdk-x11-2.0.so.0
#2  0x41177a00 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
Cannot access memory at address 0x1

Actual Results:  
xulrunner redraws the display repeatedly when idle

Expected Results:  
When xulrunner is idle, it should not redraw the display.

I've attempted to do some debugging to try and resolve the problem. I'm happy to do more if need be. Here are my current notes:

root@gumstix-custom-basix:~/newtest/usr/local/fennec$ xulrunner --version
Mozilla XULRunner 1.9.1a2pre - 2008080105
root@gumstix-custom-basix:~/newtest/usr/local/fennec$ xulrunner --gre-version
1.9.1a2pre


I typically attach post init.
root@gumstix-custom-basix:~/newtest/usr/local/fennec$ xulrunner application.ini &
root@gumstix-custom-basix:~/newtest/usr/local/fennec$ ps
  PID  Uid     VmSize Stat Command
    1 root        532 S   init [5]   
    2 root            SW< [kthreadd]
    3 root            SW< [ksoftirqd/0]
    4 root            SW< [events/0]
    5 root            SW< [khelper]
   52 root            SW< [kblockd/0]
   57 root            SW< [kseriod]
   59 root            SW< [kmmcd]
   64 root            SW< [btaddconn]
   65 root            SW< [btdelconn]
   91 root            SW  [pdflush]
   92 root            SW  [pdflush]
   93 root            SW< [kswapd0]
   94 root            SW< [aio/0]
  171 root            SW< [mtdblockd]
  190 root            SW< [kpsmoused]
  195 root            SW< [krfcommd]
  200 root            SW< [mmcqd]
  264 root        556 S < udevd --daemon 
  659 root        548 S   /usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_host
  676 messageb    680 S   /usr/bin/dbus-daemon --system 
  682 root        980 S   /usr/bin/ntpd -p /var/run/ntp.pid -g 
  690 root        616 S   /sbin/syslogd -n -O /var/log/messages -s 32 -b 1 -m 2
  692 root        592 S   /sbin/klogd -n 
  733 root        536 S   /usr/sbin/mdnsd -f /etc/bonjour.conf -b 
  740 root        416 S   /usr/sbin/cron 
  747 root        952 S   -sh 
  825 root       2564 S   Xfbdev -ac -fb /dev/fb1 
 1084 root        696 S   /bin/sh /usr/lib/mozilla-xulrunner/xulrunner applicat
 1099 root        700 S   /bin/sh /usr/lib/mozilla-xulrunner/run-mozilla.sh /us
 1104 root      16300 R   /usr/lib/mozilla-xulrunner/xulrunner-bin application.
 1110 root        744 R   ps 
root@gumstix-custom-basix:~/newtest/usr/local/fennec$ gdb -p 1104
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "arm-angstrom-linux-gnueabi".
Attaching to process 1104
Reading symbols from /usr/lib/mozilla-xulrunner/xulrunner-bin...done.
Using host libthread_db library "/lib/libthread_db.so.1".
Reading symbols from /lib/libpthread.so.0...done.
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /usr/lib/mozilla-xulrunner/libmozjs.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libmozjs.so
Reading symbols from /usr/lib/mozilla-xulrunner/libxpcom.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libxpcom.so
Reading symbols from /usr/lib/mozilla-xulrunner/libxul.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libxul.so
Reading symbols from /usr/lib/mozilla-xulrunner/libplds4.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libplds4.so
Reading symbols from /usr/lib/mozilla-xulrunner/libplc4.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libplc4.so
Reading symbols from /usr/lib/mozilla-xulrunner/libnspr4.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libnspr4.so
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /usr/lib/libgtk-x11-2.0.so.0...done.
Loaded symbols for /usr/lib/libgtk-x11-2.0.so.0
Reading symbols from /usr/lib/libatk-1.0.so.0...done.
Loaded symbols for /usr/lib/libatk-1.0.so.0
Reading symbols from /usr/lib/libgdk-x11-2.0.so.0...done.
Loaded symbols for /usr/lib/libgdk-x11-2.0.so.0
Reading symbols from /usr/lib/libgdk_pixbuf-2.0.so.0...done.
Loaded symbols for /usr/lib/libgdk_pixbuf-2.0.so.0
Reading symbols from /usr/lib/libpangocairo-1.0.so.0...done.
Loaded symbols for /usr/lib/libpangocairo-1.0.so.0
Reading symbols from /usr/lib/libpango-1.0.so.0...done.
Loaded symbols for /usr/lib/libpango-1.0.so.0
Reading symbols from /usr/lib/libcairo.so.2...done.
Loaded symbols for /usr/lib/libcairo.so.2
Reading symbols from /usr/lib/libgmodule-2.0.so.0...done.
Loaded symbols for /usr/lib/libgmodule-2.0.so.0
Reading symbols from /usr/lib/libgobject-2.0.so.0...done.
Loaded symbols for /usr/lib/libgobject-2.0.so.0
Reading symbols from /usr/lib/libglib-2.0.so.0...done.
Loaded symbols for /usr/lib/libglib-2.0.so.0
Reading symbols from /usr/lib/libX11.so.6...done.
Loaded symbols for /usr/lib/libX11.so.6
Reading symbols from /lib/libm.so.6...done.
Loaded symbols for /lib/libm.so.6
Reading symbols from /usr/lib/libstdc++.so.6...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.3...done.
Loaded symbols for /lib/ld-linux.so.3
Reading symbols from /usr/lib/libsqlite3.so.0...done.
Loaded symbols for /usr/lib/libsqlite3.so.0
Reading symbols from /usr/lib/libjpeg.so.62...done.
Loaded symbols for /usr/lib/libjpeg.so.62
Reading symbols from /usr/lib/mozilla-xulrunner/libsmime3.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libsmime3.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libsmime3.so
Reading symbols from /usr/lib/mozilla-xulrunner/libssl3.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libssl3.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libssl3.so
Reading symbols from /usr/lib/mozilla-xulrunner/libnss3.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libnss3.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libnss3.so
Reading symbols from /usr/lib/mozilla-xulrunner/libnssutil3.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libnssutil3.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libnssutil3.so
Reading symbols from /usr/lib/mozilla-xulrunner/libsoftokn3.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libsoftokn3.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libsoftokn3.so
Reading symbols from /usr/lib/libz.so.1...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /usr/lib/libpangoft2-1.0.so.0...done.
Loaded symbols for /usr/lib/libpangoft2-1.0.so.0
Reading symbols from /usr/lib/libXrender.so.1...done.
Loaded symbols for /usr/lib/libXrender.so.1
Reading symbols from /usr/lib/libfreetype.so.6...done.
Loaded symbols for /usr/lib/libfreetype.so.6
Reading symbols from /usr/lib/libfontconfig.so.1...done.
Loaded symbols for /usr/lib/libfontconfig.so.1
Reading symbols from /usr/lib/libdbus-glib-1.so.2...done.
Loaded symbols for /usr/lib/libdbus-glib-1.so.2
Reading symbols from /usr/lib/libdbus-1.so.3...done.
Loaded symbols for /usr/lib/libdbus-1.so.3
Reading symbols from /usr/lib/libXft.so.2...done.
Loaded symbols for /usr/lib/libXft.so.2
Reading symbols from /usr/lib/libXt.so.6...done.
Loaded symbols for /usr/lib/libXt.so.6
Reading symbols from /usr/lib/libgthread-2.0.so.0...done.
Loaded symbols for /usr/lib/libgthread-2.0.so.0
Reading symbols from /usr/lib/libXfixes.so.3...done.
Loaded symbols for /usr/lib/libXfixes.so.3
Reading symbols from /usr/lib/libgcrypt.so.11...done.
Loaded symbols for /usr/lib/libgcrypt.so.11
Reading symbols from /usr/lib/libXext.so.6...done.
Loaded symbols for /usr/lib/libXext.so.6
Reading symbols from /usr/lib/libXcursor.so.1...done.
Loaded symbols for /usr/lib/libXcursor.so.1
Reading symbols from /usr/lib/libpng12.so.0...done.
Loaded symbols for /usr/lib/libpng12.so.0
Reading symbols from /usr/lib/libXau.so.6...done.
Loaded symbols for /usr/lib/libXau.so.6
Reading symbols from /usr/lib/libXdmcp.so.6...done.
Loaded symbols for /usr/lib/libXdmcp.so.6
Reading symbols from /usr/lib/libexpat.so.1...done.
Loaded symbols for /usr/lib/libexpat.so.1
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /usr/lib/libSM.so.6...done.
Loaded symbols for /usr/lib/libSM.so.6
Reading symbols from /usr/lib/libICE.so.6...done.
Loaded symbols for /usr/lib/libICE.so.6
Reading symbols from /lib/librt.so.1...done.
Loaded symbols for /lib/librt.so.1
Reading symbols from /usr/lib/libgpg-error.so.0...done.
Loaded symbols for /usr/lib/libgpg-error.so.0
Reading symbols from /lib/libnss_compat.so.2...done.
Loaded symbols for /lib/libnss_compat.so.2
Reading symbols from /usr/lib/gconv/ISO8859-1.so...done.
Loaded symbols for /usr/lib/gconv/ISO8859-1.so
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
Reading symbols from /lib/libnss_dns.so.2...done.
Loaded symbols for /lib/libnss_dns.so.2
Reading symbols from /lib/libresolv.so.2...done.
Loaded symbols for /lib/libresolv.so.2
Reading symbols from /usr/lib/mozilla-xulrunner/components/libdbusservice.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/components/libdbusservice.so
Reading symbols from /usr/lib/pango/1.6.0/modules/pango-basic-fc.so...done.
Loaded symbols for /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
Reading symbols from /usr/lib/mozilla-xulrunner/libnssdbm3.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libnssdbm3.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libnssdbm3.so
Reading symbols from /usr/lib/mozilla-xulrunner/libfreebl3.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libfreebl3.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libfreebl3.so
Reading symbols from /usr/lib/mozilla-xulrunner/libnssckbi.so...Reading symbols from /usr/lib/mozilla-xulrunner/.debug/libnssckbi.so...done.
done.
Loaded symbols for /usr/lib/mozilla-xulrunner/libnssckbi.so
Reading symbols from /usr/lib/mozilla-xulrunner/components/libimgicon.so...done.
Loaded symbols for /usr/lib/mozilla-xulrunner/components/libimgicon.so
0x416600b4 in poll () from /lib/libc.so.6
(gdb) b gdk_window_invalidate_rect
Breakpoint 1 at 0x41178384
(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) bt
#0  0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
#1  0x40a3dba0 in ?? () from /usr/lib/mozilla-xulrunner/libxul.so
(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
root@gumstix-custom-basix:~/newtest/usr/local/fennec$ fg
(gdb) 
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) b XFlush
Breakpoint 2 at 0x41371060
(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) bt
#0  0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
#1  0x40a3dba0 in ?? () from /usr/lib/mozilla-xulrunner/libxul.so
(gdb) c
Continuing.

Breakpoint 2, 0x41371060 in XFlush () from /usr/lib/libX11.so.6
(gdb) bt
#0  0x41371060 in XFlush () from /usr/lib/libX11.so.6
#1  0x411779ac in gdk_window_process_all_updates ()
   from /usr/lib/libgdk-x11-2.0.so.0
#2  0x41177a00 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
Cannot access memory at address 0x1
(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0

(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 2, 0x41371060 in XFlush () from /usr/lib/libX11.so.6
(gdb) bt
#0  0x41371060 in XFlush () from /usr/lib/libX11.so.6
#1  0x411779ac in gdk_window_process_all_updates ()
   from /usr/lib/libgdk-x11-2.0.so.0
#2  0x41177a00 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
Cannot access memory at address 0x1
(gdb) 

I'm attached to the correct xulrunner process as there is only one on the system. I can see most of the object symbols. For example, symbols with invalidate are:
PKIX_PL_Object_InvalidateCache
SSL_InvalidateSession
atk_object_factory_invalidate
g_closure_add_invalidate_notifier
g_closure_invalidate
g_closure_remove_invalidate_notifier
gdk_window_invalidate_maybe_recurse
gdk_window_invalidate_rect
gdk_window_invalidate_region
gtk_text_layout_invalidate

Some more debugging output in case it is useful.

(gdb) b atk_object_factory_invalidate
Breakpoint 6 at 0x41137a44
(gdb) b g_closure_add_invalidate_notifier
Breakpoint 7 at 0x412b3ec8
(gdb) b g_closure_invalidate
Breakpoint 8 at 0x412b3e48
(gdb) b g_closure_remove_invalidate_notifier
Breakpoint 9 at 0x412b3aa8
(gdb) b gdk_window_invalidate_maybe_recurse
Breakpoint 10 at 0x41178018
(gdb) b gdk_window_invalidate_rect
Note: breakpoint 1 also set at pc 0x41178384.
Breakpoint 11 at 0x41178384
(gdb) b gdk_window_invalidate_region
Breakpoint 12 at 0x41178350
(gdb) b gtk_text_layout_invalidate
Breakpoint 13 at 0x40fc7660
(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 12, 0x41178350 in gdk_window_invalidate_region ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 10, 0x41178018 in gdk_window_invalidate_maybe_recurse ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 12, 0x41178350 in gdk_window_invalidate_region ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 10, 0x41178018 in gdk_window_invalidate_maybe_recurse ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 2, 0x41371060 in XFlush () from /usr/lib/libX11.so.6
(gdb) c
Continuing.

Breakpoint 1, 0x41178384 in gdk_window_invalidate_rect ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 12, 0x41178350 in gdk_window_invalidate_region ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
Continuing.

Breakpoint 10, 0x41178018 in gdk_window_invalidate_maybe_recurse ()
   from /usr/lib/libgdk-x11-2.0.so.0
(gdb) c
if you're running fennec on there, i suspect you're running in to the code in deckbrowser.xml that does:

this._updateTimeout = setTimeout(function () {
             if (!self.dragData.dragging)
               self._browserToCanvas();
           }, 100);

we're working to remove it.  see bug 450930.  you might try removing that and see if that fixes the problems you're seeing.
Depends on: 450930
Thanks Stuart. That sounds like the right issue. I'll give this a try asap.
Hi. I've made some progress with testing. Here are my notes:
- I was previously using xulrunner. I've now switched my build over to fennec.
- I'm using top of hg tree from Sun 8/24. 
$ fennec --version
Mozilla Fennec 0.7, Copyright (c) 2008 Mozilla.org
nsStringStats
 => mAllocCount:              6
 => mReallocCount:            2
 => mFreeCount:               6
 => mShareCount:              3
 => mAdoptCount:              0
 => mAdoptFreeCount:          0
- If I change timeout to 1000, I no longer get flashing but I also no longer get the page pane. I've put a digicam pic of that here. http://sites.google.com/site/jayakumarlkml/
- If I change timeout to 200, or 400. I still get flashing. I couldn't tell if the rate has changed. If I had to say, I would guess it has not but that clashes with the above observation.
ps: is there an easy way for me to edit deckbrowser.xml. I currently use the following process:
a) unzip browser.jar
b) edit xml
c) zip -r
d) transfer to gumstix
e) test

Any feedback and advice would be welcome. Thanks.
Oops, forgot to mention:
- if I takeout the whole block, ie: delete the following from deckbrowser.xml
          this._updateTimeout = setTimeout(function () {
            if (!self.dragData.dragging && !self.dragData.kineticId)
              self._browserToCanvas();
          }, 1000);
then the observed behavior is the same as when setting it to 1000, which is no flashing and no page displayed.
- btw, there is quite a bit of console output when i run fennec. I haven't understood it yet. I will attach it here for review.
This output is from the unmodified chrome deckbrowser.xml so it flashes.
Jaya, is this better now?  We shouldn't be repainting as much anymore
Status: UNCONFIRMED → RESOLVED
Closed: 16 years ago
Resolution: --- → FIXED
Oops sorry. I meant to update the bug. Yes, the problem appears to be fixed! Thanks. Here's a video clip showing it in action: http://www.youtube.com/watch?v=BabGfRBAtF4

Thanks to everyone who helped! There are some other performance issues but I'll file separate bugs once I figure out the root causes.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: