diff options
author | Eric Cox <eric.cox@mongodb.com> | 2020-03-10 14:59:18 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-03-13 19:37:39 +0000 |
commit | 16889524ede36d890f863b63447ba0af9d75013e (patch) | |
tree | 4270e50d1738b243f89b3bdd110d25df9d361f37 /src/mongo/scripting | |
parent | c6979495ad7429a8a8a65ff1e69687c58cbb1f7b (diff) | |
download | mongo-16889524ede36d890f863b63447ba0af9d75013e.tar.gz |
SERVER-46494 improve perf of '$function'
Diffstat (limited to 'src/mongo/scripting')
-rw-r--r-- | src/mongo/scripting/mozjs/implscope.cpp | 7 | ||||
-rw-r--r-- | src/mongo/scripting/mozjs/implscope.h | 2 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/mongo/scripting/mozjs/implscope.cpp b/src/mongo/scripting/mozjs/implscope.cpp index f06a20bfc0a..32883343ab0 100644 --- a/src/mongo/scripting/mozjs/implscope.cpp +++ b/src/mongo/scripting/mozjs/implscope.cpp @@ -630,9 +630,14 @@ bool hasFunctionIdentifier(StringData code) { ScriptingFunction MozJSImplScope::_createFunction(const char* raw) { return _runSafely([&] { JS::RootedValue fun(_context); + auto it = _funcCodeToHandleMap.find(StringData(raw)); + if (it != _funcCodeToHandleMap.end()) { + return it->second; + } _MozJSCreateFunction(raw, &fun); _funcs.emplace_back(_context, fun.get()); - return _funcs.size(); + _funcCodeToHandleMap.emplace(raw, _funcs.size()); + return ScriptingFunction(_funcs.size()); }); } diff --git a/src/mongo/scripting/mozjs/implscope.h b/src/mongo/scripting/mozjs/implscope.h index b842ae3cbef..86aa6c5dd05 100644 --- a/src/mongo/scripting/mozjs/implscope.h +++ b/src/mongo/scripting/mozjs/implscope.h @@ -67,6 +67,7 @@ #include "mongo/scripting/mozjs/timestamp.h" #include "mongo/scripting/mozjs/uri.h" #include "mongo/stdx/unordered_set.h" +#include "mongo/util/string_map.h" namespace mongo { namespace mozjs { @@ -411,6 +412,7 @@ private: WrapType<GlobalInfo> _globalProto; JS::HandleObject _global; std::vector<JS::PersistentRootedValue> _funcs; + StringMap<ScriptingFunction> _funcCodeToHandleMap; InternedStringTable _internedStrings; Status _killStatus; mutable Mutex _mutex = MONGO_MAKE_LATCH("MozJSImplScope::_mutex"); |