changeset 586:59268b4d8c71

bake: Add new performance timers.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 10 Jan 2016 10:51:11 -0800
parents 25df894f9ab9
children d4a01a023998
files piecrust/app.py piecrust/baking/single.py piecrust/rendering.py
diffstat 3 files changed, 30 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/app.py	Sat Jan 02 16:39:26 2016 -0800
+++ b/piecrust/app.py	Sun Jan 10 10:51:11 2016 -0800
@@ -42,6 +42,11 @@
         self.env.registerTimer('SiteConfigLoad')
         self.env.registerTimer('PageLoad')
         self.env.registerTimer("PageDataBuild")
+        self.env.registerTimer("BuildRenderData")
+        self.env.registerTimer("PageRender")
+        self.env.registerTimer("PageRenderSegments")
+        self.env.registerTimer("PageRenderLayout")
+        self.env.registerTimer("PageSerialize")
 
     @cached_property
     def config(self):
--- a/piecrust/baking/single.py	Sat Jan 02 16:39:26 2016 -0800
+++ b/piecrust/baking/single.py	Sun Jan 10 10:51:11 2016 -0800
@@ -159,13 +159,15 @@
         if tax_info:
             ctx.setTaxonomyFilter(tax_info.term)
 
-        rp = render_page(ctx)
+        with self.app.env.timerScope("PageRender"):
+            rp = render_page(ctx)
 
-        out_dir = os.path.dirname(out_path)
-        _ensure_dir_exists(out_dir)
+        with self.app.env.timerScope("PageSerialize"):
+            out_dir = os.path.dirname(out_path)
+            _ensure_dir_exists(out_dir)
 
-        with codecs.open(out_path, 'w', 'utf8') as fp:
-            fp.write(rp.content)
+            with open(out_path, 'w', encoding='utf8') as fp:
+                fp.write(rp.content)
 
         return rp
 
--- a/piecrust/rendering.py	Sat Jan 02 16:39:26 2016 -0800
+++ b/piecrust/rendering.py	Sun Jan 10 10:51:11 2016 -0800
@@ -234,7 +234,8 @@
     eis.pushPage(ctx.page, ctx)
     try:
         # Build the data for both segment and layout rendering.
-        page_data = _build_render_data(ctx)
+        with ctx.app.env.timerScope("BuildRenderData"):
+            page_data = _build_render_data(ctx)
 
         # Render content segments.
         ctx.setCurrentPass(PASS_FORMATTING)
@@ -242,16 +243,17 @@
         save_to_fs = True
         if ctx.app.env.fs_cache_only_for_main_page and not eis.is_main_page:
             save_to_fs = False
-        if repo and not ctx.force_render:
-            render_result = repo.get(
-                    ctx.uri,
-                    lambda: _do_render_page_segments(ctx.page, page_data),
-                    fs_cache_time=ctx.page.path_mtime,
-                    save_to_fs=save_to_fs)
-        else:
-            render_result = _do_render_page_segments(ctx.page, page_data)
-            if repo:
-                repo.put(ctx.uri, render_result, save_to_fs)
+        with ctx.app.env.timerScope("PageRenderSegments"):
+            if repo and not ctx.force_render:
+                render_result = repo.get(
+                        ctx.uri,
+                        lambda: _do_render_page_segments(ctx.page, page_data),
+                        fs_cache_time=ctx.page.path_mtime,
+                        save_to_fs=save_to_fs)
+            else:
+                render_result = _do_render_page_segments(ctx.page, page_data)
+                if repo:
+                    repo.put(ctx.uri, render_result, save_to_fs)
 
         # Render layout.
         page = ctx.page
@@ -261,8 +263,11 @@
             layout_name = page.source.config.get('default_layout', 'default')
         null_names = ['', 'none', 'nil']
         if layout_name not in null_names:
-            build_layout_data(page, page_data, render_result['segments'])
-            layout_result = _do_render_layout(layout_name, page, page_data)
+            with ctx.app.env.timerScope("BuildRenderData"):
+                build_layout_data(page, page_data, render_result['segments'])
+
+            with ctx.app.env.timerScope("PageRenderLayout"):
+                layout_result = _do_render_layout(layout_name, page, page_data)
         else:
             layout_result = {
                     'content': render_result['segments']['content'],