Kaydet (Commit) b27755b7 authored tarafından Noel Grandin's avatar Noel Grandin

tdf#125254 Performance: A spreadsheet opens too slow, part1

This takes the opening time from 55s to 48s for me.

Change-Id: Ia60fff33e9948e0bd6906c82b48aa30f8b2551bb
Reviewed-on: https://gerrit.libreoffice.org/72394
Tested-by: Jenkins
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 4b04eae8
...@@ -113,6 +113,11 @@ public: ...@@ -113,6 +113,11 @@ public:
m_vector.clear(); m_vector.clear();
} }
void swap(sorted_vector & other)
{
m_vector.swap(other.m_vector);
}
void reserve(size_type amount) void reserve(size_type amount)
{ {
m_vector.reserve(amount); m_vector.reserve(amount);
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#include <svl/svldllapi.h> #include <svl/svldllapi.h>
#include <unordered_set> #include <o3tl/sorted_vector.hxx>
class SvtBroadcaster; class SvtBroadcaster;
class SfxHint; class SfxHint;
...@@ -29,7 +29,7 @@ class SfxHint; ...@@ -29,7 +29,7 @@ class SfxHint;
class SVL_DLLPUBLIC SvtListener class SVL_DLLPUBLIC SvtListener
{ {
friend class SvtBroadcaster; friend class SvtBroadcaster;
typedef std::unordered_set<SvtBroadcaster*> BroadcastersType; typedef o3tl::sorted_vector<SvtBroadcaster*> BroadcastersType;
BroadcastersType maBroadcasters; BroadcastersType maBroadcasters;
const SvtListener& operator=(const SvtListener &) = delete; const SvtListener& operator=(const SvtListener &) = delete;
......
...@@ -43,7 +43,7 @@ SvtListener::~SvtListener() COVERITY_NOEXCEPT_FALSE ...@@ -43,7 +43,7 @@ SvtListener::~SvtListener() COVERITY_NOEXCEPT_FALSE
bool SvtListener::StartListening( SvtBroadcaster& rBroadcaster ) bool SvtListener::StartListening( SvtBroadcaster& rBroadcaster )
{ {
std::pair<BroadcastersType::iterator, bool> r = std::pair<BroadcastersType::const_iterator, bool> r =
maBroadcasters.insert(&rBroadcaster); maBroadcasters.insert(&rBroadcaster);
if (r.second) if (r.second)
{ {
...@@ -55,7 +55,7 @@ bool SvtListener::StartListening( SvtBroadcaster& rBroadcaster ) ...@@ -55,7 +55,7 @@ bool SvtListener::StartListening( SvtBroadcaster& rBroadcaster )
bool SvtListener::EndListening( SvtBroadcaster& rBroadcaster ) bool SvtListener::EndListening( SvtBroadcaster& rBroadcaster )
{ {
BroadcastersType::iterator it = maBroadcasters.find(&rBroadcaster); BroadcastersType::const_iterator it = maBroadcasters.find(&rBroadcaster);
if (it == maBroadcasters.end()) if (it == maBroadcasters.end())
// Not listening to this broadcaster. // Not listening to this broadcaster.
return false; return false;
...@@ -69,7 +69,7 @@ bool SvtListener::EndListening( SvtBroadcaster& rBroadcaster ) ...@@ -69,7 +69,7 @@ bool SvtListener::EndListening( SvtBroadcaster& rBroadcaster )
// back into the broadcaster again // back into the broadcaster again
void SvtListener::BroadcasterDying( SvtBroadcaster& rBroadcaster ) void SvtListener::BroadcasterDying( SvtBroadcaster& rBroadcaster )
{ {
BroadcastersType::iterator it = maBroadcasters.find(&rBroadcaster); BroadcastersType::const_iterator it = maBroadcasters.find(&rBroadcaster);
if (it != maBroadcasters.end()) if (it != maBroadcasters.end())
maBroadcasters.erase(it); maBroadcasters.erase(it);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment