scripts: Optimize expensive xml lookups

4x speedup in codegen by fetching type information ahead of time instead
of doing repeated ad-hoc queries on the whole tree

Change-Id: Iba5625b830aa09baaf21f1eb16957d2f67d5d24a
diff --git a/scripts/layer_chassis_generator.py b/scripts/layer_chassis_generator.py
index 82a2486..ca9c31b 100644
--- a/scripts/layer_chassis_generator.py
+++ b/scripts/layer_chassis_generator.py
@@ -1502,23 +1502,17 @@
 
     # Check if an object is a non-dispatchable handle
     def isHandleTypeNonDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_NON_DISPATCHABLE_HANDLE':
-            return True
-        else:
-            return False
+        return self.handle_types.get(handletype) == 'VK_DEFINE_NON_DISPATCHABLE_HANDLE'
 
     # Check if an object is a dispatchable handle
     def isHandleTypeDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_HANDLE':
-            return True
-        else:
-            return False
+        return self.handle_types.get(handletype) == 'VK_DEFINE_HANDLE'
     #
     #
     def beginFile(self, genOpts):
         OutputGenerator.beginFile(self, genOpts)
+        # Initialize members that require the tree
+        self.handle_types = GetHandleTypes(self.registry.tree)
         # Output Copyright
         write(self.inline_copyright_message, file=self.outFile)
         # Multiple inclusion protection