mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add profiling support to lrfviewer
This commit is contained in:
parent
5c369f7d99
commit
5b21df0678
@ -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)
|
||||
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user