summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2019-04-12 21:16:38 +0100
committerMichael Meeks <michael.meeks@collabora.com>2019-04-15 11:36:28 +0200
commit35aff9067796ee7b108ffee88126f837b573d3c1 (patch)
tree96d4634934d6aa9cb8e98c0626863f862f11409e /desktop
parentc6f5ee192887224de5dabfa86f2103822922bf89 (diff)
lok: emit ProfileZone data in messages when requested.
Change-Id: I42a773e2d5b8e4deeafa8eeb2785913db36a47d7 Reviewed-on: https://gerrit.libreoffice.org/70688 Tested-by: Jenkins Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'desktop')
-rw-r--r--desktop/source/lib/init.cxx36
1 files changed, 36 insertions, 0 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 279232e07c99..e6feceb595b2 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -50,6 +50,7 @@
#include <comphelper/lok.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/string.hxx>
+#include <comphelper/profilezone.hxx>
#include <comphelper/propertysequence.hxx>
#include <comphelper/scopeguard.hxx>
#include <comphelper/threadpool.hxx>
@@ -4495,6 +4496,31 @@ static void preloadData()
rtl::Bootstrap::set("UserInstallation", sUserPath);
}
+class ProfileZoneDumper : public AutoTimer
+{
+ static const int dumpTimeoutMS = 5000;
+public:
+ ProfileZoneDumper() : AutoTimer( "zone dumper" )
+ {
+ SetTimeout(dumpTimeoutMS);
+ Start();
+ }
+ virtual void Invoke() override
+ {
+ css::uno::Sequence<OUString> aEvents =
+ comphelper::ProfileRecording::getRecordingAndClear();
+ OStringBuffer aOutput;
+ for (auto &s : aEvents)
+ {
+ aOutput.append(OUStringToOString(s, RTL_TEXTENCODING_UTF8));
+ aOutput.append("\n");
+ }
+ OString aChunk = aOutput.makeStringAndClear();
+ if (gImpl && gImpl->mpCallback)
+ gImpl->mpCallback(LOK_CALLBACK_PROFILE_FRAME, aChunk.getStr(), gImpl->mpCallbackData);
+ }
+};
+
static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char* pUserProfileUrl)
{
enum {
@@ -4505,6 +4531,7 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
// Did we do a pre-initialize
static bool bPreInited = false;
+ static bool bProfileZones = getenv("SAL_PROFILEZONE_STDOUT") != nullptr;
// What stage are we at ?
if (pThis == nullptr)
@@ -4519,6 +4546,15 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
if (bInitialized)
return 1;
+ // Turn profile zones on early
+ if (bProfileZones && eStage == SECOND_INIT)
+ {
+ comphelper::ProfileRecording::startRecording(true);
+ new ProfileZoneDumper();
+ }
+
+ comphelper::ProfileZone aZone("lok-init");
+
if (eStage == PRE_INIT)
rtl_alloc_preInit(true);
else if (eStage == SECOND_INIT)