Hi, From the log it looks very likely this is related to https://bugzilla.mozilla.org/show_bug.cgi?id=670802 I filed bugzilla.mozilla.org/show_bug.cgi?id=73084 to do the same thing in gecko to help people with older atk etc. I pln to land a fix for the gecko bug shortly so hopefully the issue will be fixed in nightly builds in a day or two. Trev On Mon, Feb 27, 2012 at 08:50:17AM -0500, Trevor Saunders wrote:
Hi, I wonder if you could produce a log of the events emitted by thunderbird with the attached script. First start the script as atspimon.py Thunderbird > logfile 2>&1 Then start thunderbird, wait for it to become usable and kill the script. You might want to make sure that Thunderbird is the name that pyatspi knows about with say accerciser, but I'm pretty sure it is. Trev On Mon, Feb 27, 2012 at 02:01:05PM +0100, Hammer Attila wrote:Hy, I now looked Thunderbird 11.0~b3 performance in Ubuntu Precise if Orca running. When I always need launching Thunderbird, I need wayting 40 second or more before possible switching Thunderbird window if not focused. Don't surprise, because my inbox folder now have 2340 messages, but this slow application launching is very disturb always. I maked a debug.out file with I sending attachment. Before I report a new but perhaps invalid bug for Orca side, possible anybody wiewing this attachment file what problem producing this performance issue again? Prewious I attached wrong this file with following bugreport, this bug oldest time fixed: https://bugzilla.gnome.org/show_bug.cgi?id=665870 Attila_______________________________________________ orca-list mailing list orca-list gnome org http://mail.gnome.org/mailman/listinfo/orca-list Visit http://live.gnome.org/Orca for more information on Orca. The manual is at http://library.gnome.org/users/gnome-access-guide/nightly/ats-2.html The FAQ is at http://live.gnome.org/Orca/FrequentlyAskedQuestions Log bugs and feature requests at http://bugzilla.gnome.org Find out how to help at http://live.gnome.org/Orca/HowCanIHelp
#!/usr/bin/env python ############################################################################## # Written by: Brian G. Merrell <bgmerrell novell com> # Date: June 17 2008 # Description: Monitor at-spi events # Inspired by Accerciser's Event Monitor plugin ############################################################################## import sys import os import pyatspi import atexit import getopt from xml.sax.saxutils import escape # simply takes a string s as input and prints it if running verbosely def output(s, newline=True): if not Settings.is_quiet: if newline: print s else: print s, if Settings.log_file: if not Settings.log_file.closed: if newline: Settings.log_file.write(s) else: Settings.log_file.write("%s\n" % s) def abort(status): ''' exit according to status ''' exit(status) class Settings(object): # static variable, set by ctor is_quiet = None log_path = None source_apps = [] log_file = None xml_format = None def __init__(self): self.argument_parser() if Settings.log_path: try: Settings.log_file = open(Settings.log_path, 'w') except IOError: output("Error opening log file!") abort(1) def help(self): output("Usage: atspimon.py [-hqlx] NAME1 NAME2 ...") output("Where NAME is the application to monitor.") output('Find NAME in the "Name" column of Accerciser') output("") output("Common Options:") output(" -h | --help Print help information (this message).") output(" -q | --quiet Don't print anything.") output(" -l | --log= Where the log should be stored.") output(" -x | --xml Use XML format for events output.") def argument_parser(self): opts = [] args = [] try: opts, args = getopt.getopt(sys.argv[1:],\ "hxql:s:",["help","xml","quiet","log=","source="]) except getopt.GetoptError: self.help() for o,a in opts: if o in ("-q","--quiet"): Settings.is_quiet = True for o,a in opts: if o in ("-h","--help"): self.help() abort(0) if o in ("-l","--log"): Settings.log_path = a if o in ("-x","--xml"): Settings.xml_format = True if len(args) < 1: output("You must specify an application to monitor.") self.help() abort(2) reg = pyatspi.Registry() desktop = reg.getDesktop(0) try: desktop.queryTable() except NotImplementedError: pass Settings.source_apps = args[0:] if not Settings.xml_format: apps = [app.name for app in desktop if app is not None] for source_app in Settings.source_apps: if source_app not in apps: output("The app '%s' was not found on the desktop now, so waiting for it to appear..." % source_app) class Monitor: def __init__(self): self.events = pyatspi.EVENT_TREE.keys() for sub_events in pyatspi.EVENT_TREE.itervalues(): self.events.extend(sub_events) self.events = list(set([event.strip(':') for event in self.events])) self.events.sort() def _eventFilter(self, event): ''' Determine if an event's source should make the event filtered. @param event: The given at-spi event. @type event: Accessibility.Event @return: False if the event should be filtered. @rtype: boolean ''' if (hasattr(event.source, 'getApplication')): app = event.source.getApplication() if app: app = app.name for source_app in settings.source_apps: if (source_app == app): return True return False def _handleEvent(self, event): ''' Main at-spi event client. If event passes filtering requirements, log it. @param event: The at-spi event recieved. @type event: Accessibility.Event ''' if not self._eventFilter(event): return if Settings.xml_format: output('<event source_name="%s" source_role="%s" type="%s" detail1="%s" detail2="%s">%s</event>' % (event.source.name, event.source.getRoleName(), event.type, event.detail1, event.detail2, escape(str(event.any_data))), False) output('\n', False) else: output('%s(%s, %s, %s)\n\tsource: ' % (event.type, event.detail1, event.detail2, event.any_data), False) output(str(event.source), False) output(str(event.source.getState().getStates()), False) output('\n\tapplication: ', False) output(str(event.host_application), False) output('\n', False) def begin(self): if Settings.xml_format: output('<events>') else: output("Registering Event Listener...") pyatspi.Registry.registerEventListener(self._handleEvent, *self.events) pyatspi.Registry.start() def end(self): if Settings.xml_format: output('</events>') else: output("Deregistering Event Listener...") pyatspi.Registry.deregisterEventListener(self._handleEvent, *self.events) pyatspi.Registry.stop() if Settings.log_file: if not Settings.log_file.closed: Settings.log_file.close() class Main(object): def main(self, argv=None): m = Monitor() try: m.begin() except KeyboardInterrupt: m.end() settings = Settings() if __name__ == '__main__': main_obj = Main(); sys.exit(main_obj.main())
Attachment:
signature.asc
Description: Digital signature