User:Sb
From Apache OpenOffice Wiki
Stephan Bergmann, employed by Sun Microsystems, located in Hamburg, Germany.
Scratchpad
- Issue 96284 “registry symlink foo ...”
- Issue 97424 “improve ImplImageTree performance”
Additional processes during startup
Starting OOo DEV300m39
unxlngi6.pro
on v20z-so3
(some old Ubuntu machine), soffice.bin
spawns additional processes during start up:
$ strace -fF opt/openoffice.org3/program/soffice.bin 2>&1 | grep 'exec.*(' execve("ooo/opt/openoffice.org3/program/soffice.bin", ["ooo/opt/openoffice.org3/program/"...], [/* 17 vars */]) = 0 [pid 19800] execve("/usr/lib/libgconf2-4/gconfd-2", ["/usr/lib/libgconf2-4/gconfd-2", "17"], [/* 18 vars */] <unfinished ...> [pid 19802] execve("/bin/sh", ["sh", "-c", "sh -c paperconf 2>/dev/null"], [/* 18 vars */]) = 0 [pid 19803] execve("/bin/sh", ["sh", "-c", "paperconf"], [/* 17 vars */]) = 0
It turns out only the first additional process (/usr/lib/libgconf2-4/gconfd-2
) is spawned directly from soffice.bin
(and the following ones are in turn spawned from that process), and it is spawned during a call to gconf_client_preload
:
$ gdb opt/openoffice.org3/program/soffice.bin (gdb) break fork Breakpoint 2 at 0xb7c6f584 (gdb) run Breakpoint 2, 0xb7c6f584 in fork () from /lib/tls/i686/cmov/libpthread.so.0 (gdb) info threads 4 Thread -1296356432 (LWP 19893) 0xffffe410 in __kernel_vsyscall () 3 Thread -1287963728 (LWP 19892) 0xffffe410 in __kernel_vsyscall () 2 Thread -1251386448 (LWP 19889) 0xffffe410 in __kernel_vsyscall () * 1 Thread -1251252000 (LWP 19887) 0xb7c6f584 in fork () from /lib/tls/i686/cmov/libpthread.so.0 (gdb) where #0 0xb7c6f584 in fork () from /lib/tls/i686/cmov/libpthread.so.0 #1 0xb496593a in g_spawn_error_quark () from /usr/lib/libglib-2.0.so.0 #2 0xb49660fe in g_spawn_async_with_pipes () from /usr/lib/libglib-2.0.so.0 #3 0xb496617b in g_spawn_async () from /usr/lib/libglib-2.0.so.0 #4 0xb34a4ec6 in gconf_activate_server () from /usr/lib/libgconf-2.so.4 #5 0xb34afc29 in gconf_debug_shutdown () from /usr/lib/libgconf-2.so.4 #6 0xb34b06e1 in gconf_spawn_daemon () from /usr/lib/libgconf-2.so.4 #7 0xb34b091a in gconf_spawn_daemon () from /usr/lib/libgconf-2.so.4 #8 0xb34b148c in gconf_engine_all_entries () from /usr/lib/libgconf-2.so.4 #9 0xb34b7540 in gconf_client_all_entries () from /usr/lib/libgconf-2.so.4 #10 0xb34e0f9c in GconfLayer::getTimestamp (this=0xb342dc1c) at /so/ws/DEV300/ooo/shell/source/backends/gconfbe/gconflayer.cxx:528 #11 0xb35dc4c3 in configmgr::backend::BinaryReadHandler::validateHeader ( this=0xbffcf42c, pLayers=0xb33c2020, nNumLayers=6, _aSchemaVersion=@0xbffcf550, aRequestedLocale=@0xbffcf530, outKnownLocales=@0xbffcf540) at Reference.h:366 #12 0xb35dd151 in configmgr::backend::BinaryCache::readComponentData ( this=0xb33bca1c, aComponentData=@0xbffcf698, aFactory=@0xbffcf510, aComponent=@0xbffcf6c8, aSchemaVersion=@0xbffcf550, aEntity=@0xbffcf520, aRequestedLocale=@0xbffcf530, outKnownLocales=@0xbffcf540, pLayers=0xb33c2020, nNumLayers=6, bIncludeTemplates=true) at /so/ws/DEV300/ooo/configmgr/source/backend/binarycache.cxx:200 #13 0xb35cc7bd in configmgr::backend::BackendAccess::readDefaultData ( this=0xb4584d5c, aComponentData=@0xbffcf698, aComponent=@0xbffcf6c8, aOptions=@0xbffcf83c, bIncludeTemplates=true, pLayers=0xb33c2020, nNumLayers=6, aTemplateProvider=0xb352d60c, pLayersMerged=0xbffcf644) at /so/ws/DEV300/ooo/configmgr/source/backend/backendaccess.cxx:84 #14 0xb35cd9bd in configmgr::backend::BackendAccess::getNodeData ( this=0xb4584d5c, aRequest=@0xbffcf838, _aTemplateProvider=0xb352d60c, aListener=0xb352d610) at request.hxx:75 #15 0xb35934e5 in configmgr::backend::CacheController::loadDirectly ( this=0xb352d604, _aRequest=@0xbffcf838, _bAddListenter=true) at ref.hxx:167 #16 0xb3597198 in configmgr::backend::CacheController::loadComponent ( this=0xb352d604, _aRequest=@0xbffcf838) at /so/ws/DEV300/ooo/configmgr/source/treecache/cachecontroller.cxx:376 #17 0xb359b6d4 in configmgr::TreeManager::requestSubtree (this=0xb4584eac, aSubtreePath=@0xbffcf960, _aOptions=@0xbffcf83c) at ref.hxx:99 #18 0xb36517e9 in configmgr::OProviderImpl::requestSubtree (this=0xb458b31c, aSubtreePath=@0xbffcf960, _aOptions=@0xbffcf9a0) at ref.hxx:167 #19 0xb3652f6b in configmgr::OProviderImpl::buildReadAccess (this=0xb458b31c, _rAccessor=@0xbffcf9c0, _aOptions=@0xbffcf9a0, nMinLevels=-1) at /so/ws/DEV300/ooo/configmgr/source/api2/providerimpl.cxx:490 #20 0xb36532b5 in configmgr::OProviderImpl::createReadAccess (this=0xb458b31c, aArgs=@0xbffcfb80) at /so/ws/DEV300/ooo/configmgr/source/api2/providerimpl.cxx:860 #21 0xb364b799 in configmgr::OProvider::createInstanceWithArguments ( this=0xb376a554, aServiceSpecifier=@0xbffcfb20, aArguments=@0xbffcfb80) at Reference.h:359 #22 0xb690b180 in DefaultFontConfiguration (this=0xb33c3394) at Reference.h:366 #23 0xb690ba5f in vcl::DefaultFontConfiguration::get () at /so/ws/DEV300/ooo/vcl/source/gdi/fontcfg.cxx:107 #24 0xb684818d in ImplStyleData::SetStandardStyles (this=0xb33df618) at ustring.hxx:111 #25 0xb6848945 in ImplStyleData (this=0xb33df618) at /so/ws/DEV300/ooo/vcl/source/app/settings.cxx:438 #26 0xb6848eef in StyleSettings (this=0x0) at /so/ws/DEV300/ooo/vcl/source/app/settings.cxx:640 #27 0xb684aa98 in ImplAllSettingsData (this=0xb33b71c8) at /so/ws/DEV300/ooo/vcl/source/app/settings.cxx:1523 #28 0xb684b244 in AllSettings (this=0x0) at /so/ws/DEV300/ooo/vcl/source/app/settings.cxx:1590 #29 0xb684ce12 in Application::GetSettings () at /so/ws/DEV300/ooo/vcl/source/app/svapp.cxx:814 #30 0xb68c699c in OutputDevice (this=0xb458e924) at /so/ws/DEV300/ooo/vcl/source/gdi/outdev.cxx:427 #31 0xb6a18618 in Window (this=0xb458e924, nType=383) at /so/ws/DEV300/ooo/vcl/source/window/window.cxx:4288 #32 0xb69ee0b7 in SystemWindow (this=0xb458e924, nType=0) at /so/ws/DEV300/ooo/vcl/source/window/syswin.cxx:83 #33 0xb6a28a72 in WorkWindow (this=0xb458e924, nType=0) at /so/ws/DEV300/ooo/vcl/source/window/wrkwin.cxx:114 #34 0xb69c8151 in IntroWindow (this=0xb458e924) at /so/ws/DEV300/ooo/vcl/source/window/introwin.cxx:61 #35 0xb239185d in SplashScreen (this=0xb458e908, rSMgr=@0x0) at /so/ws/DEV300/ooo/desktop/source/splash/splash.cxx:83 #36 0xb2391b10 in desktop::SplashScreen::getInstance (rSMgr=@0xbffcfdec) at weak.hxx:91 #37 0xb77d9206 in cppu::OSingleFactoryHelper::createInstanceEveryTime ( this=0xb33b726c, xContext=@0x1) at Reference.h:359 #38 0xb77d88be in cppu::OSingleFactoryHelper::createInstanceWithContext ( this=0x0, xContext=@0xb4e41ad8) at Reference.h:359 #39 0xb77d8cb1 in cppu::OFactoryComponentHelper::createInstanceWithContext ( this=0xb33b7238, xContext=@0xb4e41ad8) at Reference.h:359 #40 0xb77d9988 in cppu::OSingleFactoryHelper::createInstanceWithArgumentsAndContext (this=0x0, rArguments=@0xbffd0160, xContext=@0xb4e41ad8) at Reference.h:359 #41 0xb77da48e in cppu::OFactoryComponentHelper::createInstanceWithArgumentsAndContext (this=0xb33b7238, rArguments=@0xbffd0160, xContext=@0xb4e41ad8) at Reference.h:359 #42 0xb77dadce in cppu::ORegistryFactoryHelper::createInstanceWithArgumentsAndContext (this=0xb33b4264, rArguments=@0xbffd0160, xContext=@0xb4e41ad8) at Reference.h:366 #43 0xb45f68e9 in stoc_smgr::OServiceManager::createInstanceWithArgumentsAndContext (this=0xb33b42a0, rServiceSpecifier=@0xbffd0130, rArguments=@0xbffd0160, xContext=@0xb4e41ad8) at Reference.h:366 #44 0xb45f61a8 in stoc_smgr::OServiceManager::createInstanceWithArguments ( this=0x1, rServiceSpecifier=@0xbffd0130, rArguments=@0xbffd0160) at Reference.h:359 #45 0xb7dbcc21 in desktop::Desktop::OpenSplashScreen (this=0xbffd04a4) at Reference.h:121 #46 0xb7dbd296 in desktop::Desktop::Main (this=0xbffd04a4) at /so/ws/DEV300/ooo/desktop/source/app/app.cxx:1232 #47 0xb6852372 in ImplSVMain () at /so/ws/DEV300/ooo/vcl/source/app/svmain.cxx:194 #48 0xb68524fd in SVMain () at /so/ws/DEV300/ooo/vcl/source/app/svmain.cxx:235 #49 0xb7de6e23 in soffice_main () at /so/ws/DEV300/ooo/desktop/source/app/sofficemain.cxx:52 #50 0x08048dea in main (argc=1, argv=0xbffd0584) at main.c:38 (gdb) cont Program exited normally. (gdb) quit
The first call to gconf_client_preload
(that presumably does the spawning) accounts for 0.05 seconds of real time during start up:
$ patch -p 0 <<-\EOF Index: tags/DEV300_m39/shell/source/backends/gconfbe/gconflayer.cxx =================================================================== --- tags/DEV300_m39/shell/source/backends/gconfbe/gconflayer.cxx (revision 266425) +++ tags/DEV300_m39/shell/source/backends/gconfbe/gconflayer.cxx (working copy) @@ -1,3 +1,6 @@ +/*SB*/#include<stdio.h> +/*SB*/#include<sys/times.h> +/*SB*/#include<unistd.h> /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -524,8 +527,10 @@ GConfValue* aGconfValue; int i = 0; +/*SB*/tms TMS;clock_t TIME=times(&TMS); while( m_pPreloadValuesList[i] != NULL ) gconf_client_preload( aClient, m_pPreloadValuesList[i++], GCONF_CLIENT_PRELOAD_ONELEVEL, NULL ); +/*SB*/TIME=times(&TMS)-TIME;fprintf(stderr,"time %f\n",double(TIME)/sysconf(_SC_CLK_TCK));for(int N=0;N<i;++N)fprintf(stderr," preload %d <%s>\n",N,m_pPreloadValuesList[N]); for( i = 0; i < m_nConfigurationValues; i++ ) { EOF
$ opt/openoffice.org3/program/soffice.bin time 0.050000 preload 0 </desktop/gnome/interface> time 0.010000 preload 0 </desktop/gnome/url-handlers/mailto> time 0.000000