After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 523806 - Should use G_PARAM_STATIC_(NAME|NICK|BLURB) when possible
Should use G_PARAM_STATIC_(NAME|NICK|BLURB) when possible
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gstreamer (core)
git master
Other Linux
: Normal minor
: 0.10.20
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2008-03-22 08:10 UTC by Sebastian Dröge (slomo)
Modified: 2008-04-03 15:17 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
static-property-strings-core.patch (52.90 KB, patch)
2008-03-22 11:39 UTC, Sebastian Dröge (slomo)
committed Details | Review
static-property-strings-base.patch (110.74 KB, patch)
2008-03-22 13:17 UTC, Sebastian Dröge (slomo)
none Details | Review
static-property-strings-base.patch (111.76 KB, patch)
2008-03-22 13:34 UTC, Sebastian Dröge (slomo)
committed Details | Review

Description Sebastian Dröge (slomo) 2008-03-22 08:10:11 UTC
Hi,
currently we don't use G_PARAM_STATIC_(NAME|NICK|BLURB) anywhere when installing a property. When using string literals or static strings this would save use one allocation and one free for every string.

Does anybody see problems with this? For the docs see http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamFlags


Also I would propose to add

#ifndef G_PARAM_STATIC_STRINGS
#define G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)
#endif

as for most cases all 3 strings should be static and G_PARAM_STATIC_STRINGS was added to glib with 2.13 (and we will depend only on 2.12 in a few days).
Comment 1 Stefan Sauer (gstreamer, gtkdoc dev) 2008-03-22 09:21:34 UTC
Yep, when I added G_PARAM_STATIC_STRINGS to glib, we discussed that most apps could easily define the fallback if its not defined. We also require glib-2.8, which is where the single defines have been added.
Comment 2 Sebastian Dröge (slomo) 2008-03-22 09:28:39 UTC
Ok, I'll do that in core/base then and define _STATIC_STRINGS in glib-compat.h.

For good/bad/ugly/ffmpeg/gnonlin we have to wait until we can update the core dependency to the version with _STATIC_STRINGS in glib-compat.h.
Comment 3 Sebastian Dröge (slomo) 2008-03-22 10:53:16 UTC
This can be even done when the strings are localized, great :)
Comment 4 Sebastian Dröge (slomo) 2008-03-22 11:39:12 UTC
Created attachment 107791 [details] [review]
static-property-strings-core.patch

patch for core, also making some property nicks canonical (i.e. this_is_a_property => this-is-a-property). This doesn't break ABI because GObject already transformed the underscore to a dash for us.
Comment 5 Sebastian Dröge (slomo) 2008-03-22 13:17:25 UTC
Created attachment 107800 [details] [review]
static-property-strings-base.patch

same patch for base
Comment 6 Sebastian Dröge (slomo) 2008-03-22 13:34:35 UTC
Created attachment 107802 [details] [review]
static-property-strings-base.patch
Comment 7 Sebastian Dröge (slomo) 2008-03-22 14:55:49 UTC
2008-03-22  Sebastian Dröge  <slomo@circular-chaos.org>

	* docs/pwg/advanced-dparams.xml:
	* docs/pwg/building-props.xml:
	* docs/pwg/other-source.xml:
	* gst/glib-compat.h:
	* gst/gstbin.c: (gst_bin_class_init):
	* gst/gstclock.c: (gst_clock_class_init):
	* gst/gstindex.c: (gst_index_class_init):
	* gst/gstobject.c: (gst_object_class_init):
	* gst/gstpad.c: (gst_pad_class_init):
	* gst/gstpipeline.c: (gst_pipeline_class_init):
	* libs/gst/base/gstbasesink.c: (gst_base_sink_class_init):
	* libs/gst/base/gstbasesrc.c: (gst_base_src_class_init):
	* libs/gst/base/gstbasetransform.c:
	(gst_base_transform_class_init):
	* libs/gst/base/gstdataqueue.c: (gst_data_queue_class_init):
	* libs/gst/check/gstcheck.c: (_gst_check_fault_handler_restore),
	(_gst_check_fault_handler_sighandler),
	(_gst_check_fault_handler_setup), (gst_check_init):
	* libs/gst/controller/gstcontroller.c:
	(_gst_controller_class_init):
	* libs/gst/controller/gstlfocontrolsource.c:
	(gst_lfo_control_source_class_init):
	* libs/gst/net/gstnetclientclock.c:
	(gst_net_client_clock_class_init):
	* libs/gst/net/gstnettimeprovider.c:
	(gst_net_time_provider_class_init):
	* plugins/elements/gstcapsfilter.c: (gst_capsfilter_class_init):
	* plugins/elements/gstfakesink.c: (gst_fake_sink_class_init):
	* plugins/elements/gstfakesrc.c: (gst_fake_src_class_init):
	* plugins/elements/gstfdsink.c: (gst_fd_sink_class_init):
	* plugins/elements/gstfdsrc.c: (gst_fd_src_class_init):
	* plugins/elements/gstfilesink.c: (gst_file_sink_class_init):
	* plugins/elements/gstfilesrc.c: (gst_file_src_class_init):
	* plugins/elements/gstidentity.c: (gst_identity_class_init):
	* plugins/elements/gstmultiqueue.c: (gst_multi_queue_class_init):
	* plugins/elements/gstqueue.c: (gst_queue_class_init):
	* plugins/elements/gsttee.c: (gst_tee_class_init):
	* plugins/elements/gsttypefindelement.c:
	(gst_type_find_element_class_init):
	* plugins/indexers/gstfileindex.c: (gst_file_index_class_init):
	Define G_PARAM_STATIC_STRINGS if it's undefined (GLib < 2.13.0) and
	use it everywhere for GParamSpecs that use static strings (i.e. all).
	This gives us less memory usage, fewer allocations and thus less
	memory defragmentation. Fixes bug #523806.
Comment 8 Sebastian Dröge (slomo) 2008-03-22 15:00:47 UTC
2008-03-22  Sebastian Dröge  <slomo@circular-chaos.org>

	* configure.ac:
	* ext/alsa/gstalsamixerelement.c:
	(gst_alsa_mixer_element_class_init):
	* ext/alsa/gstalsasink.c: (gst_alsasink_class_init):
	* ext/alsa/gstalsasrc.c: (gst_alsasrc_class_init):
	* ext/cdparanoia/gstcdparanoiasrc.c:
	(gst_cd_paranoia_src_class_init):
	* ext/gio/gstgiosink.c: (gst_gio_sink_class_init):
	* ext/gio/gstgiosrc.c: (gst_gio_src_class_init):
	* ext/gio/gstgiostreamsink.c: (gst_gio_stream_sink_class_init):
	* ext/gio/gstgiostreamsrc.c: (gst_gio_stream_src_class_init):
	* ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_class_init):
	* ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init):
	* ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init):
	* ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init):
	* ext/pango/gsttextrender.c: (gst_text_render_class_init):
	* ext/theora/theoradec.c: (gst_theora_dec_class_init):
	* ext/theora/theoraenc.c: (gst_theora_enc_class_init):
	* ext/theora/theoraparse.c: (gst_theora_parse_class_init):
	* ext/vorbis/vorbisenc.c: (gst_vorbis_enc_class_init):
	* gst-libs/gst/audio/gstaudiofiltertemplate.c:
	(gst_audio_filter_template_class_init):
	* gst-libs/gst/audio/gstbaseaudiosink.c:
	(gst_base_audio_sink_class_init):
	* gst-libs/gst/audio/gstbaseaudiosrc.c:
	(gst_base_audio_src_class_init):
	* gst-libs/gst/cdda/gstcddabasesrc.c:
	(gst_cdda_base_src_class_init):
	* gst-libs/gst/interfaces/mixertrack.c:
	(gst_mixer_track_class_init):
	* gst-libs/gst/rtp/gstbasertpdepayload.c:
	(gst_base_rtp_depayload_class_init):
	* gst-libs/gst/rtp/gstbasertppayload.c:
	(gst_basertppayload_class_init):
	* gst/audioconvert/gstaudioconvert.c:
	(gst_audio_convert_class_init):
	* gst/audiorate/gstaudiorate.c: (gst_audio_rate_class_init):
	* gst/audioresample/gstaudioresample.c:
	(gst_audioresample_class_init):
	* gst/audiotestsrc/gstaudiotestsrc.c:
	(gst_audio_test_src_class_init):
	* gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init):
	* gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init):
	* gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
	(preroll_unlinked):
	* gst/playback/gstplaybin.c: (gst_play_bin_class_init):
	* gst/playback/gstplaybin2.c: (gst_play_bin_class_init):
	* gst/playback/gstplaysink.c: (gst_play_sink_class_init):
	* gst/playback/gstqueue2.c: (gst_queue_class_init):
	* gst/playback/gststreaminfo.c: (gst_stream_info_class_init):
	* gst/playback/gststreamselector.c: (gst_selector_pad_class_init),
	(gst_stream_selector_class_init):
	* gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init):
	* gst/subparse/gstsubparse.c: (gst_sub_parse_class_init):
	* gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
	* gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_class_init):
	* gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_class_init):
	* gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_class_init):
	* gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_class_init):
	* gst/videorate/gstvideorate.c: (gst_video_rate_class_init):
	* gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init):
	* gst/videotestsrc/gstvideotestsrc.c:
	(gst_video_test_src_class_init):
	* gst/volume/gstvolume.c: (gst_volume_class_init):
	* sys/v4l/gstv4lelement.c: (gst_v4lelement_class_init):
	* sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
	* sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
	* sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init):
	* sys/ximage/ximagesink.c: (gst_ximagesink_class_init):
	* sys/xvimage/xvimagesink.c: (gst_xvimagesink_class_init):
	Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use
	static strings (i.e. all). This gives us less memory usage,
	fewer allocations and thus less memory defragmentation. Depend
	on core CVS for this. Fixes bug #523806.
Comment 9 Sebastian Dröge (slomo) 2008-03-22 15:03:17 UTC
I'll care for good/bad/ugly/ffmpeg/gnonlin/gl in April and May after the next releases...