changeset 803:bf9f4e55f751

rendering: Separate performance timers for renering segments and layouts.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 29 Sep 2016 21:59:20 -0700
parents 0da1207472d3
children 08e6484a2600
files piecrust/plugins/base.py piecrust/rendering.py
diffstat 2 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/plugins/base.py	Thu Sep 29 21:52:18 2016 -0700
+++ b/piecrust/plugins/base.py	Thu Sep 29 21:59:20 2016 -0700
@@ -63,7 +63,8 @@
     def getTemplateEngines(self):
         return self._getPluginComponents(
                 'getTemplateEngines',
-                initialize=True, register_timer=True)
+                initialize=True, register_timer=True,
+                register_timer_suffixes=['_segment', '_layout'])
 
     def getDataProviders(self):
         return self._getPluginComponents('getDataProviders')
@@ -135,7 +136,9 @@
         return plugin
 
     def _getPluginComponents(self, name, *,
-                             initialize=False, register_timer=False,
+                             initialize=False,
+                             register_timer=False,
+                             register_timer_suffixes=None,
                              order_key=None):
         if name in self._componentCache:
             return self._componentCache[name]
@@ -151,7 +154,12 @@
 
             if register_timer:
                 for comp in plugin_components:
-                    self.app.env.registerTimer(comp.__class__.__name__)
+                    if not register_timer_suffixes:
+                        self.app.env.registerTimer(comp.__class__.__name__)
+                    else:
+                        for s in register_timer_suffixes:
+                            self.app.env.registerTimer(
+                                comp.__class__.__name__ + s)
 
         if order_key is not None:
             all_components.sort(key=order_key)
--- a/piecrust/rendering.py	Thu Sep 29 21:52:18 2016 -0700
+++ b/piecrust/rendering.py	Thu Sep 29 21:59:20 2016 -0700
@@ -279,7 +279,8 @@
         for seg_part in seg.parts:
             part_format = seg_part.fmt or format_name
             try:
-                with app.env.timerScope(engine.__class__.__name__):
+                with app.env.timerScope(
+                        engine.__class__.__name__ + '_segment'):
                     part_text = engine.renderSegmentPart(
                             page.path, seg_part, page_data)
             except TemplatingError as err:
@@ -324,7 +325,7 @@
     engine = get_template_engine(page.app, engine_name)
 
     try:
-        with page.app.env.timerScope(engine.__class__.__name__):
+        with page.app.env.timerScope(engine.__class__.__name__ + '_layout'):
             output = engine.renderFile(full_names, layout_data)
     except TemplateNotFoundError as ex:
         logger.exception(ex)