From b598e229403a7b9a6f972608e913245604a6172d Mon Sep 17 00:00:00 2001 From: aloysb Date: Mon, 14 Sep 2020 10:02:40 +1000 Subject: [PATCH 1/2] Cache the LayerManager node to avoid very expensive maya query when starting editing --- .../lib/AL_USDMaya/AL/usdmaya/nodes/LayerManager.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugin/al/lib/AL_USDMaya/AL/usdmaya/nodes/LayerManager.cpp b/plugin/al/lib/AL_USDMaya/AL/usdmaya/nodes/LayerManager.cpp index 93eb008d0f..2d4e4d62e8 100644 --- a/plugin/al/lib/AL_USDMaya/AL/usdmaya/nodes/LayerManager.cpp +++ b/plugin/al/lib/AL_USDMaya/AL/usdmaya/nodes/LayerManager.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -43,6 +44,9 @@ const int _layerManagerProfilerCategory = MProfiler::addCategory( "LayerManager" #endif ); + +MObjectHandle theLayerManagerHandle; + } // namespace namespace { @@ -299,12 +303,20 @@ MObject LayerManager::findNode() //---------------------------------------------------------------------------------------------------------------------- MObject LayerManager::_findNode() { + if (theLayerManagerHandle.isValid() && theLayerManagerHandle.isAlive()) { + MObject theManager { theLayerManagerHandle.object() }; + if (!theManager.isNull()) { + return theManager; + } + } + MFnDependencyNode fn; MItDependencyNodes iter(MFn::kPluginDependNode); for (; !iter.isDone(); iter.next()) { MObject mobj = iter.item(); fn.setObject(mobj); if (fn.typeId() == kTypeId && !fn.isFromReferencedFile()) { + theLayerManagerHandle = mobj; return mobj; } } From 831f3afaa491e4ba76d5e1825ec30c5b0872a191 Mon Sep 17 00:00:00 2001 From: Jonathan Moallem Date: Fri, 15 Oct 2021 11:00:21 +1100 Subject: [PATCH 2/2] Added caching of LayerManager on findNode --- lib/mayaUsd/nodes/layerManager.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/mayaUsd/nodes/layerManager.cpp b/lib/mayaUsd/nodes/layerManager.cpp index 51228ee010..b79fb6fa6d 100644 --- a/lib/mayaUsd/nodes/layerManager.cpp +++ b/lib/mayaUsd/nodes/layerManager.cpp @@ -136,12 +136,23 @@ getFileFormatForLayer(const std::string& identifierVal, const std::string& seria MayaUsd::LayerManager* findNode() { - MFnDependencyNode fn; + // Check for cached layer manager before searching + MFnDependencyNode fn; + static MObjectHandle layerManagerHandle { MObject::kNullObj }; + if (layerManagerHandle.isValid() && layerManagerHandle.isAlive()) { + MObject mobj { layerManagerHandle.object() }; + if (!mobj.isNull()) { + fn.setObject(mobj); + return static_cast(fn.userNode()); + } + } + MItDependencyNodes iter(MFn::kPluginDependNode); for (; !iter.isDone(); iter.next()) { MObject mobj = iter.item(); fn.setObject(mobj); if (fn.typeId() == MayaUsd::LayerManager::typeId && !fn.isFromReferencedFile()) { + layerManagerHandle = mobj; return static_cast(fn.userNode()); } }