[Mesa-dev] [PATCH 5/6] vulkan: enum generator: Stop using iterparse
Jason Ekstrand
jason at jlekstrand.net
Thu Sep 21 19:11:22 UTC 2017
On Thu, Sep 21, 2017 at 10:34 AM, Dylan Baker <dylan at pnwbakers.com> wrote:
> Quoting Jason Ekstrand (2017-09-21 08:32:22)
> > While using iterparse is potentially a little more efficient, the Vulkan
> > registry XML is not large and using regular element tree simplifies the
> > parsing logic substantially.
> > ---
> > src/vulkan/util/gen_enum_to_str.py | 41 +++++++++++++++---------------
> --------
> > 1 file changed, 16 insertions(+), 25 deletions(-)
> >
> > diff --git a/src/vulkan/util/gen_enum_to_str.py
> b/src/vulkan/util/gen_enum_to_str.py
> > index 8f32102..e5f8964 100644
> > --- a/src/vulkan/util/gen_enum_to_str.py
> > +++ b/src/vulkan/util/gen_enum_to_str.py
> > @@ -157,31 +157,22 @@ def parse_xml(enum_factory, ext_factory, filename):
> > of VkEnum objects.
> > """
> >
> > - with open(filename, 'rb') as f:
> > - context = iter(et.iterparse(f, events=('start', 'end')))
> > -
> > - # This gives the root element, since goal is to iterate over the
> > - # elements without building a tree, this allows the root to be
> cleared
> > - # (erase the elements) after the children have been processed.
> > - _, root = next(context)
> > -
> > - for event, elem in context:
> > - if event == 'end' and elem.tag == 'enums':
> > - type_ = elem.attrib.get('type')
> > - if type_ == 'enum':
> > - enum = enum_factory(elem.attrib['name'])
> > - enum.values.extend([e.attrib['name'] for e in elem
> > - if e.tag == 'enum'])
> > - elif event == 'start' and elem.tag == 'extension':
> > - ext_factory(elem.attrib['name'],
> int(elem.attrib['number']))
> > - elif event == 'end' and elem.tag == 'extension':
> > - if elem.attrib['supported'] != 'vulkan':
> > - continue
> > - for e in elem.findall('.//enum[@extends][@offset]'):
> > - enum = enum_factory(e.attrib['extends'])
> > - enum.values.append(e.attrib['name'],)
> > -
> > - root.clear()
> > + xml = et.parse(filename)
> > +
> > + for enum_type in xml.findall('./enums'):
> > + if enum_type.attrib.get('type') != 'enum':
> > + continue
>
> please do not use continue for iterating xlm. xpath is more than capable of
> representing this in less code, and it's implemented in C so it will be
> much
> faster.
>
> for enum_type in xml.findall('./enums[@type="enum"]')
>
Done.
> > +
> > + enum = enum_factory(enum_type.attrib['name'])
> > + for value in enum_type.findall('./enum'):
> > + enum.values.append(value.attrib['name'])
> > +
> > + for ext_elem in xml.findall('./extension'):
> > + if ext_elem.attrib['supported'] != 'vulkan':
> > + continue
>
> please do the same thing here.
>
Done.
> > +
> > + ext_factory(ext_elem.attrib['name'],
> > + int(ext_elem.attrib['number']))
> >
> > def main():
> > parser = argparse.ArgumentParser()
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170921/bd42b88f/attachment.html>
More information about the mesa-dev
mailing list