vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Fri Oct 28 10:55:19 2016 +0300| [851257809ce616fa5614b86e614eb5c1f82898cf] | committer: Rémi Denis-Courmont
modules: add --no-plugins-scan option to turn off directory scanning With that options, plugins are *only* loaded from the cache. This reduces the run time of libvlc_new() (about 2.5x on my system). But new plugins won´t be picked up until the cache is regenerated. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=851257809ce616fa5614b86e614eb5c1f82898cf --- src/libvlc-module.c | 7 +++++++ src/modules/bank.c | 47 +++++++++++++++++++++++++++++------------------ 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/libvlc-module.c b/src/libvlc-module.c index ea13769..3b95d5c 100644 --- a/src/libvlc-module.c +++ b/src/libvlc-module.c @@ -1034,6 +1034,11 @@ static const char *const ppsz_prefres[] = { #define PLUGINS_CACHE_LONGTEXT N_( \ "Use a plugins cache which will greatly improve the startup time of VLC.") +#define PLUGINS_SCAN_TEXT N_("Scan for new plugins") +#define PLUGINS_SCAN_LONGTEXT N_( \ + "Scan plugin directories for new plugins at startup. " \ + "This increases the startup time of VLC.") + #define KEYSTORE_TEXT N_("Preferred keystore list") #define KEYSTORE_LONGTEXT N_( \ "List of keystores that VLC will use in " \ @@ -1968,6 +1973,8 @@ vlc_module_begin () set_section( N_("Plugins" ), NULL ) add_bool( "plugins-cache", true, PLUGINS_CACHE_TEXT, PLUGINS_CACHE_LONGTEXT, true ) + add_bool( "plugins-scan", true, PLUGINS_SCAN_TEXT, + PLUGINS_SCAN_LONGTEXT, true ) add_obsolete_string( "plugin-path" ) /* since 2.0.0 */ add_obsolete_string( "data-path" ) /* since 2.1.0 */ add_string( "keystore", NULL, KEYSTORE_TEXT, diff --git a/src/modules/bank.c b/src/modules/bank.c index 3867337..62ee779 100644 --- a/src/modules/bank.c +++ b/src/modules/bank.c @@ -148,7 +148,12 @@ error: return NULL; } -typedef enum { CACHE_USE, CACHE_RESET, CACHE_IGNORE } cache_mode_t; +typedef enum +{ + CACHE_READ_FILE = 0x1, + CACHE_SCAN_DIR = 0x2, + CACHE_WRITE_FILE = 0x4, +} cache_mode_t; typedef struct module_bank { @@ -170,7 +175,7 @@ static int AllocatePluginFile (module_bank_t *bank, const char *abspath, vlc_plugin_t *plugin = NULL; /* Check our plugins cache first then load plugin if needed */ - if (bank->mode == CACHE_USE) + if (bank->mode & CACHE_READ_FILE) { plugin = vlc_cache_lookup(&bank->cache, relpath); @@ -202,7 +207,7 @@ static int AllocatePluginFile (module_bank_t *bank, const char *abspath, module_StoreBank(plugin); - if (bank->mode == CACHE_RESET) /* Add entry to to-be-saved cache */ + if (bank->mode & CACHE_WRITE_FILE) /* Add entry to to-be-saved cache */ { bank->plugins = xrealloc(bank->plugins, (bank->size + 1) * sizeof (vlc_plugin_t *)); @@ -305,26 +310,32 @@ static void AllocatePluginPath(vlc_object_t *obj, const char *path, .mode = mode, }; - if (mode == CACHE_USE) + if (mode & CACHE_READ_FILE) bank.cache = vlc_cache_load(obj, path, &modules.caches); else msg_Dbg(bank.obj, "ignoring plugins cache file"); - msg_Dbg(obj, "recursively browsing `%s'", bank.base); + if (mode & CACHE_SCAN_DIR) + { + msg_Dbg(obj, "recursively browsing `%s'", bank.base); - /* Don't go deeper than 5 subdirectories */ - AllocatePluginDir (&bank, 5, path, NULL); + /* Don't go deeper than 5 subdirectories */ + AllocatePluginDir(&bank, 5, path, NULL); + } - /* Discard unmatched cache entries */ + /* Deal with unmatched cache entries from cache file */ while (bank.cache != NULL) { vlc_plugin_t *plugin = bank.cache; bank.cache = plugin->next; - vlc_plugin_destroy(plugin); + if (mode & CACHE_SCAN_DIR) + vlc_plugin_destroy(plugin); + else + module_StoreBank(plugin); } - if (mode == CACHE_RESET) + if (mode & CACHE_WRITE_FILE) CacheSave(obj, path, bank.plugins, bank.size); free(bank.plugins); @@ -341,14 +352,14 @@ static void AllocatePluginPath(vlc_object_t *obj, const char *path, static void AllocateAllPlugins (vlc_object_t *p_this) { char *paths; - cache_mode_t mode; - - if( !var_InheritBool( p_this, "plugins-cache" ) ) - mode = CACHE_IGNORE; - else if( var_InheritBool( p_this, "reset-plugins-cache" ) ) - mode = CACHE_RESET; - else - mode = CACHE_USE; + cache_mode_t mode = 0; + + if (var_InheritBool(p_this, "plugins-cache")) + mode |= CACHE_READ_FILE; + if (var_InheritBool(p_this, "plugins-scan")) + mode |= CACHE_SCAN_DIR; + if (var_InheritBool(p_this, "reset-plugins-cache")) + mode = (mode | CACHE_WRITE_FILE) & ~CACHE_READ_FILE; #if VLC_WINSTORE_APP /* Windows Store Apps can not load external plugins with absolute paths. */ _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
