MCPcopy Create free account
hub / github.com/GDRETools/gdsdecomp / prepop_cache

Method prepop_cache

plugin_manager/plugin_manager.cpp:276–336  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

274};
275
276Error PluginManager::prepop_cache(const Vector<String> &plugin_names) {
277 bool multithread = !GDREConfig::get_singleton()->get_setting("force_single_threaded", false);
278 prepopping = true;
279 String plugin_names_str = String(", ").join(plugin_names);
280 print_line("Prepopulating cache for " + plugin_names_str);
281 print_line("Plugin dir: " + get_plugin_cache_path());
282 Vector<PrePopToken> tokens;
283 for (int i = 0; i < plugin_names.size(); i++) {
284 auto &plugin_name = plugin_names[i];
285 auto source = get_source(plugin_name);
286 if (source.is_null()) {
287 continue;
288 }
289 Error err = OK;
290 auto versions = source->get_plugin_version_numbers(plugin_name, err);
291 ERR_FAIL_COND_V_MSG(err != OK, err, vformat("Failed to get plugin version numbers for plugin %s", plugin_name));
292 for (auto &version : versions) {
293 PrePopToken token;
294 token.plugin_name = plugin_name;
295 token.source = source;
296 token.version = version;
297 tokens.push_back(token);
298 }
299 }
300 PrePopTask task;
301 Error err = OK;
302 if (multithread) {
303 gdre::shuffle_vector(tokens);
304 err = TaskManager::get_singleton()->run_multithreaded_group_task(
305 &task,
306 &PrePopTask::do_task,
307 tokens.ptrw(),
308 tokens.size(),
309 &PrePopTask::describe_task,
310 "GDRESettings::prepop_plugin_cache_gh",
311 "Prepopulating plugin cache",
312 true,
313 -1,
314 true);
315 } else {
316 for (int i = 0; i < tokens.size(); i++) {
317 task.do_task(i, tokens.ptrw());
318 if (tokens[i].error != OK) {
319 break;
320 }
321 }
322 }
323 save_cache();
324 if (err != OK) {
325 return err;
326 }
327 for (int i = 0; i < tokens.size(); i++) {
328 if (tokens[i].error != OK) {
329 return tokens[i].error;
330 }
331 }
332
333 print_plugin_cache();

Callers

nothing calls this directly

Calls 7

shuffle_vectorFunction · 0.85
push_backMethod · 0.80
get_settingMethod · 0.45
sizeMethod · 0.45
do_taskMethod · 0.45

Tested by

no test coverage detected