From 5b21df0678c66e14071deb40158db2ba632abf85 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 22 Sep 2007 23:54:40 +0000 Subject: [PATCH] Add profiling support to lrfviewer --- src/libprs500/gui2/lrf_renderer/document.py | 59 +++++++++++---------- src/libprs500/gui2/lrf_renderer/main.py | 10 +++- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/src/libprs500/gui2/lrf_renderer/document.py b/src/libprs500/gui2/lrf_renderer/document.py index 94e3ceb37c..bd403bb259 100644 --- a/src/libprs500/gui2/lrf_renderer/document.py +++ b/src/libprs500/gui2/lrf_renderer/document.py @@ -856,39 +856,40 @@ class Document(QGraphicsScene): self.show_page(page) - def load_fonts(self, lrf): + def load_fonts(self, lrf, load_substitutions=True): font_map = {} + for font in lrf.font_map: fdata = QByteArray(lrf.font_map[font].data) id = QFontDatabase.addApplicationFontFromData(fdata) font_map[font] = [str(i) for i in QFontDatabase.applicationFontFamilies(id)][0] - from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_BoldItalic - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_BoldItalic.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_Italic - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Italic.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_Bold - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Bold.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_BoldItalic - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_BoldItalic.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_Regular - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Regular.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_Italic - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Italic.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_Regular - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Regular.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_Italic - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Italic.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_Bold - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Bold.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_Bold - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Bold.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_BoldItalic - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_BoldItalic.font_data)) - from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_Regular - QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Regular.font_data)) + if load_substitutions: + from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_BoldItalic + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_BoldItalic.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_Italic + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Italic.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_Bold + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Bold.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_BoldItalic + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_BoldItalic.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_Regular + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Regular.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_Italic + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Italic.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_Regular + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Regular.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_Italic + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Italic.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_Bold + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Bold.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationMono_Bold + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Bold.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSerif_BoldItalic + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_BoldItalic.font_data)) + from libprs500.ebooks.lrf.fonts.liberation import LiberationSans_Regular + QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Regular.font_data)) - self.font_loader = FontLoader(font_map, self.dpi) @@ -916,10 +917,10 @@ class Document(QGraphicsScene): self.chapter_map[chapter.id] = len(self.chapters)-1 - def render(self, lrf): + def render(self, lrf, load_substitutions=True): self.dpi = lrf.device_info.dpi/10. self.ruby_tags = dict(**lrf.ruby_tags) - self.load_fonts(lrf) + self.load_fonts(lrf, load_substitutions) self.objects = lrf.objects num_chaps = 0 @@ -931,6 +932,7 @@ class Document(QGraphicsScene): for pt in lrf.page_trees: for chapter in pt: self.render_chapter(chapter, lrf) + self.emit(SIGNAL('chapter_rendered(int)'), -1) self.chapter_layout = [i.num_of_pages for i in self.chapters] self.objects = None @@ -975,4 +977,3 @@ class Document(QGraphicsScene): def show_page_at_percent(self, p): num = self.num_of_pages*(p/100.) self.show_page(num) - diff --git a/src/libprs500/gui2/lrf_renderer/main.py b/src/libprs500/gui2/lrf_renderer/main.py index 44554c60aa..0288102df9 100644 --- a/src/libprs500/gui2/lrf_renderer/main.py +++ b/src/libprs500/gui2/lrf_renderer/main.py @@ -98,7 +98,13 @@ class Main(QObject, Ui_MainWindow, MainWindow): self.renderer.lrf.device_info.height) self.window.setWindowTitle(self.renderer.lrf.metadata.title + ' - ' + __appname__) self.document_title = self.renderer.lrf.metadata.title - self.document.render(self.renderer.lrf) + if self.opts.profile: + import cProfile + render, lrf = self.document.render, self.renderer.lrf + cProfile.runctx('render(lrf)', globals(), locals(), lrf.metadata.title+'.stats') + print 'Stats written to', self.renderer.lrf.metadata.title+'.stats' + else: + self.document.render(self.renderer.lrf) self.renderer.lrf = None self.graphics_view.setScene(self.document) self.graphics_view.show() @@ -163,6 +169,8 @@ def option_parser(): default=False, action='store_true', dest='visual_debug') parser.add_option('--disable-hyphenation', dest='hyphenate', default=True, action='store_false', help='Disable hyphenation. Should significantly speed up rendering.') + parser.add_option('--profile', dest='profile', default='False', action='store_true', + help='Profile the LRf renderer') return parser def main(args=sys.argv, logger=None):