summaryrefslogtreecommitdiff
path: root/xmlhelp
diff options
context:
space:
mode:
authorsb <sb@openoffice.org>2009-12-10 17:46:18 +0100
committersb <sb@openoffice.org>2009-12-10 17:46:18 +0100
commit218d284b4d8073e2582d09dd9b2f9cbb0aa240d6 (patch)
tree062559d65034670fb2f83ca6b455175f825b095b /xmlhelp
parent6a4236db890cc672124635b788aabc72bf7f61d7 (diff)
parent12c7dc97e4470d70a9df30429c3dc51343682c07 (diff)
sb111: merged in DEV300_m67
Diffstat (limited to 'xmlhelp')
-rw-r--r--xmlhelp/source/cxxhelp/provider/databases.cxx20
1 files changed, 20 insertions, 0 deletions
diff --git a/xmlhelp/source/cxxhelp/provider/databases.cxx b/xmlhelp/source/cxxhelp/provider/databases.cxx
index 52cfa47c36..f88392a3db 100644
--- a/xmlhelp/source/cxxhelp/provider/databases.cxx
+++ b/xmlhelp/source/cxxhelp/provider/databases.cxx
@@ -137,6 +137,19 @@ rtl::OUString Databases::expandURL( const rtl::OUString& aURL, Reference< uno::X
return aRetURL;
}
+
+// Hold Packages to improve performance (#i106100)
+// The PackageManager implementation seems to completely throw away all cached data
+// as soon as the last reference to a XPackage dies. Maybe this should be changed.
+struct ImplPackageSequenceHolder
+{
+ Sequence< Reference< deployment::XPackage > > m_aUserPackagesSeq;
+ Sequence< Reference< deployment::XPackage > > m_aSharedPackagesSeq;
+};
+
+static ImplPackageSequenceHolder* GpPackageSequenceHolder = NULL;
+
+
Databases::Databases( sal_Bool showBasic,
const rtl::OUString& instPath,
const com::sun::star::uno::Sequence< rtl::OUString >& imagesZipPaths,
@@ -182,6 +195,8 @@ Databases::Databases( sal_Bool showBasic,
m_xSFA = Reference< ucb::XSimpleFileAccess >(
m_xSMgr->createInstanceWithContext( rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ),
m_xContext ), UNO_QUERY_THROW );
+
+ GpPackageSequenceHolder = new ImplPackageSequenceHolder();
}
Databases::~Databases()
@@ -230,6 +245,7 @@ Databases::~Databases()
}
}
+ delete GpPackageSequenceHolder;
}
static bool impl_getZipFile(
@@ -1525,6 +1541,8 @@ Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextUserHelpPack
thePackageManagerFactory::get( m_xContext )->getPackageManager( rtl::OUString::createFromAscii("user") );
m_aUserPackagesSeq = xUserManager->getDeployedPackages
( Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ if( GpPackageSequenceHolder != NULL )
+ GpPackageSequenceHolder->m_aUserPackagesSeq = m_aUserPackagesSeq;
m_bUserPackagesLoaded = true;
}
@@ -1555,6 +1573,8 @@ Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextSharedHelpPa
thePackageManagerFactory::get( m_xContext )->getPackageManager( rtl::OUString::createFromAscii("shared") );
m_aSharedPackagesSeq = xSharedManager->getDeployedPackages
( Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ if( GpPackageSequenceHolder != NULL )
+ GpPackageSequenceHolder->m_aSharedPackagesSeq = m_aSharedPackagesSeq;
m_bSharedPackagesLoaded = true;
}