[Spice-devel] [PATCH v3 13/51] Add new_ett function to be able to create new trees

Christophe Fergeau cfergeau at redhat.com
Thu Jul 23 06:12:56 PDT 2015


On Tue, Jul 21, 2015 at 05:45:43PM +0100, Frediano Ziglio wrote:
> Use an array to declare tree items instead of allocating it statically.
> This save a bit of memory and it also generate smaller code to read.

'generates'

> A tree in wireshark represent an item which could be expanded.

'represents'

> Possibly wireshark is using these registrations to save expansion
> state in the user interface.

(I can adjust the logs before pushing actually if that's more convenient
for you).

Christophe

> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  codegen/dissector_test.c    | 13 +++++++++++++
>  python_modules/dissector.py | 28 ++++++++++++++++++++++++++++
>  2 files changed, 41 insertions(+)
> 
> diff --git a/codegen/dissector_test.c b/codegen/dissector_test.c
> index 6189da0..3212655 100644
> --- a/codegen/dissector_test.c
> +++ b/codegen/dissector_test.c
> @@ -13,9 +13,11 @@
>  enum {
>  	first_hf_registered = 0x10000,
>  	first_ei_registered = 0x20000,
> +	first_tree_registered = 0x30000,
>  };
>  static int last_hf_registered = first_hf_registered - 1;
>  static int last_ei_registered = first_ei_registered - 1;
> +static int last_tree_registered = first_tree_registered - 1;
>  
>  WS_DLL_PUBLIC void
>  proto_register_field_array(const int parent, hf_register_info *hf, const int num_records)
> @@ -31,6 +33,17 @@ proto_register_field_array(const int parent, hf_register_info *hf, const int num
>  }
>  
>  WS_DLL_PUBLIC void
> +proto_register_subtree_array(gint *const *indices, const int num_indices)
> +{
> +	int i;
> +	assert(num_indices >= 0);
> +	for (i = 0; i < num_indices; ++i) {
> +		assert(indices && *indices[i] == -1);
> +		*indices[i] = ++last_tree_registered;
> +	}
> +}
> +
> +WS_DLL_PUBLIC void
>  expert_register_field_array(expert_module_t* module, ei_register_info *ei, const int num_records)
>  {
>  	int i;
> diff --git a/python_modules/dissector.py b/python_modules/dissector.py
> index 45f8737..52234fc 100644
> --- a/python_modules/dissector.py
> +++ b/python_modules/dissector.py
> @@ -2,6 +2,22 @@
>  from . import codegen
>  import re
>  
> +
> +# generate a new tree identifier
> +ett_writer = None
> +ett_num = 0
> +def new_ett(writer):
> +    global ett_writer
> +    global ett_num
> +
> +    if ett_num and ett_num % 16 == 0:
> +        ett_writer.newline()
> +    name = 'etts[%u]' % ett_num
> +    ett_num = ett_num + 1
> +    ett_writer.write('-1, ')
> +    return name
> +
> +
>  hf_writer = None
>  hf_defs = None
>  
> @@ -54,6 +70,10 @@ def write_protocol_definitions(writer):
>      writer.newline()
>      writer.function('spice_register_fields', 'void', 'int proto, expert_module_t* expert_proto')
>  
> +    writer.variable_def('guint', 'n');
> +    writer.variable_def('gint *', 'ett[array_length(etts)]')
> +    writer.newline()
> +
>      writer.write("static hf_register_info hf[] = ")
>      writer.begin_block()
>      hf_defs = writer.get_subwriter()
> @@ -66,17 +86,25 @@ def write_protocol_definitions(writer):
>      writer.end_block(semicolon = True)
>      writer.newline()
>  
> +    with writer.for_loop('n', 'array_length(etts)'):
> +        writer.assign('ett[n]', '&etts[n]')
> +
>      writer.statement('proto_register_field_array(proto, hf, array_length(hf))')
> +    writer.statement('proto_register_subtree_array(ett, array_length(etts))')
>      writer.statement('expert_register_field_array(expert_proto, ei, array_length(ei))')
>      writer.end_block()
>  
>  
>  def write_protocol_parser(writer, proto):
>      global hf_writer
> +    global ett_writer
>  
>      write_parser_helpers(writer)
>  
>      # put fields declaration first
> +    with writer.block('static gint etts[] =', semicolon=True) as scope:
> +        ett_writer = scope
> +        writer.newline()
>      hf_writer = writer.get_subwriter()
>  
>      # put fields definition at last
> -- 
> 2.1.0
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150723/601ef41f/attachment.sig>


More information about the Spice-devel mailing list