summaryrefslogtreecommitdiff
path: root/src/mongo/scripting
diff options
context:
space:
mode:
authorEric Cox <eric.cox@mongodb.com>2020-03-10 14:59:18 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-03-13 19:37:39 +0000
commit16889524ede36d890f863b63447ba0af9d75013e (patch)
tree4270e50d1738b243f89b3bdd110d25df9d361f37 /src/mongo/scripting
parentc6979495ad7429a8a8a65ff1e69687c58cbb1f7b (diff)
downloadmongo-16889524ede36d890f863b63447ba0af9d75013e.tar.gz
SERVER-46494 improve perf of '$function'
Diffstat (limited to 'src/mongo/scripting')
-rw-r--r--src/mongo/scripting/mozjs/implscope.cpp7
-rw-r--r--src/mongo/scripting/mozjs/implscope.h2
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");