forked from qt-creator/qt-creator
QmlDesigner: More tracers
Task-number: QDS-11952 Change-Id: I9dc7325b73f85ed2e401689d255acd0ef68b094c Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
This commit is contained in:
@@ -749,6 +749,12 @@ public:
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename... Arguments>
|
||||||
|
[[nodiscard]] AsynchronousToken begin(const FlowTokenType &, ArgumentType, Arguments &&...)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
template<typename... Arguments>
|
template<typename... Arguments>
|
||||||
[[nodiscard]] std::pair<AsynchronousToken, FlowTokenType> beginWithFlow(ArgumentType,
|
[[nodiscard]] std::pair<AsynchronousToken, FlowTokenType> beginWithFlow(ArgumentType,
|
||||||
Arguments &&...)
|
Arguments &&...)
|
||||||
@@ -844,6 +850,22 @@ public:
|
|||||||
return AsynchronousToken{std::move(name), m_id, m_category};
|
return AsynchronousToken{std::move(name), m_id, m_category};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename... Arguments>
|
||||||
|
[[nodiscard]] AsynchronousToken begin(const FlowTokenType &flowToken,
|
||||||
|
ArgumentType name,
|
||||||
|
Arguments &&...arguments)
|
||||||
|
{
|
||||||
|
if (m_id)
|
||||||
|
m_category().begin('b',
|
||||||
|
m_id,
|
||||||
|
name,
|
||||||
|
flowToken.bindId(),
|
||||||
|
IsFlow::In,
|
||||||
|
std::forward<Arguments>(arguments)...);
|
||||||
|
|
||||||
|
return AsynchronousToken{std::move(name), m_id, m_category};
|
||||||
|
}
|
||||||
|
|
||||||
template<typename... Arguments>
|
template<typename... Arguments>
|
||||||
[[nodiscard]] std::pair<AsynchronousToken, FlowTokenType> beginWithFlow(ArgumentType name,
|
[[nodiscard]] std::pair<AsynchronousToken, FlowTokenType> beginWithFlow(ArgumentType name,
|
||||||
Arguments &&...arguments)
|
Arguments &&...arguments)
|
||||||
|
@@ -25,6 +25,9 @@
|
|||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
|
using namespace NanotraceHR::Literals;
|
||||||
|
using NanotraceHR::keyValue;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QmlDesigner::AbstractView
|
\class QmlDesigner::AbstractView
|
||||||
\ingroup CoreModel
|
\ingroup CoreModel
|
||||||
|
@@ -64,6 +64,8 @@ const QList<InternalNode::Pointer> &InternalNodeListProperty::nodeList() const
|
|||||||
|
|
||||||
void InternalNodeListProperty::slide(int from, int to)
|
void InternalNodeListProperty::slide(int from, int to)
|
||||||
{
|
{
|
||||||
|
traceToken.tick("slide"_t, keyValue("from", from), keyValue("to", to));
|
||||||
|
|
||||||
InternalNode::Pointer internalNode = m_nodeList.takeAt(from);
|
InternalNode::Pointer internalNode = m_nodeList.takeAt(from);
|
||||||
m_nodeList.insert(to, internalNode);
|
m_nodeList.insert(to, internalNode);
|
||||||
}
|
}
|
||||||
|
@@ -64,6 +64,9 @@ Components that want to be informed about changes in the model can register a su
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
|
using NanotraceHR::keyValue;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
ModelPrivate::ModelPrivate(Model *model,
|
ModelPrivate::ModelPrivate(Model *model,
|
||||||
@@ -143,6 +146,8 @@ ModelPrivate::~ModelPrivate()
|
|||||||
|
|
||||||
void ModelPrivate::detachAllViews()
|
void ModelPrivate::detachAllViews()
|
||||||
{
|
{
|
||||||
|
auto tracer = traceToken.begin("detach all views"_t);
|
||||||
|
|
||||||
for (const QPointer<AbstractView> &view : std::as_const(m_viewList))
|
for (const QPointer<AbstractView> &view : std::as_const(m_viewList))
|
||||||
detachView(view.data(), true);
|
detachView(view.data(), true);
|
||||||
|
|
||||||
@@ -176,6 +181,8 @@ Storage::Imports createStorageImports(const Imports &imports,
|
|||||||
|
|
||||||
void ModelPrivate::changeImports(Imports toBeAddedImports, Imports toBeRemovedImports)
|
void ModelPrivate::changeImports(Imports toBeAddedImports, Imports toBeRemovedImports)
|
||||||
{
|
{
|
||||||
|
auto tracer = traceToken.begin("change imports"_t);
|
||||||
|
|
||||||
std::sort(toBeAddedImports.begin(), toBeAddedImports.end());
|
std::sort(toBeAddedImports.begin(), toBeAddedImports.end());
|
||||||
std::sort(toBeRemovedImports.begin(), toBeRemovedImports.end());
|
std::sort(toBeRemovedImports.begin(), toBeRemovedImports.end());
|
||||||
|
|
||||||
@@ -251,6 +258,8 @@ void ModelPrivate::setDocumentMessages(const QList<DocumentMessage> &errors,
|
|||||||
|
|
||||||
void ModelPrivate::setFileUrl(const QUrl &fileUrl)
|
void ModelPrivate::setFileUrl(const QUrl &fileUrl)
|
||||||
{
|
{
|
||||||
|
auto tracer = traceToken.begin("file url"_t);
|
||||||
|
|
||||||
QUrl oldPath = m_fileUrl;
|
QUrl oldPath = m_fileUrl;
|
||||||
|
|
||||||
if (oldPath != fileUrl) {
|
if (oldPath != fileUrl) {
|
||||||
@@ -299,7 +308,7 @@ InternalNodePointer ModelPrivate::createNode(const TypeName &typeName,
|
|||||||
majorVersion,
|
majorVersion,
|
||||||
minorVersion,
|
minorVersion,
|
||||||
internalId,
|
internalId,
|
||||||
m_traceToken.tickWithFlow("create node"_t));
|
traceToken.tickWithFlow("create node"_t));
|
||||||
|
|
||||||
setTypeId(newNode.get(), typeName);
|
setTypeId(newNode.get(), typeName);
|
||||||
|
|
||||||
@@ -1095,6 +1104,8 @@ void ModelPrivate::notifyNodeOrderChanged(const InternalNodeListProperty *intern
|
|||||||
|
|
||||||
void ModelPrivate::setSelectedNodes(const QList<InternalNodePointer> &selectedNodeList)
|
void ModelPrivate::setSelectedNodes(const QList<InternalNodePointer> &selectedNodeList)
|
||||||
{
|
{
|
||||||
|
auto tracer = traceToken.begin("selected model nodes"_t);
|
||||||
|
|
||||||
auto sortedSelectedList = Utils::filtered(selectedNodeList, [](const auto &node) {
|
auto sortedSelectedList = Utils::filtered(selectedNodeList, [](const auto &node) {
|
||||||
return node && node->isValid;
|
return node && node->isValid;
|
||||||
});
|
});
|
||||||
@@ -1106,6 +1117,11 @@ void ModelPrivate::setSelectedNodes(const QList<InternalNodePointer> &selectedNo
|
|||||||
if (sortedSelectedList == m_selectedInternalNodeList)
|
if (sortedSelectedList == m_selectedInternalNodeList)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
for (auto &node : sortedSelectedList) {
|
||||||
|
auto flowToken = node->traceToken.tickWithFlow("select model nodes"_t);
|
||||||
|
traceToken.tick(flowToken, "select model node"_t);
|
||||||
|
}
|
||||||
|
|
||||||
const QList<InternalNodePointer> lastSelectedNodeList = m_selectedInternalNodeList;
|
const QList<InternalNodePointer> lastSelectedNodeList = m_selectedInternalNodeList;
|
||||||
m_selectedInternalNodeList = sortedSelectedList;
|
m_selectedInternalNodeList = sortedSelectedList;
|
||||||
|
|
||||||
@@ -1114,6 +1130,8 @@ void ModelPrivate::setSelectedNodes(const QList<InternalNodePointer> &selectedNo
|
|||||||
|
|
||||||
void ModelPrivate::clearSelectedNodes()
|
void ModelPrivate::clearSelectedNodes()
|
||||||
{
|
{
|
||||||
|
auto tracer = traceToken.begin("clear selected model nodes"_t);
|
||||||
|
|
||||||
const QList<InternalNodePointer> lastSelectedNodeList = m_selectedInternalNodeList;
|
const QList<InternalNodePointer> lastSelectedNodeList = m_selectedInternalNodeList;
|
||||||
m_selectedInternalNodeList.clear();
|
m_selectedInternalNodeList.clear();
|
||||||
changeSelectedNodes(m_selectedInternalNodeList, lastSelectedNodeList);
|
changeSelectedNodes(m_selectedInternalNodeList, lastSelectedNodeList);
|
||||||
@@ -1490,6 +1508,8 @@ void ModelPrivate::changeRootNodeType(const TypeName &type, int majorVersion, in
|
|||||||
{
|
{
|
||||||
Q_ASSERT(rootNode());
|
Q_ASSERT(rootNode());
|
||||||
|
|
||||||
|
m_rootInternalNode->traceToken.tick("type name"_t, keyValue("type name", type));
|
||||||
|
|
||||||
m_rootInternalNode->typeName = type;
|
m_rootInternalNode->typeName = type;
|
||||||
m_rootInternalNode->majorVersion = majorVersion;
|
m_rootInternalNode->majorVersion = majorVersion;
|
||||||
m_rootInternalNode->minorVersion = minorVersion;
|
m_rootInternalNode->minorVersion = minorVersion;
|
||||||
@@ -1499,6 +1519,8 @@ void ModelPrivate::changeRootNodeType(const TypeName &type, int majorVersion, in
|
|||||||
|
|
||||||
void ModelPrivate::setScriptFunctions(const InternalNodePointer &node, const QStringList &scriptFunctionList)
|
void ModelPrivate::setScriptFunctions(const InternalNodePointer &node, const QStringList &scriptFunctionList)
|
||||||
{
|
{
|
||||||
|
m_rootInternalNode->traceToken.tick("script function"_t);
|
||||||
|
|
||||||
node->scriptFunctions = scriptFunctionList;
|
node->scriptFunctions = scriptFunctionList;
|
||||||
|
|
||||||
notifyScriptFunctionsChanged(node, scriptFunctionList);
|
notifyScriptFunctionsChanged(node, scriptFunctionList);
|
||||||
@@ -1506,6 +1528,8 @@ void ModelPrivate::setScriptFunctions(const InternalNodePointer &node, const QSt
|
|||||||
|
|
||||||
void ModelPrivate::setNodeSource(const InternalNodePointer &node, const QString &nodeSource)
|
void ModelPrivate::setNodeSource(const InternalNodePointer &node, const QString &nodeSource)
|
||||||
{
|
{
|
||||||
|
m_rootInternalNode->traceToken.tick("node source"_t);
|
||||||
|
|
||||||
node->nodeSource = nodeSource;
|
node->nodeSource = nodeSource;
|
||||||
notifyNodeSourceChanged(node, nodeSource);
|
notifyNodeSourceChanged(node, nodeSource);
|
||||||
}
|
}
|
||||||
@@ -1721,6 +1745,8 @@ void Model::changeImports(Imports importsToBeAdded, Imports importsToBeRemoved)
|
|||||||
|
|
||||||
void Model::setPossibleImports(Imports possibleImports)
|
void Model::setPossibleImports(Imports possibleImports)
|
||||||
{
|
{
|
||||||
|
auto tracer = d->traceToken.begin("possible imports"_t);
|
||||||
|
|
||||||
std::sort(possibleImports.begin(), possibleImports.end());
|
std::sort(possibleImports.begin(), possibleImports.end());
|
||||||
|
|
||||||
if (d->m_possibleImportList != possibleImports) {
|
if (d->m_possibleImportList != possibleImports) {
|
||||||
@@ -1731,6 +1757,8 @@ void Model::setPossibleImports(Imports possibleImports)
|
|||||||
|
|
||||||
void Model::setUsedImports(Imports usedImports)
|
void Model::setUsedImports(Imports usedImports)
|
||||||
{
|
{
|
||||||
|
auto tracer = d->traceToken.begin("used imports"_t);
|
||||||
|
|
||||||
std::sort(usedImports.begin(), usedImports.end());
|
std::sort(usedImports.begin(), usedImports.end());
|
||||||
|
|
||||||
if (d->m_usedImportList != usedImports) {
|
if (d->m_usedImportList != usedImports) {
|
||||||
@@ -2594,6 +2622,10 @@ The view is informed that it has been registered within the model by a call to A
|
|||||||
*/
|
*/
|
||||||
void Model::attachView(AbstractView *view)
|
void Model::attachView(AbstractView *view)
|
||||||
{
|
{
|
||||||
|
auto traceToken = d->traceToken.begin("attachView"_t,
|
||||||
|
keyValue("name",
|
||||||
|
std::string_view{view->metaObject()->className()}));
|
||||||
|
|
||||||
// Internal::WriteLocker locker(d);
|
// Internal::WriteLocker locker(d);
|
||||||
auto castedRewriterView = qobject_cast<RewriterView *>(view);
|
auto castedRewriterView = qobject_cast<RewriterView *>(view);
|
||||||
if (castedRewriterView) {
|
if (castedRewriterView) {
|
||||||
@@ -2621,6 +2653,10 @@ void Model::attachView(AbstractView *view)
|
|||||||
*/
|
*/
|
||||||
void Model::detachView(AbstractView *view, ViewNotification emitDetachNotify)
|
void Model::detachView(AbstractView *view, ViewNotification emitDetachNotify)
|
||||||
{
|
{
|
||||||
|
auto traceToken = d->traceToken.begin("detachView"_t,
|
||||||
|
keyValue("name",
|
||||||
|
std::string_view{view->metaObject()->className()}));
|
||||||
|
|
||||||
// Internal::WriteLocker locker(d);
|
// Internal::WriteLocker locker(d);
|
||||||
bool emitNotify = (emitDetachNotify == NotifyView);
|
bool emitNotify = (emitDetachNotify == NotifyView);
|
||||||
|
|
||||||
|
@@ -333,6 +333,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
NotNullPointer<ProjectStorageType> projectStorage = nullptr;
|
NotNullPointer<ProjectStorageType> projectStorage = nullptr;
|
||||||
NotNullPointer<PathCacheType> pathCache = nullptr;
|
NotNullPointer<PathCacheType> pathCache = nullptr;
|
||||||
|
ModelTracing::AsynchronousToken traceToken = ModelTracing::category().beginAsynchronous("Model"_t);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Model *m_model = nullptr;
|
Model *m_model = nullptr;
|
||||||
@@ -357,8 +358,7 @@ private:
|
|||||||
QPointer<NodeInstanceView> m_nodeInstanceView;
|
QPointer<NodeInstanceView> m_nodeInstanceView;
|
||||||
QPointer<Model> m_metaInfoProxyModel;
|
QPointer<Model> m_metaInfoProxyModel;
|
||||||
QHash<TypeName, std::shared_ptr<NodeMetaInfoPrivate>> m_nodeMetaInfoCache;
|
QHash<TypeName, std::shared_ptr<NodeMetaInfoPrivate>> m_nodeMetaInfoCache;
|
||||||
ModelTracing::AsynchronousToken m_traceToken = ModelTracing::category().beginAsynchronous(
|
|
||||||
"Model"_t);
|
|
||||||
bool m_writeLock = false;
|
bool m_writeLock = false;
|
||||||
qint32 m_internalIdCounter = 1;
|
qint32 m_internalIdCounter = 1;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user