emacs-devel
[Top][All Lists]
Advanced

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

Re: Low redisplay performance (23 regression)


From: David Reitter
Subject: Re: Low redisplay performance (23 regression)
Date: Mon, 20 Apr 2009 19:20:23 -0400

On Apr 20, 2009, at 6:33 PM, Chong Yidong wrote:

David Reitter <address@hidden> writes:

I'm wondering if others get the same on other platforms comparing 22
and 23, or if this is a problem specifically in the NS port (for
example, with setting drawing color or the like).

On GNU/Linux, I do not experience much of a difference in performance
between Emacs 22 and Emacs 23.

If you are trying to track down the problem, you could first try to see
if the problem is occurring in Lisp or in the C code.  For instance,
does scrolling in buffers trigger GCs?  Is there any difference in
performance if you disable the tool-bar or other parts of the graphical
display?


I've run Shark over it (profiling tool).
For the Carbon port, it looks uneventful.
For NS /23, I get 24% time spent in mark_object and another 6% in garbage_collect. [Does this indicate consing?] The 16% in display_mode_lines would support what I observed regarding the header line (even though I thought the effect was more than that).

Note that I have (setq redisplay-dont-pause t), because otherwise it skips a lot of pages. Note that it does that too when scrolling line by line; for the trace below, I scrolled page-wise.

Regarding display elements: the tool-bar doesn't matter, but the header line makes a big difference. Using a simpler header line (no properties, no overlays) improves the speed. But note that I've used the same header line in both Carbon/22 and NS/23. Unfortunately there doesn't seem to be anything specific about the header line that causes the slowdown in NS/23, except that (setq header-line-format "Hello") speeds up the scrolling. But even without header line do I see a marked regression compared to 22.



        0.0%    69.2%   Aquamacs        start   
        0.0%    69.2%   Aquamacs         main   
        0.0%    69.2%   Aquamacs          Frecursive_edit       
        0.0%    69.2%   Aquamacs           recursive_edit_1     
        0.0%    69.2%   Aquamacs            command_loop        
        0.0%    69.2%   Aquamacs             internal_catch     
        0.0%    69.2%   Aquamacs              command_loop_2    
        0.0%    69.2%   Aquamacs               internal_condition_case  
        0.0%    69.2%   Aquamacs                command_loop_1  
        0.0%    55.9%   Aquamacs                 read_key_sequence      
        0.0%    55.9%   Aquamacs                  read_char     
        0.0%    50.6%   Aquamacs                   redisplay_internal   
        0.0%    38.8%   Aquamacs                    redisplay_windows   
        0.0%    38.8%   Aquamacs                     internal_condition_case_1  
        0.0%    38.8%   Aquamacs                      redisplay_window_0        
        0.0%    38.8%   Aquamacs                       redisplay_window 
        0.0%    17.9%   Aquamacs                        try_window      
        0.1%    17.7%   Aquamacs                         display_line   
        0.0%    16.2%   Aquamacs                          
get_next_display_element      
        0.1%    16.2%   Aquamacs                           
next_element_from_buffer     
        0.0%    15.5%   Aquamacs                            handle_stop 
        0.0%    11.5%   Aquamacs                             
handle_fontified_prop      
        0.0%    11.5%   Aquamacs                              safe_call1        
        0.0%    11.5%   Aquamacs                               safe_call        
        0.0%    11.5%   Aquamacs                                
internal_condition_case_2       
        0.0%    11.5%   Aquamacs                                 Ffuncall       
        1.4%    6.0%    Aquamacs                                  
Fgarbage_collect      
        0.0%    1.3%    Aquamacs                                   lisp_free    
        0.1%    0.7%    libSystem.B.dylib                                   
free        
        0.5%    0.6%    libSystem.B.dylib                                    
szone_free 
0.1% 0.1% libSystem.B.dylib tiny_free_list_add_ptr
        0.0%    0.0%    libSystem.B.dylib                                     
__spin_lock       
0.0% 0.0% libSystem.B.dylib dyld_stub__spin_lock
        0.1%    0.1%    libSystem.B.dylib                                    
szone_size 
0.0% 0.0% libSystem.B.dylib malloc_zone_free
        0.5%    0.5%    Aquamacs                                    mem_find    
        0.0%    0.0%    Aquamacs                                    unexec_free 
        0.0%    1.2%    Aquamacs                                   
mark_vectorlike      
        0.3%    1.1%    Aquamacs                                   mem_delete   
        0.0%    0.5%    Aquamacs                                   mark_object  
0.0% 0.3% Aquamacs balance_intervals_internal
        0.1%    0.2%    Aquamacs                                   
truncate_undo_list   
        0.0%    0.0%    Aquamacs                                   mark_stack   
        0.0%    0.0%    Aquamacs                                   
lisp_align_free      
        0.0%    5.5%    Aquamacs                                  
funcall_lambda        
        0.0%    0.0%    Aquamacs                              
Fget_char_property        
        0.0%    3.9%    Aquamacs                             handle_face_prop   
        0.0%    0.0%    Aquamacs                             
handle_display_prop        
        0.0%    0.0%    Aquamacs                             
handle_invisible_prop      
        0.0%    0.0%    Aquamacs                             
handle_composition_prop    
        0.0%    0.0%    Aquamacs                             
get_overlay_strings        
        0.0%    0.3%    Aquamacs                            
composition_reseat_it       
        0.0%    0.3%    Aquamacs                            compute_stop_pos    
        0.3%    0.7%    Aquamacs                          x_produce_glyphs      
        0.0%    0.3%    Aquamacs                          
append_space_for_newline      
        0.1%    0.1%    Aquamacs                          compute_line_metrics  
        0.0%    0.0%    libSystem.B.dylib                         __memcpy      
        0.0%    0.0%    Aquamacs                          handle_line_prefix    
        0.0%    0.0%    Aquamacs                          set_iterator_to_next  
        0.0%    0.0%    Aquamacs                          prepare_desired_row   
        0.0%    0.0%    Aquamacs                          
reseat_at_next_visible_line_start     
        0.0%    0.0%    Aquamacs                          
recenter_overlay_lists        
        0.0%    0.0%    Aquamacs                          
get_char_face_and_encoding    
        0.0%    0.1%    Aquamacs                         start_display  
        0.0%    0.0%    Aquamacs                         recenter_overlay_lists 
        0.0%    0.0%    Aquamacs                         init_iterator  
        0.0%    0.0%    Aquamacs                         
append_space_for_newline       
        0.0%    16.1%   Aquamacs                        display_mode_lines      
        0.0%    4.4%    Aquamacs                        update_window_fringes   
        0.0%    0.2%    Aquamacs                        update_frame_tool_bar   
        0.0%    0.1%    Aquamacs                        set_vertical_scroll_bar 
        0.0%    0.0%    Aquamacs                        set_buffer_internal_1   
        0.0%    0.0%    Aquamacs                        reconsider_clip_changes 
        0.0%    10.3%   Aquamacs                    update_frame        
        0.0%    1.5%    Aquamacs                    prepare_menu_bars   
        0.0%    0.0%    Aquamacs                    echo_area_display   
        0.0%    0.0%    Aquamacs                    select_frame_for_redisplay  
        0.0%    0.0%    Aquamacs                    clear_window_matrices       
        0.0%    0.0%    Aquamacs                    clear_desired_matrices      
        0.0%    2.7%    Aquamacs                   sit_for      
        0.0%    1.2%    Aquamacs                   show_help_echo       
        0.0%    0.6%    Aquamacs                   safe_run_hooks       
        0.0%    0.5%    Aquamacs                   wait_reading_process_output  
        0.0%    0.2%    Aquamacs                   
detect_input_pending_run_timers      
        0.0%    0.0%    Aquamacs                   read_avail_input     
        0.0%    0.0%    Aquamacs                  follow_key    
        0.0%    10.2%   Aquamacs                 call3  
        0.0%    3.0%    Aquamacs                 safe_run_hooks 
        0.0%    0.0%    Aquamacs                 adjust_point_for_property      
        0.0%    0.0%    Aquamacs                cmd_error       
        0.0%    24.5%   Aquamacs        mark_object     
        0.0%    4.3%    Aquamacs        mark_vectorlike 
        0.6%    0.7%    mach_kernel     lo_alltraps     
        0.0%    0.5%    mach_kernel     lo_mach_scall   
        0.0%    0.2%    mach_kernel     i386_astintr    
        0.0%    0.1%    Aquamacs        traverse_intervals_noorder      
        0.0%    0.1%    mach_kernel     lo_unix_scall   
        0.0%    0.1%    Aquamacs        mark_buffer     
        0.0%    0.1%    Aquamacs        mark_interval_tree      
        0.0%    0.1%    mach_kernel     thread_continue 
        0.0%    0.0%    mach_kernel     IOWorkLoop::threadMain()        
        0.0%    0.0%    Aquamacs        Frecursive_edit 
        0.0%    0.0%    libSystem.B.dylib       thread_start    
        0.0%    0.0%    mach_kernel     thread_call_enter_delayed       
        0.0%    0.0%    Aquamacs        read_char       
        0.0%    0.0%    mach_kernel     ml_set_interrupts_enabled       
        0.0%    0.0%    mach_kernel     mach_msg_receive_continue       
        0.0%    0.0%    Aquamacs        display_mode_element    

Attachment: smime.p7s
Description: S/MIME cryptographic signature


reply via email to

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