emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ftx font driver [Re: Low redisplay performance (23 regression)]


From: YAMAMOTO Mitsuharu
Subject: Re: ftx font driver [Re: Low redisplay performance (23 regression)]
Date: Thu, 23 Apr 2009 16:31:44 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

>>>>> On Thu, 23 Apr 2009 10:01:12 +0900, Kenichi Handa <address@hidden> said:

>>> I haven't compared Emacs 22 and 23, but from a subjective point of
>>> view I have noticed that latest Emacs 23 feels slow and updates
>>> too much for a modern computer. Some particular problems I noticed
>>> randomly:

>> Which font backend driver are you using?  You can check it with
>> (cdr (assq 'font-backend (frame-parameters))).  I found the ftx
>> font driver was much slower than the xft one partly because of
>> repeated calculations of font metrics.  (So I added some cache code
>> to ftcrfont.c in my latest cairo patch posted here).

> Please exlain why it calculates font metrics repeatedly.

> As ftx font driver is not used by default on any platforms, it is
> not tested well and I myself don't remember the code well.

There might be the case that the Xft library is not installed, does
not have a sufficient version, or not found by configure for some
reasons (e.g., PKG_CONFIG_PATH is not set appropriately).  In such
cases, the ftx font driver is selected as a default.  Of course, you
can reproduce such a situation with --without-xft.

The result of time profiling using Shark.app indicates that
FT_Load_Glyph called from ftfont_text_extents takes much time and
calculates font metrics repeatedly without caching.  In particular,
it's really slow if the font is actually in a gzipped PCF format.

                                     YAMAMOTO Mitsuharu
                                address@hidden

        0.0%    99.7%   emacs   start   
        0.0%    99.7%   emacs    main   
        0.0%    99.7%   emacs     Frecursive_edit       
        0.0%    99.7%   emacs      recursive_edit_1     
        0.0%    99.7%   emacs       command_loop        
        0.0%    99.7%   emacs        internal_catch     
        0.0%    99.7%   emacs         command_loop_2    
        0.0%    99.7%   emacs          internal_condition_case  
        0.0%    99.7%   emacs           command_loop_1  
        0.0%    79.4%   emacs            call3  
        0.0%    79.4%   emacs             Ffuncall      
        0.0%    79.4%   emacs              Fcall_interactively  
        0.0%    79.4%   emacs               Ffuncall    
        0.0%    69.9%   emacs                Fscroll_down       
        0.0%    69.9%   emacs                 scroll_command    
        0.0%    69.9%   emacs                  window_scroll    
        0.0%    25.1%   emacs                   pos_visible_p   
        0.0%    22.4%   emacs                    move_it_to     
        0.0%    22.4%   emacs                     move_it_in_display_line_to    
        0.0%    22.3%   emacs                      x_produce_glyphs     
        0.0%    22.2%   emacs                       get_per_char_metric 
        0.0%    22.2%   emacs                        ftfont_text_extents        
        0.0%    22.2%   libfreetype.6.dylib                           
FT_Load_Glyph     
        0.1%    22.0%   libfreetype.6.dylib                            
PCF_Glyph_Load   
        0.0%    21.8%   libfreetype.6.dylib                             
FT_Stream_Seek  
        0.0%    21.8%   libfreetype.6.dylib                              
ft_gzip_stream_io      
        0.0%    21.8%   libfreetype.6.dylib                               
ft_gzip_file_io       
        0.0%    21.8%   libfreetype.6.dylib                                
ft_gzip_file_skip_output     
        21.3%   21.8%   libfreetype.6.dylib                                 
ft_gzip_file_fill_output    
        0.5%    0.5%    libfreetype.6.dylib                                  
ft_gzip_file_fill_input    
        0.0%    0.1%    libfreetype.6.dylib                             
ft_glyphslot_alloc_bitmap       
        0.0%    0.1%    libfreetype.6.dylib                             
FT_Stream_Read  
        0.0%    0.1%    libfreetype.6.dylib                            
ft_glyphslot_clear       
        0.0%    0.1%    emacs                       get_char_face_and_encoding  
        0.0%    0.0%    emacs                       get_it_property     
        0.0%    0.0%    emacs                      get_next_display_element     
        0.0%    0.0%    emacs                      set_iterator_to_next 
        0.0%    2.1%    emacs                    display_mode_line      
        0.0%    0.7%    emacs                    line_bottom_y  
        0.0%    22.5%   emacs                   move_it_to      
        0.0%    22.5%   emacs                    move_it_in_display_line_to     
        0.0%    22.4%   emacs                     x_produce_glyphs      
        0.0%    22.3%   emacs                      get_per_char_metric  
        0.0%    22.3%   emacs                       ftfont_text_extents 
        0.0%    22.3%   libfreetype.6.dylib                          
FT_Load_Glyph      
        0.0%    22.2%   libfreetype.6.dylib                           
PCF_Glyph_Load    
        0.0%    22.0%   libfreetype.6.dylib                            
FT_Stream_Seek   
        0.0%    22.0%   libfreetype.6.dylib                             
ft_gzip_stream_io       
        0.0%    22.0%   libfreetype.6.dylib                              
ft_gzip_file_io        
        0.0%    21.9%   libfreetype.6.dylib                               
ft_gzip_file_skip_output      
        21.5%   21.9%   libfreetype.6.dylib                                
ft_gzip_file_fill_output     
        0.0%    0.0%    libfreetype.6.dylib                               
ft_gzip_file_reset    
        0.0%    0.1%    libfreetype.6.dylib                            
FT_Stream_Read   
        0.0%    0.1%    libfreetype.6.dylib                            
ft_glyphslot_alloc_bitmap        
        0.0%    0.0%    libfreetype.6.dylib                            
ft_synthesize_vertical_metrics   
        0.0%    0.1%    libfreetype.6.dylib                           
ft_glyphslot_clear        
        0.0%    0.1%    emacs                      get_char_face_and_encoding   
        0.0%    0.0%    emacs                      get_it_property      
        0.0%    0.1%    emacs                     get_next_display_element      
        0.0%    0.0%    emacs                     set_iterator_to_next  
        0.0%    0.0%    emacs                    recenter_overlay_lists 
        0.0%    21.7%   emacs                   move_it_vertically_backward     
        0.0%    0.6%    emacs                   move_it_by_lines        
        0.0%    9.5%    emacs                Fscroll_up 
        0.0%    20.3%   emacs            read_key_sequence      
        0.0%    0.0%    emacs            resize_echo_area_exactly       
        0.0%    0.0%    emacs            start_hourglass        
        0.0%    0.0%    emacs            safe_run_hooks 
        0.0%    0.0%    emacs            Fcommand_remapping     
        0.1%    0.1%    mach_kernel     lo_alltraps     
        0.0%    0.1%    mach_kernel     lo_mach_scall   
        0.0%    0.0%    mach_kernel     lo_unix_scall   
        0.0%    0.0%    mach_kernel     i386_astintr    
        0.0%    0.0%    mach_kernel     IOWorkLoop::threadMain()        
        0.0%    0.0%    mach_kernel     thread_call_enter_delayed       
        0.0%    0.0%    mach_kernel     uiomove 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]