Re: [Spice-devel] [PATCH spice-streaming-agent v2 2/2] explicit instead of static registration for built-in plugins

2018-02-19 Thread Frediano Ziglio
> 
> On Fri, 2018-02-16 at 07:23 -0500, Frediano Ziglio wrote:
> > > 
> > > > On 6 Feb 2018, at 10:51, Frediano Ziglio  wrote:
> > > > 
> > > > > > 
> > > > > > On 5 Feb 2018, at 15:29, Lukáš Hrázký  wrote:
> > > > > > 
> > > > > > The static registration (that is, having a static list of pointers
> > > > > > to
> > > > > > static plugin variables and calling a generic function in the main
> > > > > > initialization code path to register them) allows to add plugins
> > > > > > without
> > > > > > registering each of them explicitly.
> > > > > > 
> > > > > > However, in a single codebase, and having very few plugins, there
> > > > > > is
> > > > > > very little advantage to it and the tradeoff for the complexity of
> > > > > > this
> > > > > > initialization is not worth it. A single call for every built-in
> > > > > > plugin
> > > > > > is much more simple and clear.
> > > > > > 
> > > > > > Signed-off-by: Lukáš Hrázký 
> > > > > > ---
> > > > > > src/Makefile.am   |  2 --
> > > > > > src/concrete-agent.cpp|  3 ---
> > > > > > src/mjpeg-fallback.cpp|  6 +-
> > > > > > src/mjpeg-fallback.hpp|  1 +
> > > > > > src/spice-streaming-agent.cpp |  4 
> > > > > > src/static-plugin.cpp | 23 ---
> > > > > > src/static-plugin.hpp | 35
> > > > > > ---
> > > > > > 7 files changed, 6 insertions(+), 68 deletions(-)
> > > > > > delete mode 100644 src/static-plugin.cpp
> > > > > > delete mode 100644 src/static-plugin.hpp
> > > > > > 
> > > > > > diff --git a/src/Makefile.am b/src/Makefile.am
> > > > > > index 8d5c5bd..590db1f 100644
> > > > > > --- a/src/Makefile.am
> > > > > > +++ b/src/Makefile.am
> > > > > > @@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \
> > > > > > 
> > > > > > spice_streaming_agent_SOURCES = \
> > > > > > spice-streaming-agent.cpp \
> > > > > > -   static-plugin.cpp \
> > > > > > -   static-plugin.hpp \
> > > > > > concrete-agent.cpp \
> > > > > > concrete-agent.hpp \
> > > > > > mjpeg-fallback.cpp \
> > > > > > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
> > > > > > index 873a69e..c69da43 100644
> > > > > > --- a/src/concrete-agent.cpp
> > > > > > +++ b/src/concrete-agent.cpp
> > > > > > @@ -11,7 +11,6 @@
> > > > > > #include 
> > > > > > 
> > > > > > #include "concrete-agent.hpp"
> > > > > > -#include "static-plugin.hpp"
> > > > > > 
> > > > > > using namespace std;
> > > > > > using namespace SpiceStreamingAgent;
> > > > > > @@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name,
> > > > > > const
> > > > > > char *value)
> > > > > > 
> > > > > > void ConcreteAgent::LoadPlugins(const string &directory)
> > > > > > {
> > > > > > -StaticPlugin::InitAll(*this);
> > > > > > -
> > > > > >string pattern = directory + "/*.so";
> > > > > >glob_t globbuf;
> > > > > > 
> > > > > > diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp
> > > > > > index 7c918a7..d7c676d 100644
> > > > > > --- a/src/mjpeg-fallback.cpp
> > > > > > +++ b/src/mjpeg-fallback.cpp
> > > > > > @@ -15,7 +15,6 @@
> > > > > > #include 
> > > > > > #include 
> > > > > > 
> > > > > > -#include "static-plugin.hpp"
> > > > > > #include "jpeg.hpp"
> > > > > > 
> > > > > > using namespace std;
> > > > > > @@ -191,8 +190,7 @@ SpiceVideoCodecType
> > > > > > MjpegPlugin::VideoCodecType()
> > > > > > const
> > > > > > {
> > > > > >return SPICE_VIDEO_CODEC_TYPE_MJPEG;
> > > > > > }
> > > > > > 
> > > > > > -static bool
> > > > > > -mjpeg_plugin_init(Agent* agent)
> > > > > > +bool MjpegPlugin::Register(Agent* agent)
> > > > > > {
> > > > > >if (agent->Version() != PluginVersion)
> > > > > >return false;
> > > > > > @@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent)
> > > > > > 
> > > > > >return true;
> > > > > > }
> > > > > > -
> > > > > > -static StaticPlugin mjpeg_plugin(mjpeg_plugin_init);
> > > > > > diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp
> > > > > > index 8044244..0e9ed6a 100644
> > > > > > --- a/src/mjpeg-fallback.hpp
> > > > > > +++ b/src/mjpeg-fallback.hpp
> > > > > > @@ -25,6 +25,7 @@ public:
> > > > > >unsigned Rank() override;
> > > > > >void ParseOptions(const ConfigureOption *options);
> > > > > >SpiceVideoCodecType VideoCodecType() const;
> > > > > > +static bool Register(Agent* agent);
> > > > > > private:
> > > > > >MjpegSettings settings = { 10, 80 };
> > > > > > };
> > > > > > diff --git a/src/spice-streaming-agent.cpp
> > > > > > b/src/spice-streaming-agent.cpp
> > > > > > index 94d9d25..8458975 100644
> > > > > > --- a/src/spice-streaming-agent.cpp
> > > > > > +++ b/src/spice-streaming-agent.cpp
> > > > > > @@ -34,6 +34,7 @@
> > > > > > 
> > > > > > #include "hexdump.h"
> > > > > > #include "concrete-agent.hpp"
> > > > > > +#include "mjpeg-fallback.hpp"
> > > > > > 
> > > > > > using namespace std;
> > > > > > using namespace SpiceStreamingAgent;
> > > > > > @@ -489,6 +490,9 @@ int main(int 

Re: [Spice-devel] [PATCH spice-streaming-agent v2 2/2] explicit instead of static registration for built-in plugins

2018-02-19 Thread Lukáš Hrázký
On Fri, 2018-02-16 at 07:23 -0500, Frediano Ziglio wrote:
> > 
> > > On 6 Feb 2018, at 10:51, Frediano Ziglio  wrote:
> > > 
> > > > > 
> > > > > On 5 Feb 2018, at 15:29, Lukáš Hrázký  wrote:
> > > > > 
> > > > > The static registration (that is, having a static list of pointers to
> > > > > static plugin variables and calling a generic function in the main
> > > > > initialization code path to register them) allows to add plugins 
> > > > > without
> > > > > registering each of them explicitly.
> > > > > 
> > > > > However, in a single codebase, and having very few plugins, there is
> > > > > very little advantage to it and the tradeoff for the complexity of 
> > > > > this
> > > > > initialization is not worth it. A single call for every built-in 
> > > > > plugin
> > > > > is much more simple and clear.
> > > > > 
> > > > > Signed-off-by: Lukáš Hrázký 
> > > > > ---
> > > > > src/Makefile.am   |  2 --
> > > > > src/concrete-agent.cpp|  3 ---
> > > > > src/mjpeg-fallback.cpp|  6 +-
> > > > > src/mjpeg-fallback.hpp|  1 +
> > > > > src/spice-streaming-agent.cpp |  4 
> > > > > src/static-plugin.cpp | 23 ---
> > > > > src/static-plugin.hpp | 35 ---
> > > > > 7 files changed, 6 insertions(+), 68 deletions(-)
> > > > > delete mode 100644 src/static-plugin.cpp
> > > > > delete mode 100644 src/static-plugin.hpp
> > > > > 
> > > > > diff --git a/src/Makefile.am b/src/Makefile.am
> > > > > index 8d5c5bd..590db1f 100644
> > > > > --- a/src/Makefile.am
> > > > > +++ b/src/Makefile.am
> > > > > @@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \
> > > > > 
> > > > > spice_streaming_agent_SOURCES = \
> > > > >   spice-streaming-agent.cpp \
> > > > > - static-plugin.cpp \
> > > > > - static-plugin.hpp \
> > > > >   concrete-agent.cpp \
> > > > >   concrete-agent.hpp \
> > > > >   mjpeg-fallback.cpp \
> > > > > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
> > > > > index 873a69e..c69da43 100644
> > > > > --- a/src/concrete-agent.cpp
> > > > > +++ b/src/concrete-agent.cpp
> > > > > @@ -11,7 +11,6 @@
> > > > > #include 
> > > > > 
> > > > > #include "concrete-agent.hpp"
> > > > > -#include "static-plugin.hpp"
> > > > > 
> > > > > using namespace std;
> > > > > using namespace SpiceStreamingAgent;
> > > > > @@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name, 
> > > > > const
> > > > > char *value)
> > > > > 
> > > > > void ConcreteAgent::LoadPlugins(const string &directory)
> > > > > {
> > > > > -StaticPlugin::InitAll(*this);
> > > > > -
> > > > >string pattern = directory + "/*.so";
> > > > >glob_t globbuf;
> > > > > 
> > > > > diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp
> > > > > index 7c918a7..d7c676d 100644
> > > > > --- a/src/mjpeg-fallback.cpp
> > > > > +++ b/src/mjpeg-fallback.cpp
> > > > > @@ -15,7 +15,6 @@
> > > > > #include 
> > > > > #include 
> > > > > 
> > > > > -#include "static-plugin.hpp"
> > > > > #include "jpeg.hpp"
> > > > > 
> > > > > using namespace std;
> > > > > @@ -191,8 +190,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType()
> > > > > const
> > > > > {
> > > > >return SPICE_VIDEO_CODEC_TYPE_MJPEG;
> > > > > }
> > > > > 
> > > > > -static bool
> > > > > -mjpeg_plugin_init(Agent* agent)
> > > > > +bool MjpegPlugin::Register(Agent* agent)
> > > > > {
> > > > >if (agent->Version() != PluginVersion)
> > > > >return false;
> > > > > @@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent)
> > > > > 
> > > > >return true;
> > > > > }
> > > > > -
> > > > > -static StaticPlugin mjpeg_plugin(mjpeg_plugin_init);
> > > > > diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp
> > > > > index 8044244..0e9ed6a 100644
> > > > > --- a/src/mjpeg-fallback.hpp
> > > > > +++ b/src/mjpeg-fallback.hpp
> > > > > @@ -25,6 +25,7 @@ public:
> > > > >unsigned Rank() override;
> > > > >void ParseOptions(const ConfigureOption *options);
> > > > >SpiceVideoCodecType VideoCodecType() const;
> > > > > +static bool Register(Agent* agent);
> > > > > private:
> > > > >MjpegSettings settings = { 10, 80 };
> > > > > };
> > > > > diff --git a/src/spice-streaming-agent.cpp
> > > > > b/src/spice-streaming-agent.cpp
> > > > > index 94d9d25..8458975 100644
> > > > > --- a/src/spice-streaming-agent.cpp
> > > > > +++ b/src/spice-streaming-agent.cpp
> > > > > @@ -34,6 +34,7 @@
> > > > > 
> > > > > #include "hexdump.h"
> > > > > #include "concrete-agent.hpp"
> > > > > +#include "mjpeg-fallback.hpp"
> > > > > 
> > > > > using namespace std;
> > > > > using namespace SpiceStreamingAgent;
> > > > > @@ -489,6 +490,9 @@ int main(int argc, char* argv[])
> > > > >}
> > > > >}
> > > > > 
> > > > > +// register built-in plugins
> > > > > +MjpegPlugin::Register(&agent);
> > > > > +
> > > > >agent.LoadPlugins(PLUGINSDIR);
> > > > > 
> > > > >register_interrupts();
> > > > > diff --git a/src/

Re: [Spice-devel] [PATCH spice-streaming-agent v2 2/2] explicit instead of static registration for built-in plugins

2018-02-16 Thread Frediano Ziglio
> 
> > On 6 Feb 2018, at 10:51, Frediano Ziglio  wrote:
> > 
> >>> 
> >>> On 5 Feb 2018, at 15:29, Lukáš Hrázký  wrote:
> >>> 
> >>> The static registration (that is, having a static list of pointers to
> >>> static plugin variables and calling a generic function in the main
> >>> initialization code path to register them) allows to add plugins without
> >>> registering each of them explicitly.
> >>> 
> >>> However, in a single codebase, and having very few plugins, there is
> >>> very little advantage to it and the tradeoff for the complexity of this
> >>> initialization is not worth it. A single call for every built-in plugin
> >>> is much more simple and clear.
> >>> 
> >>> Signed-off-by: Lukáš Hrázký 
> >>> ---
> >>> src/Makefile.am   |  2 --
> >>> src/concrete-agent.cpp|  3 ---
> >>> src/mjpeg-fallback.cpp|  6 +-
> >>> src/mjpeg-fallback.hpp|  1 +
> >>> src/spice-streaming-agent.cpp |  4 
> >>> src/static-plugin.cpp | 23 ---
> >>> src/static-plugin.hpp | 35 ---
> >>> 7 files changed, 6 insertions(+), 68 deletions(-)
> >>> delete mode 100644 src/static-plugin.cpp
> >>> delete mode 100644 src/static-plugin.hpp
> >>> 
> >>> diff --git a/src/Makefile.am b/src/Makefile.am
> >>> index 8d5c5bd..590db1f 100644
> >>> --- a/src/Makefile.am
> >>> +++ b/src/Makefile.am
> >>> @@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \
> >>> 
> >>> spice_streaming_agent_SOURCES = \
> >>>   spice-streaming-agent.cpp \
> >>> - static-plugin.cpp \
> >>> - static-plugin.hpp \
> >>>   concrete-agent.cpp \
> >>>   concrete-agent.hpp \
> >>>   mjpeg-fallback.cpp \
> >>> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
> >>> index 873a69e..c69da43 100644
> >>> --- a/src/concrete-agent.cpp
> >>> +++ b/src/concrete-agent.cpp
> >>> @@ -11,7 +11,6 @@
> >>> #include 
> >>> 
> >>> #include "concrete-agent.hpp"
> >>> -#include "static-plugin.hpp"
> >>> 
> >>> using namespace std;
> >>> using namespace SpiceStreamingAgent;
> >>> @@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name, const
> >>> char *value)
> >>> 
> >>> void ConcreteAgent::LoadPlugins(const string &directory)
> >>> {
> >>> -StaticPlugin::InitAll(*this);
> >>> -
> >>>string pattern = directory + "/*.so";
> >>>glob_t globbuf;
> >>> 
> >>> diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp
> >>> index 7c918a7..d7c676d 100644
> >>> --- a/src/mjpeg-fallback.cpp
> >>> +++ b/src/mjpeg-fallback.cpp
> >>> @@ -15,7 +15,6 @@
> >>> #include 
> >>> #include 
> >>> 
> >>> -#include "static-plugin.hpp"
> >>> #include "jpeg.hpp"
> >>> 
> >>> using namespace std;
> >>> @@ -191,8 +190,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType()
> >>> const
> >>> {
> >>>return SPICE_VIDEO_CODEC_TYPE_MJPEG;
> >>> }
> >>> 
> >>> -static bool
> >>> -mjpeg_plugin_init(Agent* agent)
> >>> +bool MjpegPlugin::Register(Agent* agent)
> >>> {
> >>>if (agent->Version() != PluginVersion)
> >>>return false;
> >>> @@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent)
> >>> 
> >>>return true;
> >>> }
> >>> -
> >>> -static StaticPlugin mjpeg_plugin(mjpeg_plugin_init);
> >>> diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp
> >>> index 8044244..0e9ed6a 100644
> >>> --- a/src/mjpeg-fallback.hpp
> >>> +++ b/src/mjpeg-fallback.hpp
> >>> @@ -25,6 +25,7 @@ public:
> >>>unsigned Rank() override;
> >>>void ParseOptions(const ConfigureOption *options);
> >>>SpiceVideoCodecType VideoCodecType() const;
> >>> +static bool Register(Agent* agent);
> >>> private:
> >>>MjpegSettings settings = { 10, 80 };
> >>> };
> >>> diff --git a/src/spice-streaming-agent.cpp
> >>> b/src/spice-streaming-agent.cpp
> >>> index 94d9d25..8458975 100644
> >>> --- a/src/spice-streaming-agent.cpp
> >>> +++ b/src/spice-streaming-agent.cpp
> >>> @@ -34,6 +34,7 @@
> >>> 
> >>> #include "hexdump.h"
> >>> #include "concrete-agent.hpp"
> >>> +#include "mjpeg-fallback.hpp"
> >>> 
> >>> using namespace std;
> >>> using namespace SpiceStreamingAgent;
> >>> @@ -489,6 +490,9 @@ int main(int argc, char* argv[])
> >>>}
> >>>}
> >>> 
> >>> +// register built-in plugins
> >>> +MjpegPlugin::Register(&agent);
> >>> +
> >>>agent.LoadPlugins(PLUGINSDIR);
> >>> 
> >>>register_interrupts();
> >>> diff --git a/src/static-plugin.cpp b/src/static-plugin.cpp
> >>> deleted file mode 100644
> >>> index d5feb22..000
> >>> --- a/src/static-plugin.cpp
> >>> +++ /dev/null
> >>> @@ -1,23 +0,0 @@
> >>> -/* Utility to manage registration of plugins compiled statically
> >>> - *
> >>> - * \copyright
> >>> - * Copyright 2017 Red Hat Inc. All rights reserved.
> >>> - */
> >>> -
> >>> -#ifdef HAVE_CONFIG_H
> >>> -#include 
> >>> -#endif
> >>> -
> >>> -#include 
> >>> -#include "static-plugin.hpp"
> >>> -
> >>> -using namespace SpiceStreamingAgent;
> >>> -
> >>> -const StaticPlugin *StaticPlugin::list = nullptr;
> >>> -
> >>> -void StaticPlugin::InitAll(A

Re: [Spice-devel] [PATCH spice-streaming-agent v2 2/2] explicit instead of static registration for built-in plugins

2018-02-06 Thread Christophe de Dinechin


> On 6 Feb 2018, at 10:51, Frediano Ziglio  wrote:
> 
>>> 
>>> On 5 Feb 2018, at 15:29, Lukáš Hrázký  wrote:
>>> 
>>> The static registration (that is, having a static list of pointers to
>>> static plugin variables and calling a generic function in the main
>>> initialization code path to register them) allows to add plugins without
>>> registering each of them explicitly.
>>> 
>>> However, in a single codebase, and having very few plugins, there is
>>> very little advantage to it and the tradeoff for the complexity of this
>>> initialization is not worth it. A single call for every built-in plugin
>>> is much more simple and clear.
>>> 
>>> Signed-off-by: Lukáš Hrázký 
>>> ---
>>> src/Makefile.am   |  2 --
>>> src/concrete-agent.cpp|  3 ---
>>> src/mjpeg-fallback.cpp|  6 +-
>>> src/mjpeg-fallback.hpp|  1 +
>>> src/spice-streaming-agent.cpp |  4 
>>> src/static-plugin.cpp | 23 ---
>>> src/static-plugin.hpp | 35 ---
>>> 7 files changed, 6 insertions(+), 68 deletions(-)
>>> delete mode 100644 src/static-plugin.cpp
>>> delete mode 100644 src/static-plugin.hpp
>>> 
>>> diff --git a/src/Makefile.am b/src/Makefile.am
>>> index 8d5c5bd..590db1f 100644
>>> --- a/src/Makefile.am
>>> +++ b/src/Makefile.am
>>> @@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \
>>> 
>>> spice_streaming_agent_SOURCES = \
>>> spice-streaming-agent.cpp \
>>> -   static-plugin.cpp \
>>> -   static-plugin.hpp \
>>> concrete-agent.cpp \
>>> concrete-agent.hpp \
>>> mjpeg-fallback.cpp \
>>> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
>>> index 873a69e..c69da43 100644
>>> --- a/src/concrete-agent.cpp
>>> +++ b/src/concrete-agent.cpp
>>> @@ -11,7 +11,6 @@
>>> #include 
>>> 
>>> #include "concrete-agent.hpp"
>>> -#include "static-plugin.hpp"
>>> 
>>> using namespace std;
>>> using namespace SpiceStreamingAgent;
>>> @@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name, const
>>> char *value)
>>> 
>>> void ConcreteAgent::LoadPlugins(const string &directory)
>>> {
>>> -StaticPlugin::InitAll(*this);
>>> -
>>>string pattern = directory + "/*.so";
>>>glob_t globbuf;
>>> 
>>> diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp
>>> index 7c918a7..d7c676d 100644
>>> --- a/src/mjpeg-fallback.cpp
>>> +++ b/src/mjpeg-fallback.cpp
>>> @@ -15,7 +15,6 @@
>>> #include 
>>> #include 
>>> 
>>> -#include "static-plugin.hpp"
>>> #include "jpeg.hpp"
>>> 
>>> using namespace std;
>>> @@ -191,8 +190,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType() const
>>> {
>>>return SPICE_VIDEO_CODEC_TYPE_MJPEG;
>>> }
>>> 
>>> -static bool
>>> -mjpeg_plugin_init(Agent* agent)
>>> +bool MjpegPlugin::Register(Agent* agent)
>>> {
>>>if (agent->Version() != PluginVersion)
>>>return false;
>>> @@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent)
>>> 
>>>return true;
>>> }
>>> -
>>> -static StaticPlugin mjpeg_plugin(mjpeg_plugin_init);
>>> diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp
>>> index 8044244..0e9ed6a 100644
>>> --- a/src/mjpeg-fallback.hpp
>>> +++ b/src/mjpeg-fallback.hpp
>>> @@ -25,6 +25,7 @@ public:
>>>unsigned Rank() override;
>>>void ParseOptions(const ConfigureOption *options);
>>>SpiceVideoCodecType VideoCodecType() const;
>>> +static bool Register(Agent* agent);
>>> private:
>>>MjpegSettings settings = { 10, 80 };
>>> };
>>> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
>>> index 94d9d25..8458975 100644
>>> --- a/src/spice-streaming-agent.cpp
>>> +++ b/src/spice-streaming-agent.cpp
>>> @@ -34,6 +34,7 @@
>>> 
>>> #include "hexdump.h"
>>> #include "concrete-agent.hpp"
>>> +#include "mjpeg-fallback.hpp"
>>> 
>>> using namespace std;
>>> using namespace SpiceStreamingAgent;
>>> @@ -489,6 +490,9 @@ int main(int argc, char* argv[])
>>>}
>>>}
>>> 
>>> +// register built-in plugins
>>> +MjpegPlugin::Register(&agent);
>>> +
>>>agent.LoadPlugins(PLUGINSDIR);
>>> 
>>>register_interrupts();
>>> diff --git a/src/static-plugin.cpp b/src/static-plugin.cpp
>>> deleted file mode 100644
>>> index d5feb22..000
>>> --- a/src/static-plugin.cpp
>>> +++ /dev/null
>>> @@ -1,23 +0,0 @@
>>> -/* Utility to manage registration of plugins compiled statically
>>> - *
>>> - * \copyright
>>> - * Copyright 2017 Red Hat Inc. All rights reserved.
>>> - */
>>> -
>>> -#ifdef HAVE_CONFIG_H
>>> -#include 
>>> -#endif
>>> -
>>> -#include 
>>> -#include "static-plugin.hpp"
>>> -
>>> -using namespace SpiceStreamingAgent;
>>> -
>>> -const StaticPlugin *StaticPlugin::list = nullptr;
>>> -
>>> -void StaticPlugin::InitAll(Agent& agent)
>>> -{
>>> -for (const StaticPlugin* plugin = list; plugin; plugin = plugin->next)
>>> {
>>> -plugin->init_func(&agent);
>>> -}
>>> -}
>>> diff --git a/src/static-plugin.hpp b/src/static-plugin.hpp
>>> deleted file mode 100644
>>> index 5436b41..000
>>> --- a/src/stat

Re: [Spice-devel] [PATCH spice-streaming-agent v2 2/2] explicit instead of static registration for built-in plugins

2018-02-06 Thread Frediano Ziglio
>
> > On 5 Feb 2018, at 15:29, Lukáš Hrázký  wrote:
> > 
> > The static registration (that is, having a static list of pointers to
> > static plugin variables and calling a generic function in the main
> > initialization code path to register them) allows to add plugins without
> > registering each of them explicitly.
> > 
> > However, in a single codebase, and having very few plugins, there is
> > very little advantage to it and the tradeoff for the complexity of this
> > initialization is not worth it. A single call for every built-in plugin
> > is much more simple and clear.
> > 
> > Signed-off-by: Lukáš Hrázký 
> > ---
> > src/Makefile.am   |  2 --
> > src/concrete-agent.cpp|  3 ---
> > src/mjpeg-fallback.cpp|  6 +-
> > src/mjpeg-fallback.hpp|  1 +
> > src/spice-streaming-agent.cpp |  4 
> > src/static-plugin.cpp | 23 ---
> > src/static-plugin.hpp | 35 ---
> > 7 files changed, 6 insertions(+), 68 deletions(-)
> > delete mode 100644 src/static-plugin.cpp
> > delete mode 100644 src/static-plugin.hpp
> > 
> > diff --git a/src/Makefile.am b/src/Makefile.am
> > index 8d5c5bd..590db1f 100644
> > --- a/src/Makefile.am
> > +++ b/src/Makefile.am
> > @@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \
> > 
> > spice_streaming_agent_SOURCES = \
> > spice-streaming-agent.cpp \
> > -   static-plugin.cpp \
> > -   static-plugin.hpp \
> > concrete-agent.cpp \
> > concrete-agent.hpp \
> > mjpeg-fallback.cpp \
> > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
> > index 873a69e..c69da43 100644
> > --- a/src/concrete-agent.cpp
> > +++ b/src/concrete-agent.cpp
> > @@ -11,7 +11,6 @@
> > #include 
> > 
> > #include "concrete-agent.hpp"
> > -#include "static-plugin.hpp"
> > 
> > using namespace std;
> > using namespace SpiceStreamingAgent;
> > @@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name, const
> > char *value)
> > 
> > void ConcreteAgent::LoadPlugins(const string &directory)
> > {
> > -StaticPlugin::InitAll(*this);
> > -
> > string pattern = directory + "/*.so";
> > glob_t globbuf;
> > 
> > diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp
> > index 7c918a7..d7c676d 100644
> > --- a/src/mjpeg-fallback.cpp
> > +++ b/src/mjpeg-fallback.cpp
> > @@ -15,7 +15,6 @@
> > #include 
> > #include 
> > 
> > -#include "static-plugin.hpp"
> > #include "jpeg.hpp"
> > 
> > using namespace std;
> > @@ -191,8 +190,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType() const
> > {
> > return SPICE_VIDEO_CODEC_TYPE_MJPEG;
> > }
> > 
> > -static bool
> > -mjpeg_plugin_init(Agent* agent)
> > +bool MjpegPlugin::Register(Agent* agent)
> > {
> > if (agent->Version() != PluginVersion)
> > return false;
> > @@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent)
> > 
> > return true;
> > }
> > -
> > -static StaticPlugin mjpeg_plugin(mjpeg_plugin_init);
> > diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp
> > index 8044244..0e9ed6a 100644
> > --- a/src/mjpeg-fallback.hpp
> > +++ b/src/mjpeg-fallback.hpp
> > @@ -25,6 +25,7 @@ public:
> > unsigned Rank() override;
> > void ParseOptions(const ConfigureOption *options);
> > SpiceVideoCodecType VideoCodecType() const;
> > +static bool Register(Agent* agent);
> > private:
> > MjpegSettings settings = { 10, 80 };
> > };
> > diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
> > index 94d9d25..8458975 100644
> > --- a/src/spice-streaming-agent.cpp
> > +++ b/src/spice-streaming-agent.cpp
> > @@ -34,6 +34,7 @@
> > 
> > #include "hexdump.h"
> > #include "concrete-agent.hpp"
> > +#include "mjpeg-fallback.hpp"
> > 
> > using namespace std;
> > using namespace SpiceStreamingAgent;
> > @@ -489,6 +490,9 @@ int main(int argc, char* argv[])
> > }
> > }
> > 
> > +// register built-in plugins
> > +MjpegPlugin::Register(&agent);
> > +
> > agent.LoadPlugins(PLUGINSDIR);
> > 
> > register_interrupts();
> > diff --git a/src/static-plugin.cpp b/src/static-plugin.cpp
> > deleted file mode 100644
> > index d5feb22..000
> > --- a/src/static-plugin.cpp
> > +++ /dev/null
> > @@ -1,23 +0,0 @@
> > -/* Utility to manage registration of plugins compiled statically
> > - *
> > - * \copyright
> > - * Copyright 2017 Red Hat Inc. All rights reserved.
> > - */
> > -
> > -#ifdef HAVE_CONFIG_H
> > -#include 
> > -#endif
> > -
> > -#include 
> > -#include "static-plugin.hpp"
> > -
> > -using namespace SpiceStreamingAgent;
> > -
> > -const StaticPlugin *StaticPlugin::list = nullptr;
> > -
> > -void StaticPlugin::InitAll(Agent& agent)
> > -{
> > -for (const StaticPlugin* plugin = list; plugin; plugin = plugin->next)
> > {
> > -plugin->init_func(&agent);
> > -}
> > -}
> > diff --git a/src/static-plugin.hpp b/src/static-plugin.hpp
> > deleted file mode 100644
> > index 5436b41..000
> > --- a/src/static-plugin.hpp
> > +++ /dev/null
> > @@ -1,35 

Re: [Spice-devel] [PATCH spice-streaming-agent v2 2/2] explicit instead of static registration for built-in plugins

2018-02-05 Thread Christophe de Dinechin


> On 5 Feb 2018, at 15:29, Lukáš Hrázký  wrote:
> 
> The static registration (that is, having a static list of pointers to
> static plugin variables and calling a generic function in the main
> initialization code path to register them) allows to add plugins without
> registering each of them explicitly.
> 
> However, in a single codebase, and having very few plugins, there is
> very little advantage to it and the tradeoff for the complexity of this
> initialization is not worth it. A single call for every built-in plugin
> is much more simple and clear.
> 
> Signed-off-by: Lukáš Hrázký 
> ---
> src/Makefile.am   |  2 --
> src/concrete-agent.cpp|  3 ---
> src/mjpeg-fallback.cpp|  6 +-
> src/mjpeg-fallback.hpp|  1 +
> src/spice-streaming-agent.cpp |  4 
> src/static-plugin.cpp | 23 ---
> src/static-plugin.hpp | 35 ---
> 7 files changed, 6 insertions(+), 68 deletions(-)
> delete mode 100644 src/static-plugin.cpp
> delete mode 100644 src/static-plugin.hpp
> 
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 8d5c5bd..590db1f 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \
> 
> spice_streaming_agent_SOURCES = \
>   spice-streaming-agent.cpp \
> - static-plugin.cpp \
> - static-plugin.hpp \
>   concrete-agent.cpp \
>   concrete-agent.hpp \
>   mjpeg-fallback.cpp \
> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
> index 873a69e..c69da43 100644
> --- a/src/concrete-agent.cpp
> +++ b/src/concrete-agent.cpp
> @@ -11,7 +11,6 @@
> #include 
> 
> #include "concrete-agent.hpp"
> -#include "static-plugin.hpp"
> 
> using namespace std;
> using namespace SpiceStreamingAgent;
> @@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name, const char 
> *value)
> 
> void ConcreteAgent::LoadPlugins(const string &directory)
> {
> -StaticPlugin::InitAll(*this);
> -
> string pattern = directory + "/*.so";
> glob_t globbuf;
> 
> diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp
> index 7c918a7..d7c676d 100644
> --- a/src/mjpeg-fallback.cpp
> +++ b/src/mjpeg-fallback.cpp
> @@ -15,7 +15,6 @@
> #include 
> #include 
> 
> -#include "static-plugin.hpp"
> #include "jpeg.hpp"
> 
> using namespace std;
> @@ -191,8 +190,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType() const {
> return SPICE_VIDEO_CODEC_TYPE_MJPEG;
> }
> 
> -static bool
> -mjpeg_plugin_init(Agent* agent)
> +bool MjpegPlugin::Register(Agent* agent)
> {
> if (agent->Version() != PluginVersion)
> return false;
> @@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent)
> 
> return true;
> }
> -
> -static StaticPlugin mjpeg_plugin(mjpeg_plugin_init);
> diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp
> index 8044244..0e9ed6a 100644
> --- a/src/mjpeg-fallback.hpp
> +++ b/src/mjpeg-fallback.hpp
> @@ -25,6 +25,7 @@ public:
> unsigned Rank() override;
> void ParseOptions(const ConfigureOption *options);
> SpiceVideoCodecType VideoCodecType() const;
> +static bool Register(Agent* agent);
> private:
> MjpegSettings settings = { 10, 80 };
> };
> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
> index 94d9d25..8458975 100644
> --- a/src/spice-streaming-agent.cpp
> +++ b/src/spice-streaming-agent.cpp
> @@ -34,6 +34,7 @@
> 
> #include "hexdump.h"
> #include "concrete-agent.hpp"
> +#include "mjpeg-fallback.hpp"
> 
> using namespace std;
> using namespace SpiceStreamingAgent;
> @@ -489,6 +490,9 @@ int main(int argc, char* argv[])
> }
> }
> 
> +// register built-in plugins
> +MjpegPlugin::Register(&agent);
> +
> agent.LoadPlugins(PLUGINSDIR);
> 
> register_interrupts();
> diff --git a/src/static-plugin.cpp b/src/static-plugin.cpp
> deleted file mode 100644
> index d5feb22..000
> --- a/src/static-plugin.cpp
> +++ /dev/null
> @@ -1,23 +0,0 @@
> -/* Utility to manage registration of plugins compiled statically
> - *
> - * \copyright
> - * Copyright 2017 Red Hat Inc. All rights reserved.
> - */
> -
> -#ifdef HAVE_CONFIG_H
> -#include 
> -#endif
> -
> -#include 
> -#include "static-plugin.hpp"
> -
> -using namespace SpiceStreamingAgent;
> -
> -const StaticPlugin *StaticPlugin::list = nullptr;
> -
> -void StaticPlugin::InitAll(Agent& agent)
> -{
> -for (const StaticPlugin* plugin = list; plugin; plugin = plugin->next) {
> -plugin->init_func(&agent);
> -}
> -}
> diff --git a/src/static-plugin.hpp b/src/static-plugin.hpp
> deleted file mode 100644
> index 5436b41..000
> --- a/src/static-plugin.hpp
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -/* Utility to manage registration of plugins compiled statically
> - *
> - * \copyright
> - * Copyright 2017 Red Hat Inc. All rights reserved.
> - */
> -#ifndef SPICE_STREAMING_AGENT_STATIC_PLUGIN_HPP
> -#define SPICE_STREAMING_AGENT_STATIC_PLUGIN_HPP
> -
> -#include 
> -
> -namespace SpiceStreami

[Spice-devel] [PATCH spice-streaming-agent v2 2/2] explicit instead of static registration for built-in plugins

2018-02-05 Thread Lukáš Hrázký
The static registration (that is, having a static list of pointers to
static plugin variables and calling a generic function in the main
initialization code path to register them) allows to add plugins without
registering each of them explicitly.

However, in a single codebase, and having very few plugins, there is
very little advantage to it and the tradeoff for the complexity of this
initialization is not worth it. A single call for every built-in plugin
is much more simple and clear.

Signed-off-by: Lukáš Hrázký 
---
 src/Makefile.am   |  2 --
 src/concrete-agent.cpp|  3 ---
 src/mjpeg-fallback.cpp|  6 +-
 src/mjpeg-fallback.hpp|  1 +
 src/spice-streaming-agent.cpp |  4 
 src/static-plugin.cpp | 23 ---
 src/static-plugin.hpp | 35 ---
 7 files changed, 6 insertions(+), 68 deletions(-)
 delete mode 100644 src/static-plugin.cpp
 delete mode 100644 src/static-plugin.hpp

diff --git a/src/Makefile.am b/src/Makefile.am
index 8d5c5bd..590db1f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -49,8 +49,6 @@ spice_streaming_agent_LDADD = \
 
 spice_streaming_agent_SOURCES = \
spice-streaming-agent.cpp \
-   static-plugin.cpp \
-   static-plugin.hpp \
concrete-agent.cpp \
concrete-agent.hpp \
mjpeg-fallback.cpp \
diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
index 873a69e..c69da43 100644
--- a/src/concrete-agent.cpp
+++ b/src/concrete-agent.cpp
@@ -11,7 +11,6 @@
 #include 
 
 #include "concrete-agent.hpp"
-#include "static-plugin.hpp"
 
 using namespace std;
 using namespace SpiceStreamingAgent;
@@ -58,8 +57,6 @@ void ConcreteAgent::AddOption(const char *name, const char 
*value)
 
 void ConcreteAgent::LoadPlugins(const string &directory)
 {
-StaticPlugin::InitAll(*this);
-
 string pattern = directory + "/*.so";
 glob_t globbuf;
 
diff --git a/src/mjpeg-fallback.cpp b/src/mjpeg-fallback.cpp
index 7c918a7..d7c676d 100644
--- a/src/mjpeg-fallback.cpp
+++ b/src/mjpeg-fallback.cpp
@@ -15,7 +15,6 @@
 #include 
 #include 
 
-#include "static-plugin.hpp"
 #include "jpeg.hpp"
 
 using namespace std;
@@ -191,8 +190,7 @@ SpiceVideoCodecType MjpegPlugin::VideoCodecType() const {
 return SPICE_VIDEO_CODEC_TYPE_MJPEG;
 }
 
-static bool
-mjpeg_plugin_init(Agent* agent)
+bool MjpegPlugin::Register(Agent* agent)
 {
 if (agent->Version() != PluginVersion)
 return false;
@@ -205,5 +203,3 @@ mjpeg_plugin_init(Agent* agent)
 
 return true;
 }
-
-static StaticPlugin mjpeg_plugin(mjpeg_plugin_init);
diff --git a/src/mjpeg-fallback.hpp b/src/mjpeg-fallback.hpp
index 8044244..0e9ed6a 100644
--- a/src/mjpeg-fallback.hpp
+++ b/src/mjpeg-fallback.hpp
@@ -25,6 +25,7 @@ public:
 unsigned Rank() override;
 void ParseOptions(const ConfigureOption *options);
 SpiceVideoCodecType VideoCodecType() const;
+static bool Register(Agent* agent);
 private:
 MjpegSettings settings = { 10, 80 };
 };
diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index 94d9d25..8458975 100644
--- a/src/spice-streaming-agent.cpp
+++ b/src/spice-streaming-agent.cpp
@@ -34,6 +34,7 @@
 
 #include "hexdump.h"
 #include "concrete-agent.hpp"
+#include "mjpeg-fallback.hpp"
 
 using namespace std;
 using namespace SpiceStreamingAgent;
@@ -489,6 +490,9 @@ int main(int argc, char* argv[])
 }
 }
 
+// register built-in plugins
+MjpegPlugin::Register(&agent);
+
 agent.LoadPlugins(PLUGINSDIR);
 
 register_interrupts();
diff --git a/src/static-plugin.cpp b/src/static-plugin.cpp
deleted file mode 100644
index d5feb22..000
--- a/src/static-plugin.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Utility to manage registration of plugins compiled statically
- *
- * \copyright
- * Copyright 2017 Red Hat Inc. All rights reserved.
- */
-
-#ifdef HAVE_CONFIG_H
-#include 
-#endif
-
-#include 
-#include "static-plugin.hpp"
-
-using namespace SpiceStreamingAgent;
-
-const StaticPlugin *StaticPlugin::list = nullptr;
-
-void StaticPlugin::InitAll(Agent& agent)
-{
-for (const StaticPlugin* plugin = list; plugin; plugin = plugin->next) {
-plugin->init_func(&agent);
-}
-}
diff --git a/src/static-plugin.hpp b/src/static-plugin.hpp
deleted file mode 100644
index 5436b41..000
--- a/src/static-plugin.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Utility to manage registration of plugins compiled statically
- *
- * \copyright
- * Copyright 2017 Red Hat Inc. All rights reserved.
- */
-#ifndef SPICE_STREAMING_AGENT_STATIC_PLUGIN_HPP
-#define SPICE_STREAMING_AGENT_STATIC_PLUGIN_HPP
-
-#include 
-
-namespace SpiceStreamingAgent {
-
-class StaticPlugin final {
-public:
-StaticPlugin(PluginInitFunc init_func):
-next(list),
-init_func(init_func)
-{
-list = this;
-}
-static void InitAll(Agent& agent);
-private:
-// this should be instantiated statically
-void *operator new(size_t s);
-