comparison piecrust/rendering.py @ 586:59268b4d8c71

bake: Add new performance timers.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 10 Jan 2016 10:51:11 -0800
parents 683be25cbdb2
children 33ab9badfd7a
comparison
equal deleted inserted replaced
585:25df894f9ab9 586:59268b4d8c71
232 def render_page(ctx): 232 def render_page(ctx):
233 eis = ctx.app.env.exec_info_stack 233 eis = ctx.app.env.exec_info_stack
234 eis.pushPage(ctx.page, ctx) 234 eis.pushPage(ctx.page, ctx)
235 try: 235 try:
236 # Build the data for both segment and layout rendering. 236 # Build the data for both segment and layout rendering.
237 page_data = _build_render_data(ctx) 237 with ctx.app.env.timerScope("BuildRenderData"):
238 page_data = _build_render_data(ctx)
238 239
239 # Render content segments. 240 # Render content segments.
240 ctx.setCurrentPass(PASS_FORMATTING) 241 ctx.setCurrentPass(PASS_FORMATTING)
241 repo = ctx.app.env.rendered_segments_repository 242 repo = ctx.app.env.rendered_segments_repository
242 save_to_fs = True 243 save_to_fs = True
243 if ctx.app.env.fs_cache_only_for_main_page and not eis.is_main_page: 244 if ctx.app.env.fs_cache_only_for_main_page and not eis.is_main_page:
244 save_to_fs = False 245 save_to_fs = False
245 if repo and not ctx.force_render: 246 with ctx.app.env.timerScope("PageRenderSegments"):
246 render_result = repo.get( 247 if repo and not ctx.force_render:
247 ctx.uri, 248 render_result = repo.get(
248 lambda: _do_render_page_segments(ctx.page, page_data), 249 ctx.uri,
249 fs_cache_time=ctx.page.path_mtime, 250 lambda: _do_render_page_segments(ctx.page, page_data),
250 save_to_fs=save_to_fs) 251 fs_cache_time=ctx.page.path_mtime,
251 else: 252 save_to_fs=save_to_fs)
252 render_result = _do_render_page_segments(ctx.page, page_data) 253 else:
253 if repo: 254 render_result = _do_render_page_segments(ctx.page, page_data)
254 repo.put(ctx.uri, render_result, save_to_fs) 255 if repo:
256 repo.put(ctx.uri, render_result, save_to_fs)
255 257
256 # Render layout. 258 # Render layout.
257 page = ctx.page 259 page = ctx.page
258 ctx.setCurrentPass(PASS_RENDERING) 260 ctx.setCurrentPass(PASS_RENDERING)
259 layout_name = page.config.get('layout') 261 layout_name = page.config.get('layout')
260 if layout_name is None: 262 if layout_name is None:
261 layout_name = page.source.config.get('default_layout', 'default') 263 layout_name = page.source.config.get('default_layout', 'default')
262 null_names = ['', 'none', 'nil'] 264 null_names = ['', 'none', 'nil']
263 if layout_name not in null_names: 265 if layout_name not in null_names:
264 build_layout_data(page, page_data, render_result['segments']) 266 with ctx.app.env.timerScope("BuildRenderData"):
265 layout_result = _do_render_layout(layout_name, page, page_data) 267 build_layout_data(page, page_data, render_result['segments'])
268
269 with ctx.app.env.timerScope("PageRenderLayout"):
270 layout_result = _do_render_layout(layout_name, page, page_data)
266 else: 271 else:
267 layout_result = { 272 layout_result = {
268 'content': render_result['segments']['content'], 273 'content': render_result['segments']['content'],
269 'pass_info': None} 274 'pass_info': None}
270 275