Add profiling support to lrfviewer

This commit is contained in:
Kovid Goyal 2007-09-22 23:54:40 +00:00
parent 5c369f7d99
commit 5b21df0678
2 changed files with 39 additions and 30 deletions

View File

@ -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)

View File

@ -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):