Skip to content
  • Chyla Zbigniew's avatar
    Improved plugin system performance & scalability: - reading plugin · 4e17aadc
    Chyla Zbigniew authored
    
    Improved plugin system performance & scalability:
    - reading plugin information from file only if necessary
      (usually when activating a plugin)
    - some minor optimizations (using hashes instead of lists, etc.)
    
    * src/Makefile.am
    (GNUMERIC_BASE_SOURCES): Sorted some items.
    
    * src/gutils.h (g_list_to_vector_custom): New macro.
    
    * src/plugin.c:
    Made some functions static.
    s/plugin_loader_get_by_id/plugin_loader_get_type_by_id/
    (struct _PluginInfo): Added has_full_info field.
    (get_file_state_as_string, plugin_file_state_as_string,
    plugin_file_state_from_string, plugin_file_state_free,
    plugin_cache_init, plugin_cache_shutdown):
    New functions, support for caching information about plugin ids
    stored in XML files (together with modification dates).
    (plugin_info_read_full_info_if_needed_error_info,
    plugin_info_read_full_info_if_needed): New functions loading missing
    plugin information from file if necessary.
    (plugin_info_read):
    Use existing PluginInfo struct rather than creating a new one,
    take XML file name (not parsed XML tree) as an argument.
    (plugin_info_new_from_xml):
    New function, creates new PluginInfo struct from XML file (using
    plugin_info_read).
    (plugin_info_new_with_id_and_dir_name_only):
    New function, creates new PluginInfo struct with only plugin id and
    directory name given (sets has_full_info to FALSE).
    (plugin_info_get_name, plugin_info_get_description,
    plugin_info_get_extra_info_list, plugin_info_is_active,
    plugin_info_peek_name, plugin_info_peek_description,
    plugin_info_peek_loader_type_str,
    plugin_info_provides_loader_by_type_str,
    plugin_info_is_loaded, plugin_info_peek_services_data,
    plugin_info_get_loader,
    plugin_inc_dependants, plugin_dec_dependants,
    plugin_dependencies_inc_dependants,
    plugin_dependencies_dec_dependants,
    plugin_get_loader_if_needed, activate_plugin, deactivate_plugin,
    plugin_can_deactivate, plugin_info_force_mark_inactive,
    plugin_load_service, plugin_unload_service,
    plugin_load_dependencies):
    Read full plugin information if needed.
    (plugin_info_free):
    Don't try to free most data if has_full_info == FALSE.
    (plugin_info_list_read_for_dir):
    Return one PluginInfo instead of a list, create incomplete
    PluginInfo (using plugin_info_new_with_id_and_dir_name_only) if
    found a directory in plugin_file_state_dir_hash.
    (plugin_info_list_read_for_subdirs_of_dir):
    Don't check if current file is a directory (it'll be detected
    anyway).
    (plugin_db_get_known_plugin_id_list,
    plugin_db_extend_known_plugin_id_list, plugin_db_is_known_plugin,
    plugin_db_get_saved_active_plugin_id_list,
    plugin_db_is_saved_active_plugin):
    Removed.
    (plugin_db_get_available_plugin_info_list): Just return
    available_plugin_info_list, never fail.
    (plugin_db_mark_plugin_for_deactivation,
    plugin_db_is_plugin_marked_for_deactivation, plugins_shutdown):
    Use hash table (plugins_marked_for_deactivation_hash) instead of
    a list.
    (plugin_db_init): Initialize available_plugin_info_list and
    saved_active_plugin_id_list here, use a hash table when detecting
    new plugins.
    (plugins_init): Call plugin_cache_init.
    (plugins_init): Call plugin_cache_shutdown.
    
    * src/plugin.h
    (plugin_info_read, plugin_info_print, plugin_info_list_read_for_dir,
    plugin_info_list_read_for_subdirs_of_dir,
    plugin_info_list_read_for_subdirs_of_dir_list,
    plugin_info_list_read_for_all_dirs,
    plugin_db_extend_known_plugin_id_list, plugin_db_is_known_plugin,
    plugin_db_extend_saved_active_plugin_id_list,
    plugin_db_is_saved_active_plugin,
    plugin_db_activate_saved_active_plugins):
    Removed (most of them are now static functions).
    
    * src/plugin-service.c
    (plugin_service_file_saver_initialize): Fixed serious typo.
    
    * src/dialogs/dialog-plugin-manager.c
    (cb_pm_button_activate_plugin_clicked,
    cb_pm_button_activate_all_clicked,
    cb_pm_button_deactivate_all_clicked,
    update_plugin_manager_view): Adjusted to
    plugin_db_get_available_plugin_info_list signature change.
    
    * plugins/applix/plugin.xml, plugins/dif/plugin.xml,
    plugins/excel/plugin.xml, plugins/gb/plugin.xml,
    plugins/gda/plugin.xml, plugins/gnome-glossary/plugin.xml,
    plugins/guile/plugin.xml, plugins/html/plugin.xml,
    plugins/lotus-123/plugin.xml, plugins/numtheory/plugin.xml,
    plugins/oleo/plugin.xml, plugins/perl/plugin.xml,
    plugins/plan-perfect/plugin.xml, plugins/py-func/plugin.xml,
    plugins/python/plugin.xml, plugins/python-loader/plugin.xml,
    plugins/sc/plugin.xml, plugins/sylk/plugin.xml,
    plugins/xbase/plugin.xml, plugins/xml_sax/plugin.xml:
    Removed <gnumeric_plugin_group> tags. Now every directory may contain
    only one plugin.
    4e17aadc