11from mpos import Activity
22import lvgl as lv
3+ import time
34
45from mpos import FontManager
56
67
78class ShowFonts (Activity ):
9+ def _now_ms (self ):
10+ if hasattr (time , "ticks_ms" ):
11+ return time .ticks_ms ()
12+ return int (time .time () * 1000 )
13+
14+ def _elapsed_ms (self , start_ms ):
15+ if hasattr (time , "ticks_diff" ):
16+ return time .ticks_diff (self ._now_ms (), start_ms )
17+ return self ._now_ms () - start_ms
18+
19+ def _log_timing (self , label , start_ms ):
20+ print ("[showfonts][timing] {}: {} ms" .format (label , self ._elapsed_ms (start_ms )))
21+
822 def onCreate (self ):
923 screen = lv .obj ()
1024 screen .set_flex_flow (lv .FLEX_FLOW .COLUMN )
1125
1226 self .setContentView (screen )
1327
1428 def onResume (self , screen ):
29+ resume_start = self ._now_ms ()
1530 self .addAllFontsTitles (screen )
31+ self ._log_timing ("addAllFontsTitles" , resume_start )
32+
33+ glyphs_start = self ._now_ms ()
1634 self .addAllGlyphs (screen )
35+ self ._log_timing ("addAllGlyphs" , glyphs_start )
36+ self ._log_timing ("onResume total" , resume_start )
1737 #lv.log_register_print_cb(ShowFonts.log_callback) # Show FPS to demonstrate that emoji fonts are 3-4x slower
1838
1939 def onPause (self , screen ): # Activity goes background
2040 #lv.log_register_print_cb(None)
2141 pass
2242
2343 def addAllFontsTitles (self , screen ):
44+ section_start = self ._now_ms ()
2445 import os
46+ ttf_start = self ._now_ms ()
2547 mydir = os .path .dirname (os .path .abspath (__file__ ))
2648 self ._ttf_font = FontManager .getFont (size = 42 , ttf = f"M:{ mydir } /Rancourt-SmallCaps.ttf" )
49+ self ._log_timing ("addAllFontsTitles/getFont TTF" , ttf_start )
2750 #self._ttf_font56 = FontManager.getFont(size=56, ttf=f"M:{mydir}/Rancourt-SmallCaps.ttf")
2851 #self._ttf_font72 = FontManager.getFont(size=72, ttf=f"M:{mydir}/Rancourt-SmallCaps.ttf")
2952 #fonts.append((self._ttf_font56, "TTF Rancourt 56"))
@@ -34,7 +57,11 @@ def addAllFontsTitles(self, screen):
3457 title .set_style_text_font (self ._ttf_font , lv .PART .MAIN )
3558 title .set_text ("Rancourt 42 TTF test with minimal glyphs" )
3659
60+ listfonts_start = self ._now_ms ()
3761 fonts = FontManager .listFonts ()
62+ self ._log_timing ("addAllFontsTitles/listFonts" , listfonts_start )
63+
64+ render_start = self ._now_ms ()
3865 for font_info in fonts :
3966 if isinstance (font_info , tuple ):
4067 font = font_info [0 ]
@@ -63,13 +90,18 @@ def addAllFontsTitles(self, screen):
6390 supported_latin ,
6491 )
6592 )
93+ self ._log_timing ("addAllFontsTitles/render labels" , render_start )
94+ self ._log_timing ("addAllFontsTitles total" , section_start )
6695
6796
6897 def addAllGlyphs (self , screen , emoji = True ):
98+ section_start = self ._now_ms ()
6999 dsc = lv .font_glyph_dsc_t ()
70100
101+ getfont_start = self ._now_ms ()
71102 display_font = FontManager .getFont (size = 16 , family = "Montserrat" , emoji = emoji )
72103 lookup_font = display_font
104+ self ._log_timing ("addAllGlyphs/getFont" , getfont_start )
73105 name = "Montserrat 16"
74106
75107 title = lv .label (screen )
@@ -84,21 +116,28 @@ def addAllGlyphs(self, screen, emoji=True):
84116 lbl .set_width (lv .pct (99 ))
85117 lbl .set_style_text_font (display_font , lv .PART .MAIN )
86118 alltext = ""
119+ scan_start = self ._now_ms ()
87120 for cp in range (0x20 , 0xF800 ):
88121 if lookup_font .get_glyph_dsc (lookup_font , dsc , cp , cp ):
89122 alltext = alltext + chr (cp ) + " "
90123
91124 x += 20
92125 if x + 20 > screen .get_width ():
93126 x = 4
127+ self ._log_timing ("addAllGlyphs/base glyph scan" , scan_start )
94128
95129 if emoji :
130+ emoji_start = self ._now_ms ()
96131 emoji_cps = FontManager .getEmojiCodepoints ()
97132 for cp in emoji_cps :
98133 alltext = alltext + chr (cp ) + " "
134+ self ._log_timing ("addAllGlyphs/emoji append" , emoji_start )
99135
136+ set_text_start = self ._now_ms ()
100137 lbl .set_text (alltext )
138+ self ._log_timing ("addAllGlyphs/set_text" , set_text_start )
101139 self .labelSelectable (lbl )
140+ self ._log_timing ("addAllGlyphs total" , section_start )
102141
103142 def labelSelectable (self , label ):
104143 label .add_event_cb (self ._focus_obj , lv .EVENT .FOCUSED , None )
0 commit comments