summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshod Nakashian <ashod.nakashian@collabora.co.uk>2019-02-15 09:39:57 -0500
committerAshod Nakashian <ashnakash@gmail.com>2019-02-22 15:42:43 +0100
commit166b5d8146159bf54a4e3f67c578e60a9ddac2d1 (patch)
tree64b49c4e5df5b5ee009a34005b880bb870b033e0
parent5f978a3b8d2cdab29aef4544dfb66ad755dfdc3f (diff)
LOK: reuse cached json object for ViewId where available
Change-Id: I5e29ec2863e06d3dfcbad95c55e355805f12e259 Reviewed-on: https://gerrit.libreoffice.org/67895 Tested-by: Jenkins Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
-rw-r--r--desktop/inc/lib/init.hxx3
-rw-r--r--desktop/source/lib/init.cxx17
2 files changed, 15 insertions, 5 deletions
diff --git a/desktop/inc/lib/init.hxx b/desktop/inc/lib/init.hxx
index 2ba5595d8b46..013162aa990f 100644
--- a/desktop/inc/lib/init.hxx
+++ b/desktop/inc/lib/init.hxx
@@ -116,6 +116,9 @@ namespace desktop {
/// Validate that the payload and parsed object match.
bool validate() const;
+ /// Returns true iff there is cached data.
+ bool isCached() const { return PayloadObject.which() != 0; }
+
int Type;
std::string PayloadString;
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index bf36321fc9a0..0b405be858e0 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -575,6 +575,13 @@ int lcl_getViewId(const std::string& payload)
return 0;
}
+int lcl_getViewId(const desktop::CallbackFlushHandler::CallbackData& rCallbackData)
+{
+ if (rCallbackData.isCached())
+ return rCallbackData.getJson().get<int>("viewId");
+ return lcl_getViewId(rCallbackData.PayloadString);
+}
+
std::string extractCertificate(const std::string & certificate)
{
const std::string header("-----BEGIN CERTIFICATE-----");
@@ -1076,7 +1083,7 @@ void CallbackFlushHandler::queue(const int type, const char* data)
const int nViewId = lcl_getViewId(payload);
removeAll(
[type, nViewId] (const queue_type::value_type& elem) {
- return (elem.Type == type && nViewId == lcl_getViewId(elem.PayloadString));
+ return (elem.Type == type && nViewId == lcl_getViewId(elem));
}
);
}
@@ -1373,11 +1380,11 @@ void CallbackFlushHandler::Invoke()
std::unique_lock<std::mutex> lock(m_mutex);
SAL_INFO("lok", "Flushing " << m_queue.size() << " elements.");
- for (auto& pair : m_queue)
+ for (const auto& rCallbackData : m_queue)
{
- const int type = pair.Type;
- const auto& payload = pair.PayloadString;
- const int viewId = lcl_isViewCallbackType(type) ? lcl_getViewId(payload) : -1;
+ const int type = rCallbackData.Type;
+ const auto& payload = rCallbackData.PayloadString;
+ const int viewId = lcl_isViewCallbackType(type) ? lcl_getViewId(rCallbackData) : -1;
if (viewId == -1)
{