summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2022-01-10 11:51:40 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-01-10 17:59:45 +0100
commit17950f4d204e9947f125ebc0aac1156eba6501f2 (patch)
tree1b51bdc13a1006aeb29a6dff658ba1b3f1028708
parent952b3b227e02ae4eedce3138fcb39613bf12486d (diff)
use less SvStream::Flush()
Flush() turns into a sync() on the device, which is pretty slow. Most of the time all we actually want to do is to flush the internal buffers from the SvStream. So expose the FlushBuffer method and use that where possible. And also means we don't need the mbDontFlushOnClose flag on SvStream any more. Change-Id: Ibe089b88b325f0fdc565200a97ce72cd26b7fcfb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128214 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--connectivity/source/drivers/dbase/DTable.cxx4
-rw-r--r--connectivity/source/drivers/file/FTable.cxx3
-rw-r--r--editeng/source/editeng/impedit4.cxx1
-rw-r--r--forms/source/component/DatabaseForm.cxx4
-rw-r--r--include/tools/stream.hxx8
-rw-r--r--lotuswordpro/source/filter/explode.cxx2
-rw-r--r--sc/source/core/tool/autoform.cxx2
-rw-r--r--sc/source/filter/excel/xechart.cxx2
-rw-r--r--sc/source/filter/excel/xestream.cxx2
-rw-r--r--sfx2/source/doc/docfile.cxx4
-rw-r--r--sfx2/source/doc/graphhelp.cxx2
-rw-r--r--sot/source/sdstor/storage.cxx4
-rw-r--r--svtools/qa/unit/testHtmlWriter.cxx2
-rw-r--r--sw/source/core/doc/tblafmt.cxx2
-rw-r--r--sw/source/uibase/config/uinums.cxx2
-rw-r--r--tools/source/stream/stream.cxx6
-rw-r--r--tools/source/stream/strmunx.cxx5
-rw-r--r--tools/source/stream/strmwnt.cxx5
-rw-r--r--unotools/source/streaming/streamwrap.cxx4
-rw-r--r--unotools/source/ucbhelper/tempfile.cxx3
-rw-r--r--vcl/source/filter/graphicfilter.cxx2
-rw-r--r--vcl/source/gdi/impgraph.cxx2
22 files changed, 27 insertions, 44 deletions
diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx
index c5da1d6b2477..0f8f72328a0b 100644
--- a/connectivity/source/drivers/dbase/DTable.cxx
+++ b/connectivity/source/drivers/dbase/DTable.cxx
@@ -1004,9 +1004,6 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
void ODbaseTable::FileClose()
{
::osl::MutexGuard aGuard(m_aMutex);
- // if not everything has been written yet
- if (m_pMemoStream && m_pMemoStream->IsWritable())
- m_pMemoStream->Flush();
m_pMemoStream.reset();
@@ -1415,7 +1412,6 @@ bool ODbaseTable::CreateMemoFile(const INetURLObject& aFile)
m_pMemoStream->Seek(0);
(*m_pMemoStream).WriteUInt32( 1 ); // pointer to the first free block
- m_pMemoStream->Flush();
m_pMemoStream.reset();
return true;
}
diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx
index 50475449ef73..af2d6de226f8 100644
--- a/connectivity/source/drivers/file/FTable.cxx
+++ b/connectivity/source/drivers/file/FTable.cxx
@@ -136,9 +136,6 @@ void OFileTable::FileClose()
{
::osl::MutexGuard aGuard(m_aMutex);
- if (m_pFileStream && m_pFileStream->IsWritable())
- m_pFileStream->Flush();
-
m_pFileStream.reset();
m_pBuffer.reset();
}
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx
index e160f3896f37..8c2d054e72ee 100644
--- a/editeng/source/editeng/impedit4.cxx
+++ b/editeng/source/editeng/impedit4.cxx
@@ -641,7 +641,6 @@ ErrCode ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel )
}
// RTF-trailer ...
rOutput.WriteCharPtr( "}}" ); // 1xparentheses paragraphs, 1xparentheses RTF document
- rOutput.Flush();
aFontTable.clear();
diff --git a/forms/source/component/DatabaseForm.cxx b/forms/source/component/DatabaseForm.cxx
index 74fbaf77e6be..873781f580ce 100644
--- a/forms/source/component/DatabaseForm.cxx
+++ b/forms/source/component/DatabaseForm.cxx
@@ -496,7 +496,7 @@ Sequence<sal_Int8> ODatabaseForm::GetDataMultiPartEncoded(const Reference<XContr
}
pBuf.reset();
- aMemStream.Flush();
+ aMemStream.FlushBuffer();
aMemStream.Seek( 0 );
void const * pData = aMemStream.GetData();
sal_Int32 nLen = aMemStream.TellEnd();
@@ -940,7 +940,7 @@ void ODatabaseForm::InsertTextPart( INetMIMEMessage& rParent, std::u16string_vie
// Body
SvMemoryStream* pStream = new SvMemoryStream;
pStream->WriteLine( OUStringToOString(rData, rtl_getTextEncodingFromMimeCharset(pBestMatchingEncoding)) );
- pStream->Flush();
+ pStream->FlushBuffer();
pStream->Seek( 0 );
pChild->SetDocumentLB( new SvLockBytes(pStream, true) );
rParent.AttachChild( std::move(pChild) );
diff --git a/include/tools/stream.hxx b/include/tools/stream.hxx
index 306a7584a8c3..9c9591a86355 100644
--- a/include/tools/stream.hxx
+++ b/include/tools/stream.hxx
@@ -186,7 +186,6 @@ protected:
virtual void FlushData();
virtual void SetSize(sal_uInt64 nSize);
- void FlushBuffer();
SAL_DLLPRIVATE void ClearError();
SAL_DLLPRIVATE void ClearBuffer();
@@ -273,6 +272,9 @@ public:
virtual sal_uInt64 TellEnd();
// length between current (Tell()) pos and end of stream
sal_uInt64 remainingSize();
+ /// If we have data in our internal buffers, write them out
+ void FlushBuffer();
+ /// Call FlushBuffer() and then call flush on the underlying OS stream
void Flush();
// next Tell() <= nSize
bool SetStreamSize( sal_uInt64 nSize );
@@ -590,7 +592,6 @@ private:
sal_uInt16 nLockCounter;
#endif
bool bIsOpen;
- bool mbDontFlushOnClose; ///< used to avoid flushing when closing temporary files
SvFileStream (const SvFileStream&) = delete;
SvFileStream & operator= (const SvFileStream&) = delete;
@@ -617,7 +618,6 @@ public:
bool IsOpen() const { return bIsOpen; }
const OUString& GetFileName() const { return aFilename; }
- void SetDontFlushOnClose(bool b) { mbDontFlushOnClose = b; }
};
// MemoryStream
@@ -666,7 +666,7 @@ public:
sal_uInt64 GetSize() { return TellEnd(); }
std::size_t GetEndOfData() const { return nEndOfData; }
- const void* GetData() { Flush(); return pBuf; }
+ const void* GetData() { FlushBuffer(); return pBuf; }
// return the buffer currently in use, and allocate a new buffer internally
void* SwitchBuffer();
diff --git a/lotuswordpro/source/filter/explode.cxx b/lotuswordpro/source/filter/explode.cxx
index 4b4ffa25c6cf..a001254d0be4 100644
--- a/lotuswordpro/source/filter/explode.cxx
+++ b/lotuswordpro/source/filter/explode.cxx
@@ -307,7 +307,7 @@ sal_Int32 Decompression::explode()
if (distance > nOutputPos)
return -3; // format error
- m_pOutStream->Flush();
+ m_pOutStream->FlushBuffer();
// point back to copy position and read bytes
m_pOutStream->SeekRel(-static_cast<tools::Long>(distance));
sal_uInt8 sTemp[MAXWIN];
diff --git a/sc/source/core/tool/autoform.cxx b/sc/source/core/tool/autoform.cxx
index 07f8b5134569..55676816bc15 100644
--- a/sc/source/core/tool/autoform.cxx
+++ b/sc/source/core/tool/autoform.cxx
@@ -923,7 +923,7 @@ bool ScAutoFormat::Save()
}
}
- rStream.Flush();
+ rStream.FlushBuffer();
aMedium.Commit();
}
diff --git a/sc/source/filter/excel/xechart.cxx b/sc/source/filter/excel/xechart.cxx
index 089f578b3e10..78fe80cadc6f 100644
--- a/sc/source/filter/excel/xechart.cxx
+++ b/sc/source/filter/excel/xechart.cxx
@@ -714,7 +714,7 @@ void XclExpChEscherFormat::WriteBody( XclExpStream& rStrm )
// write Escher property container via temporary memory stream
SvMemoryStream aMemStrm;
maData.mxEscherSet->Commit( aMemStrm );
- aMemStrm.Flush();
+ aMemStrm.FlushBuffer();
aMemStrm.Seek( STREAM_SEEK_TO_BEGIN );
rStrm.CopyFromStream( aMemStrm );
}
diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx
index 17395145bbab..f8337b327930 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -104,7 +104,7 @@ XclExpStream::XclExpStream( SvStream& rOutStrm, const XclExpRoot& rRoot, sal_uIn
XclExpStream::~XclExpStream()
{
- mrStrm.Flush();
+ mrStrm.FlushBuffer();
}
void XclExpStream::StartRecord( sal_uInt16 nRecId, std::size_t nRecSize )
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 588e349a2e5b..cfa203a85b44 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -829,9 +829,9 @@ bool SfxMedium::Commit()
if( pImpl->xStorage.is() )
StorageCommit_Impl();
else if( pImpl->m_pOutStream )
- pImpl->m_pOutStream->Flush();
+ pImpl->m_pOutStream->FlushBuffer();
else if( pImpl->m_pInStream )
- pImpl->m_pInStream->Flush();
+ pImpl->m_pInStream->FlushBuffer();
if ( GetError() == ERRCODE_NONE )
{
diff --git a/sfx2/source/doc/graphhelp.cxx b/sfx2/source/doc/graphhelp.cxx
index 04b55df9c18c..dffb1bce163a 100644
--- a/sfx2/source/doc/graphhelp.cxx
+++ b/sfx2/source/doc/graphhelp.cxx
@@ -188,7 +188,7 @@ bool GraphicHelper::getThumbnailFormatFromBitmap_Impl(const BitmapEx& rBitmap, c
if (rFilter.compressAsPNG(bitmap, *pStream) != ERRCODE_NONE)
return false;
- pStream->Flush();
+ pStream->FlushBuffer();
return !pStream->GetError();
}
diff --git a/sot/source/sdstor/storage.cxx b/sot/source/sdstor/storage.cxx
index cef5b3d7a02d..0381aa477a9e 100644
--- a/sot/source/sdstor/storage.cxx
+++ b/sot/source/sdstor/storage.cxx
@@ -69,12 +69,12 @@ SotTempStream::SotTempStream( const OUString & rName, StreamMode nMode )
SotTempStream::~SotTempStream()
{
- Flush();
+ FlushBuffer();
}
void SotTempStream::CopyTo( SotTempStream * pDestStm )
{
- Flush(); // write all data
+ FlushBuffer(); // write all data
sal_uInt64 nPos = Tell(); // save position
Seek( 0 );
diff --git a/svtools/qa/unit/testHtmlWriter.cxx b/svtools/qa/unit/testHtmlWriter.cxx
index 7016b77257bb..d4c8e24e4390 100644
--- a/svtools/qa/unit/testHtmlWriter.cxx
+++ b/svtools/qa/unit/testHtmlWriter.cxx
@@ -20,7 +20,7 @@ namespace
OString extractFromStream(SvMemoryStream& rStream)
{
rStream.WriteChar('\0');
- rStream.Flush();
+ rStream.FlushBuffer();
rStream.Seek(STREAM_SEEK_TO_BEGIN);
return static_cast<const char*>(rStream.GetData());
}
diff --git a/sw/source/core/doc/tblafmt.cxx b/sw/source/core/doc/tblafmt.cxx
index 6385794aa620..c92cadd49f50 100644
--- a/sw/source/core/doc/tblafmt.cxx
+++ b/sw/source/core/doc/tblafmt.cxx
@@ -1150,7 +1150,7 @@ bool SwTableAutoFormatTable::Save( SvStream& rStream ) const
bRet = rFormat.Save(rStream, AUTOFORMAT_FILE_VERSION);
}
}
- rStream.Flush();
+ rStream.FlushBuffer();
return bRet;
}
diff --git a/sw/source/uibase/config/uinums.cxx b/sw/source/uibase/config/uinums.cxx
index 70d01d01d746..71e68f558e57 100644
--- a/sw/source/uibase/config/uinums.cxx
+++ b/sw/source/uibase/config/uinums.cxx
@@ -61,7 +61,7 @@ void SwChapterNumRules::Save()
{
sw::ExportStoredChapterNumberingRules(*this, *pStream,CHAPTER_FILENAME);
- pStream->Flush();
+ pStream->FlushBuffer();
aMedium.Commit();
}
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx
index 016c8b67e891..a40e13d70b82 100644
--- a/tools/source/stream/stream.cxx
+++ b/tools/source/stream/stream.cxx
@@ -378,7 +378,7 @@ void SvStream::SetBufferSize( sal_uInt16 nBufferSize )
bool bDontSeek = (m_pRWBuf == nullptr);
if (m_isDirty && m_isWritable) // due to Windows NT: Access denied
- Flush();
+ FlushBuffer();
if (m_nBufSize)
{
@@ -1546,7 +1546,7 @@ SvMemoryStream::~SvMemoryStream()
if( bOwnsData )
FreeMemory();
else
- Flush();
+ FlushBuffer();
}
}
@@ -1754,7 +1754,7 @@ void SvMemoryStream::FreeMemory()
void* SvMemoryStream::SwitchBuffer()
{
- Flush();
+ FlushBuffer();
if( !bOwnsData )
return nullptr;
Seek( STREAM_SEEK_TO_BEGIN );
diff --git a/tools/source/stream/strmunx.cxx b/tools/source/stream/strmunx.cxx
index 9beade27e92e..d01866476f51 100644
--- a/tools/source/stream/strmunx.cxx
+++ b/tools/source/stream/strmunx.cxx
@@ -198,7 +198,6 @@ SvFileStream::SvFileStream( const OUString& rFileName, StreamMode nOpenMode )
{
bIsOpen = false;
m_isWritable = false;
- mbDontFlushOnClose = false;
pInstanceData.reset(new StreamData);
SetBufferSize( 1024 );
@@ -216,7 +215,6 @@ SvFileStream::SvFileStream()
{
bIsOpen = false;
m_isWritable = false;
- mbDontFlushOnClose = false;
pInstanceData.reset(new StreamData);
SetBufferSize( 1024 );
}
@@ -460,8 +458,7 @@ void SvFileStream::Close()
if ( IsOpen() )
{
SAL_INFO("tools", "Closing " << aFilename);
- if ( !mbDontFlushOnClose )
- Flush();
+ FlushBuffer();
osl_closeFile( pInstanceData->rHandle );
pInstanceData->rHandle = nullptr;
}
diff --git a/tools/source/stream/strmwnt.cxx b/tools/source/stream/strmwnt.cxx
index c91628b55091..4ea9c7eb1d42 100644
--- a/tools/source/stream/strmwnt.cxx
+++ b/tools/source/stream/strmwnt.cxx
@@ -107,7 +107,6 @@ SvFileStream::SvFileStream( const OUString& rFileName, StreamMode nMode )
bIsOpen = false;
nLockCounter = 0;
m_isWritable = false;
- mbDontFlushOnClose = false;
pInstanceData.reset( new StreamData );
SetBufferSize( 8192 );
@@ -124,7 +123,6 @@ SvFileStream::SvFileStream()
bIsOpen = false;
nLockCounter = 0;
m_isWritable = false;
- mbDontFlushOnClose = false;
pInstanceData.reset( new StreamData );
SetBufferSize( 8192 );
@@ -379,8 +377,7 @@ void SvFileStream::Close()
nLockCounter = 1;
UnlockFile();
}
- if ( !mbDontFlushOnClose )
- Flush();
+ FlushBuffer();
CloseHandle( pInstanceData->hFile );
}
bIsOpen = false;
diff --git a/unotools/source/streaming/streamwrap.cxx b/unotools/source/streaming/streamwrap.cxx
index 9a9b53d1f1ec..ccd9b5033d2a 100644
--- a/unotools/source/streaming/streamwrap.cxx
+++ b/unotools/source/streaming/streamwrap.cxx
@@ -208,7 +208,7 @@ void SAL_CALL OOutputStreamWrapper::writeBytes(const css::uno::Sequence< sal_Int
void SAL_CALL OOutputStreamWrapper::flush()
{
- rStream.Flush();
+ rStream.FlushBuffer();
checkError();
}
@@ -298,7 +298,7 @@ void SAL_CALL OStreamWrapper::writeBytes(const css::uno::Sequence< sal_Int8 >& a
void SAL_CALL OStreamWrapper::flush()
{
- m_pSvStream->Flush();
+ m_pSvStream->FlushBuffer();
if (m_pSvStream->GetError() != ERRCODE_NONE)
throw css::io::NotConnectedException(OUString(),static_cast<css::uno::XWeak*>(this));
}
diff --git a/unotools/source/ucbhelper/tempfile.cxx b/unotools/source/ucbhelper/tempfile.cxx
index 02770fda8744..07889ffdab83 100644
--- a/unotools/source/ucbhelper/tempfile.cxx
+++ b/unotools/source/ucbhelper/tempfile.cxx
@@ -388,9 +388,6 @@ TempFile::~TempFile()
if ( !bKillingFileEnabled )
return;
- // if we're going to delete this file, no point in flushing it when closing
- if (pStream && !aName.isEmpty())
- static_cast<SvFileStream*>(pStream.get())->SetDontFlushOnClose(true);
pStream.reset();
if ( bIsDirectory )
{
diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx
index e9fb9d73bafb..ae04ede2dacf 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -107,7 +107,7 @@ class ImpFilterOutputStream : public ::cppu::WeakImplHelper< css::io::XOutputStr
virtual void SAL_CALL writeBytes( const css::uno::Sequence< sal_Int8 >& rData ) override
{ mrStm.WriteBytes(rData.getConstArray(), rData.getLength()); }
virtual void SAL_CALL flush() override
- { mrStm.Flush(); }
+ { mrStm.FlushBuffer(); }
virtual void SAL_CALL closeOutput() override {}
public:
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index b00eb31599fd..7fd24f419a95 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -1347,7 +1347,7 @@ bool ImpGraphic::swapOut()
if (!xOutputStream->GetError() && swapOutContent(*xOutputStream))
{
- xOutputStream->Flush();
+ xOutputStream->FlushBuffer();
bResult = !xOutputStream->GetError();
}
}