Kaydet (Commit) 35aff906 authored tarafından Michael Meeks's avatar Michael Meeks

lok: emit ProfileZone data in messages when requested.

Change-Id: I42a773e2d5b8e4deeafa8eeb2785913db36a47d7
Reviewed-on: https://gerrit.libreoffice.org/70688
Tested-by: Jenkins
Reviewed-by: 's avatarMichael Meeks <michael.meeks@collabora.com>
üst c6f5ee19
......@@ -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)
......
......@@ -610,6 +610,12 @@ typedef enum
* On-load notification of the document signature status.
*/
LOK_CALLBACK_SIGNATURE_STATUS = 40,
/**
* Profiling tracing information single string of multiple lines
* containing <pid> <timestamp> and zone start/stop information
*/
LOK_CALLBACK_PROFILE_FRAME = 41
}
LibreOfficeKitCallbackType;
......
......@@ -448,6 +448,8 @@ callbackTypeToString (int nType)
return "LOK_CALLBACK_CONTEXT_CHANGED";
case LOK_CALLBACK_SIGNATURE_STATUS:
return "LOK_CALLBACK_SIGNATURE_STATUS";
case LOK_CALLBACK_PROFILE_FRAME:
return "LOK_CALLBACK_PROFILE_FRAME";
}
g_assert(false);
return nullptr;
......
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