[gdal-dev] Call for review and discussion on RFC96: Deferred in-tree C++ plugin loading
Even Rouault
even.rouault at spatialys.com
Mon Nov 13 11:41:18 PST 2023
Hi,
The OSGeo code sprint last week has been the opportunity to advance the
candidate implementation of the RFC. It is now available at
https://github.com/OSGeo/gdal/pull/8695 :
* All drivers that can be built as plugins and depend on external
libraries have been converted to use the deferred plugin loading
capability. Plus a few other drivers that only depend on core
* The PNG, JPEG, GIF, MRF, NITF and planetary (PDS, PDS4, ISIS2,
ISIS3, VICAR) drivers can also now be built as plugins (when not
using the in-tree vendored libraries such as libpng, libjpeg, etc.),
and use deferred plugin loading
On my full configuration with all drivers that can be built as plugins
effectively built as plugins - that is those that only depend on
libgdal, with -DGDAL_ENABLE_PLUGINS_NO_DEPS=ON and those that depend on
third-party libraries, with -DGDAL_ENABLE_PLUGINS=ON -, the
initialization time has dropped from ~ 300 ms to 70 ms. If building only
as plugins drivers that depend on third-party libraries with
-DGDAL_ENABLE_PLUGINS=ON (which is the config that makes most sense), it
drops to 26 ms, with all 55 plugins in deferred loading mode. One of the
biggest culprit identified during the conversion process was the DGNv8 /
DWG driver wich links to gazillion shared libraries of the Teigha SDK.
I've also added a bit of extra user friendliness:
When a plugin driver is known of core libgdal, but not available as
a plugin at
runtime, GDAL will inform the user that the plugin is not
available, but could
be installed. It is possible to give more hints on how to install a
plugin
by setting the following option:
.. option::
GDAL_DRIVER_<driver_name>_PLUGIN_INSTALLATION_MESSAGE:STRING
.. option:: OGR_DRIVER_<driver_name>_PLUGIN_INSTALLATION_MESSAGE:STRING
Custom message to give a hint to the user how to install a
missing plugin
For example, if doing a build with::
cmake .. -DOGR_DRIVER_PARQUET_PLUGIN_INSTALLATION_MESSAGE="You
may install it with with 'conda install -c conda-forge
libgdal-arrow-parquet'"
and opening a Parquet file while the plugin is not installed will
display the
following error::
$ ogrinfo poly.parquet
ERROR 4: `poly.parquet' not recognized as a supported file
format. It could have been recognized by driver Parquet, but plugin
ogr_Parquet.so is not available in your installation. You may install it
with with 'conda install -c conda-forge libgdal-arrow-parquet'
I'll submit soon the RFC to vote if there are no further remarks.
Even
Le 06/11/2023 à 14:50, Even Rouault via gdal-dev a écrit :
> Hi,
>
> I've revised a bit the RFC
> (https://github.com/OSGeo/gdal/pull/8648/commits/b7053db2f433275edf16286596e71f3ceb9738a5)
> to unify the way the plugin driver proxy and the actual driver declare
> their metadata. This avoids the new GDALPluginDriverFeatures class,
> and will limit the risk of omissions or inconsistencies between the
> proxy and actual drivers.
>
> Even
>
> Le 02/11/2023 à 12:59, Even Rouault via gdal-dev a écrit :
>> Hi,
>>
>> I'm seeking for feedback and review on a new RFC (RFC 96: Deferred
>> in-tree C++ plugin loading),
>> detailed in https://github.com/OSGeo/gdal/pull/8648, whose summary is:
>>
>> This RFC adds a mechanism to defer the loading of in-tree C++ plugin
>> drivers to
>> the point where their executable code is actually needed, and
>> converts a number
>> of relevant drivers to use that mechanism. The aim is to allow for
>> more modular
>> GDAL builds, while improving the performance of plugin loading.
>>
>> (This is material only for GDAL 3.9 of course)
>>
>> Even
>>
--
http://www.spatialys.com
My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20231113/c56af9a9/attachment.htm>
More information about the gdal-dev
mailing list