| 2835 | unloaded = false; |
| 2836 | while (unloadNextUnusedModule(entry)) { |
| 2837 | unloaded = true; |
| 2838 | } |
| 2839 | |
| 2840 | performGcNow(entry.jsContext); |
| 2841 | } |
| 2842 | } |
| 2843 | |
| 2844 | completionGroup->leave(); |
| 2845 | }); |
| 2846 | } |
| 2847 | |
| 2848 | void JavaScriptRuntime::unloadUnusedModules(DispatchFunction completion) { |
| 2849 | auto group = makeShared<AsyncGroup>(); |
| 2850 | |
| 2851 | unloadUnusedModules(group); |
| 2852 | |
| 2853 | group->notify(std::move(completion)); |
| 2854 | } |
| 2855 | |
| 2856 | FlatSet<ResourceId> JavaScriptRuntime::getAllUsedModules() const { |
| 2857 | FlatSet<ResourceId> allUsedModules; |
| 2858 | for (const auto& context : _contextManager.getAllContexts()) { |
| 2859 | allUsedModules.insert(context->getPath().getResourceId()); |
| 2860 | } |
| 2861 | for (const auto& it : _modules) { |
| 2862 | allUsedModules.insert(it.first); |
| 2863 | } |
| 2864 | return allUsedModules; |
| 2865 | } |
| 2866 | |
| 2867 | bool JavaScriptRuntime::unloadNextUnusedModule(JavaScriptEntryParameters& entry) { |
| 2868 | auto allUsedModules = getAllUsedModules(); |
| 2869 | |