74f4a1796f
Moves the profile zone global nesting variable into the source from header and makes it threadlocal Change-Id: I97751f5c532d8e0e36adb7d9d383bd88f752953f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119662 Tested-by: Jenkins Reviewed-by: Tor Lillqvist <tml@collabora.com>
92 lines
2.3 KiB
C++
92 lines
2.3 KiB
C++
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#ifndef INCLUDED_COMPHELPER_PROFILEZONE_HXX
|
|
#define INCLUDED_COMPHELPER_PROFILEZONE_HXX
|
|
|
|
#include <sal/config.h>
|
|
|
|
#include <sal/log.hxx>
|
|
|
|
#include <comphelper/traceevent.hxx>
|
|
|
|
// implementation of XToolkitExperimental profiling API
|
|
|
|
namespace comphelper
|
|
{
|
|
class COMPHELPER_DLLPUBLIC ProfileZone : public NamedEvent
|
|
{
|
|
long long m_nCreateTime;
|
|
int m_nNesting;
|
|
|
|
void addRecording();
|
|
|
|
static void setNestingLevel(int nNestingLevel);
|
|
static int getNestingLevel();
|
|
|
|
ProfileZone(const char* sName, const OUString& sArgs)
|
|
: NamedEvent(sName, sArgs)
|
|
, m_nNesting(-1)
|
|
{
|
|
if (s_bRecording)
|
|
{
|
|
m_nCreateTime = getNow();
|
|
|
|
m_nNesting = getNestingLevel();
|
|
setNestingLevel(getNestingLevel() + 1);
|
|
}
|
|
else
|
|
m_nCreateTime = 0;
|
|
}
|
|
|
|
public:
|
|
/**
|
|
* Starts measuring the cost of a C++ scope.
|
|
*
|
|
* Note that the char pointer is stored as such in the ProfileZone object and used in the
|
|
* destructor, so be sure to pass a pointer that stays valid for the duration of the object's
|
|
* lifetime.
|
|
*/
|
|
ProfileZone(const char* sName, const std::map<OUString, OUString>& aArgs)
|
|
: ProfileZone(sName, createArgsString(aArgs))
|
|
{
|
|
}
|
|
|
|
ProfileZone(const char* sName)
|
|
: ProfileZone(sName, OUString())
|
|
{
|
|
}
|
|
|
|
~ProfileZone()
|
|
{
|
|
if (m_nCreateTime > 0)
|
|
{
|
|
setNestingLevel(getNestingLevel() - 1);
|
|
|
|
if (m_nNesting != getNestingLevel())
|
|
{
|
|
SAL_WARN("comphelper.traceevent", "Incorrect ProfileZone nesting for " << m_sName);
|
|
}
|
|
else
|
|
{
|
|
if (s_bRecording)
|
|
addRecording();
|
|
}
|
|
}
|
|
}
|
|
|
|
ProfileZone(const ProfileZone&) = delete;
|
|
void operator=(const ProfileZone&) = delete;
|
|
};
|
|
|
|
} // namespace comphelper
|
|
|
|
#endif // INCLUDED_COMPHELPER_PROFILEZONE_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|