[Libreoffice-commits] core.git: Branch 'feature/perfwork4' - 2 commits - package/inc package/source
Matúš Kukan
matus.kukan at collabora.com
Tue Nov 4 01:06:21 PST 2014
package/inc/ZipOutputStream.hxx | 6 +++---
package/source/zipapi/ZipOutputStream.cxx | 13 ++++---------
package/source/zippackage/ZipPackageStream.cxx | 9 +++++++--
3 files changed, 14 insertions(+), 14 deletions(-)
New commits:
commit 826e0ee5011152f6009f5eaf4a88b6d57a3efd28
Author: Matúš Kukan <matus.kukan at collabora.com>
Date: Tue Nov 4 09:58:00 2014 +0100
package: Use comphelper::ThreadPool for deflating
Change-Id: I6bd75c0aeff18b17fba933874a9964fe1dc47404
diff --git a/package/inc/ZipOutputStream.hxx b/package/inc/ZipOutputStream.hxx
index 54638d5..acf6dc4 100644
--- a/package/inc/ZipOutputStream.hxx
+++ b/package/inc/ZipOutputStream.hxx
@@ -23,7 +23,7 @@
#include <com/sun/star/io/XOutputStream.hpp>
#include <ByteChucker.hxx>
-#include <osl/thread.hxx>
+#include <comphelper/threadpool.hxx>
#include <vector>
@@ -38,7 +38,7 @@ class ZipOutputStream
ByteChucker m_aChucker;
ZipEntry *m_pCurrentEntry;
- std::vector< osl::Thread* > m_aWorkers;
+ comphelper::ThreadPool &m_rSharedThreadPool;
std::vector< ZipOutputEntry* > m_aEntries;
public:
@@ -46,7 +46,7 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > &xOStream );
~ZipOutputStream();
- void addDeflatingThread( ZipOutputEntry *pEntry, osl::Thread *pThread );
+ void addDeflatingThread( ZipOutputEntry *pEntry, comphelper::ThreadTask *pThreadTask );
void writeLOC( ZipEntry *pEntry, bool bEncrypt = false )
throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
diff --git a/package/source/zipapi/ZipOutputStream.cxx b/package/source/zipapi/ZipOutputStream.cxx
index c91b351..902816e 100644
--- a/package/source/zipapi/ZipOutputStream.cxx
+++ b/package/source/zipapi/ZipOutputStream.cxx
@@ -41,6 +41,7 @@ ZipOutputStream::ZipOutputStream( const uno::Reference < io::XOutputStream > &xO
: m_xStream(xOStream)
, m_aChucker(xOStream)
, m_pCurrentEntry(NULL)
+, m_rSharedThreadPool(comphelper::ThreadPool::getSharedOptimalPool())
{
}
@@ -64,11 +65,10 @@ void ZipOutputStream::setEntry( ZipEntry *pEntry )
}
}
-void ZipOutputStream::addDeflatingThread( ZipOutputEntry *pEntry, osl::Thread *pThread )
+void ZipOutputStream::addDeflatingThread( ZipOutputEntry *pEntry, comphelper::ThreadTask *pThread )
{
- m_aWorkers.push_back(pThread);
+ m_rSharedThreadPool.pushTask(pThread);
m_aEntries.push_back(pEntry);
- pThread->create();
}
void ZipOutputStream::rawWrite( const Sequence< sal_Int8 >& rBuffer )
@@ -96,12 +96,7 @@ void ZipOutputStream::finish()
assert(!m_aZipList.empty() && "Zip file must have at least one entry!");
// Wait for all threads to finish & write
- for (size_t i = 0; i < m_aWorkers.size(); i++)
- {
- m_aWorkers[i]->join();
- delete m_aWorkers[i];
- }
-
+ m_rSharedThreadPool.waitUntilEmpty();
for (size_t i = 0; i < m_aEntries.size(); i++)
{
writeLOC(m_aEntries[i]->getZipEntry(), m_aEntries[i]->isEncrypt());
diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx
index 548f1c5..df0bf46 100644
--- a/package/source/zippackage/ZipPackageStream.cxx
+++ b/package/source/zippackage/ZipPackageStream.cxx
@@ -456,7 +456,7 @@ static void deflateZipEntry(ZipOutputEntry *pZipEntry,
pZipEntry->closeEntry();
}
-class DeflateThread: public osl::Thread
+class DeflateThread: public comphelper::ThreadTask
{
ZipOutputEntry *mpEntry;
uno::Reference< io::XInputStream > mxInStream;
@@ -469,7 +469,7 @@ public:
{}
private:
- virtual void SAL_CALL run() SAL_OVERRIDE
+ virtual void doWork() SAL_OVERRIDE
{
deflateZipEntry(mpEntry, mxInStream);
mxInStream.clear();
commit 5916edd1e68af2b2a989c0883c5f39ef17e62a8c
Author: Matúš Kukan <matus.kukan at collabora.com>
Date: Tue Nov 4 09:18:57 2014 +0100
package: Do not deflate small streams in a thread
Change-Id: Iae804a34f344aa793a6d5c13315f7bc1eb64c0a2
diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx
index 1efa9ab..548f1c5 100644
--- a/package/source/zippackage/ZipPackageStream.cxx
+++ b/package/source/zippackage/ZipPackageStream.cxx
@@ -798,6 +798,11 @@ bool ZipPackageStream::saveChild(
else
{
bParallelDeflate = true;
+ // Do not deflate small streams in a thread
+ uno::Reference< io::XSeekable > xSeek( xStream, uno::UNO_QUERY );
+ if (xSeek.is() && xSeek->getLength() < 100000)
+ bParallelDeflate = false;
+
if (bParallelDeflate)
{
// Start a new thread deflating this zip entry
More information about the Libreoffice-commits
mailing list