svghmi/svghmi.py
branchsvghmi
changeset 3170 aaa203270ab0
parent 3167 001f63ff3aaa
child 3176 81136a097012
--- a/svghmi/svghmi.py	Mon Mar 01 15:45:13 2021 +0100
+++ b/svghmi/svghmi.py	Mon Mar 01 15:46:23 2021 +0100
@@ -430,14 +430,6 @@
         #self.HMITreeView = HMITreeView(self)
         return HMITreeSelector(parent)
 
-def _ProgressArgs(args):
-    if len(args) == 2:
-        key, message = args
-    else:
-        key, = args
-        message = key
-    return str(key), str(message), time.time()
-
 class SVGHMI(object):
     XSD = """<?xml version="1.0" encoding="utf-8" ?>
     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
@@ -506,7 +498,7 @@
         return True
 
     def GetSVGGeometry(self):
-        t = time.time()
+        self.ProgressStart("inkscape", "collecting SVG geometry (Inkscape)")
         # invoke inskscape -S, csv-parse output, produce elements
         InkscapeGeomColumns = ["Id", "x", "y", "w", "h"]
 
@@ -531,23 +523,22 @@
 
             res.append(etree.Element("bbox", **attrs))
 
-        self.GetCTRoot().logger.write("    Start collecting SVG geometry (Inkscape)\n")
-        self.GetCTRoot().logger.write("    Finished collecting SVG geometry (Inkscape) in %.3fs\n"%(time.time()-t))
+        self.ProgressEnd("inkscape")
         return res
 
     def GetHMITree(self):
         global hmi_tree_root
-        t = time.time()
+        self.ProgressStart("hmitree", "getting HMI tree")
         res = [hmi_tree_root.etree(add_hash=True)]
-        self.GetCTRoot().logger.write("    Start getting HMI tree\n")
-        self.GetCTRoot().logger.write("    Fnished getting HMI tree in %.3fs\n"%(time.time()-t))
+        self.ProgressEnd("hmitree")
         return res
 
     def GetTranslations(self, _context, msgs):
-        t = time.time()
+        self.ProgressStart("i18n", "getting Translations")
         messages = EtreeToMessages(msgs)
 
         if len(messages) == 0:
+            self.ProgressEnd("i18n")
             return
 
         SaveCatalog(self._getPOTpath(), messages)
@@ -559,23 +550,22 @@
 
         ret = TranslationToEtree(langs,translated_messages)
 
-        self.GetCTRoot().logger.write("    Start getting Translations\n")
-        self.GetCTRoot().logger.write("    Finished getting Translations in %.3fs\n"%(time.time()-t))
+        self.ProgressEnd("i18n")
 
         return ret
 
-    times = {}
-
-    def ProgressStart(self, _context, *args):
-        k,m,t = _ProgressArgs(args)
-        self.times[k] = t
-        # self.GetCTRoot().logger.write("  Start %s: %.3f\n"%(m, t - self.transform_begin))
-        self.GetCTRoot().logger.write("    Start %s\n"%m)
-
-    def ProgressEnd(self, _context, *args):
-        k,m,t = _ProgressArgs(args)
-        self.GetCTRoot().logger.write("    Finished %s in %.3f\n"%(m, t - self.times[k]))
-        self.times[k] = t
+    times_msgs = {}
+    indent = 1
+    def ProgressStart(self, k, m):
+        self.times_msgs[k] = (time.time(), m)
+        self.GetCTRoot().logger.write("    "*self.indent + "Start %s...\n"%m)
+        self.indent = self.indent + 1
+
+    def ProgressEnd(self, k):
+        t = time.time()
+        oldt, m = self.times_msgs[k]
+        self.indent = self.indent - 1
+        self.GetCTRoot().logger.write("    "*self.indent + "... finished in %.3fs\n"%(t - oldt))
 
     def CTNGenerate_C(self, buildpath, locations):
 
@@ -600,21 +590,21 @@
                           [("GetSVGGeometry", lambda *_ignored:self.GetSVGGeometry()),
                            ("GetHMITree", lambda *_ignored:self.GetHMITree()),
                            ("GetTranslations", self.GetTranslations),
-                           ("ProgressStart", self.ProgressStart),
-                           ("ProgressEnd", self.ProgressEnd)])
-
-            t = time.time()
+                           ("ProgressStart", lambda _ign,k,m:self.ProgressStart(str(k),str(m))),
+                           ("ProgressEnd", lambda _ign,k:self.ProgressEnd(str(k)))])
+
+            self.ProgressStart("svg", "source SVG parsing")
 
             # load svg as a DOM with Etree
             svgdom = etree.parse(svgfile)
 
-            self.GetCTRoot().logger.write("    Source SVG parsing: %.3f\n"%(time.time()-t))
+            self.ProgressEnd("svg")
 
             # call xslt transform on Inkscape's SVG to generate XHTML
             try: 
-                self.transform_begin = time.time()
+                self.ProgressStart("xslt", "XSLT transform")
                 result = transform.transform(svgdom)  # , profile_run=True)
-                self.GetCTRoot().logger.write("    XSLT transform: %.3f\n"%(time.time()-self.transform_begin))
+                self.ProgressEnd("xslt")
             except XSLTApplyError as e:
                 self.FatalError("SVGHMI " + view_name  + ": " + e.message)
             finally: