Merge lp:~googol-deactivatedaccount/openlp/render into lp:openlp

Proposed by Andreas Preikschat
Status: Merged
Approved by: Raoul Snyman
Approved revision: 1579
Merged at revision: 2120
Proposed branch: lp:~googol-deactivatedaccount/openlp/render
Merge into: lp:openlp
Diff against target: 33 lines (+13/-2)
1 file modified
openlp/core/lib/serviceitem.py (+13/-2)
To merge this branch: bzr merge lp:~googol-deactivatedaccount/openlp/render
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Tim Bentley Approve
Review via email: mp+137446@code.launchpad.net

This proposal supersedes a proposal from 2012-10-02.

Description of the change

- when a verse appears more than once do not render the verse again, instead use the already rendered one to improve performance

Thanks to gushie who had the idea. Hahahaha, I bet he does not remember.

To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) :
review: Approve
Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

nice!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/lib/serviceitem.py'
2--- openlp/core/lib/serviceitem.py 2012-12-01 07:57:54 +0000
3+++ openlp/core/lib/serviceitem.py 2012-12-02 20:43:30 +0000
4@@ -181,8 +181,19 @@
5 self.themedata, self.main, self.footer = self.renderer.pre_render()
6 if self.service_item_type == ServiceItemType.Text:
7 log.debug(u'Formatting slides: %s' % self.title)
8+ # Save rendered pages to this dict. In the case that a slide is used
9+ # twice we can use the pages saved to the dict instead of rendering
10+ # them again.
11+ previous_pages = {}
12 for slide in self._raw_frames:
13- pages = self.renderer.format_slide(slide[u'raw_slide'], self)
14+ verse_tag = slide[u'verseTag']
15+ if verse_tag in previous_pages and \
16+ previous_pages[verse_tag][0] == slide[u'raw_slide']:
17+ pages = previous_pages[verse_tag][1]
18+ else:
19+ pages = \
20+ self.renderer.format_slide(slide[u'raw_slide'], self)
21+ previous_pages[verse_tag] = (slide[u'raw_slide'], pages)
22 for page in pages:
23 page = page.replace(u'<br>', u'{br}')
24 html = expand_tags(cgi.escape(page.rstrip()))
25@@ -190,7 +201,7 @@
26 u'title': clean_tags(page),
27 u'text': clean_tags(page.rstrip()),
28 u'html': html.replace(u'&amp;nbsp;', u'&nbsp;'),
29- u'verseTag': slide[u'verseTag']
30+ u'verseTag': verse_tag
31 })
32 elif self.service_item_type == ServiceItemType.Image or \
33 self.service_item_type == ServiceItemType.Command: