GUADEC dtrace, normalized time spent in Cairo
Friday Jun 30, 2006
Those attending the GUADEC performance bof may be interested in this little dtrace script based on normtime.d:
#!/usr/sbin/dtrace -s
#pragma D option quiet
BEGIN
{
/*
* Get the start time, in nanoseconds.
*/
start = timestamp;
}
pid$target::*cairo*:entry
{
@func[probefunc] = count();
}
END
{
/*
* Normalize the aggregation based on the number of seconds we have
* been running. (There are 1,000,000,000 nanoseconds in one second.)
*/
normalize(@func, (timestamp - start) / 1000000000);
}
run it with cairo.d -c gedit and play with gedit:
_cairo_ft_unscaled_font_keys_equal 0
cairo_font_iface_init 0
cairo_font_map_iface_init 0
cairo_font_options_set_hint_metrics 0
gdk_cairo_rectangle 0
pango_cairo_fc_font_class_intern_init 0
pango_cairo_fc_font_map_class_intern_init 0
pango_cairo_fc_font_map_init 0
pango_cairo_font_map_new 0
pango_cairo_renderer_class_intern_init 0
pango_cairo_renderer_get_type 0
pango_cairo_renderer_init 0
_cairo_cache_init 0
_cairo_font_face_init 0
_cairo_ft_unscaled_font_init 0
_cairo_hash_table_create 0
_cairo_unscaled_font_init 0
cairo_font_options_set_antialias 0
cairo_font_options_set_hint_style 0
cairo_font_options_set_subpixel_order 0
cairo_line_to 0
_cairo_ft_font_face_create 0
_cairo_ft_font_face_scaled_font_create 0
_cairo_ft_scaled_font_create 0
_cairo_ft_scaled_font_font_extents 0
_cairo_ft_unscaled_font_create_for_pattern 0
_cairo_scaled_font_font_extents 0
_cairo_scaled_font_init 0
_cairo_unscaled_font_destroy 0
cairo_ft_font_face_create_for_pattern 0
cairo_scaled_font_extents 0
_cairo_matrix_get_affine 0
cairo_ft_font_options_substitute 0
pango_cairo_fc_font_map_context_substitute 0
_cairo_ft_unscaled_font_init_key 0
_cairo_ft_unscaled_font_map_lock 0
_cairo_ft_unscaled_font_map_unlock 0
_cairo_hash_string 0
_cairo_hash_table_insert 0
_cairo_hash_table_resize 0
_cairo_matrix_compute_determinant 0
_cairo_matrix_compute_scale_factors 0
_cairo_surface_composite_trapezoids 1
_cairo_traps_extents 1
_cairo_xlib_surface_composite_trapezoids 1
_cairo_array_append 2
_cairo_array_grow_by 2
_cairo_clip_intersect_to_region 2
_cairo_surface_fill_region 2
_cairo_user_data_array_set_data 2
cairo_surface_set_device_offset 2
cairo_surface_set_user_data 2
cairo_xlib_surface_create 2
gdk_pixmap_ref_cairo_surface 2
gdk_x11_cairo_surface_destroy 2
gdk_x11_ref_cairo_surface 2
pango_cairo_font_map_create_context 2
pango_cairo_font_map_get_default 2
pango_cairo_context_set_resolution 2
cairo_font_options_create 2
pango_cairo_context_set_font_options 2
_pango_cairo_fc_font_new 3
pango_cairo_fc_font_get_type 3
pango_cairo_fc_font_init 3
pango_cairo_fc_font_map_create_font 3
pango_cairo_fc_font_map_get_type 3
cairo_matrix_scale 3
pango_cairo_fc_font_map_context_key_copy 3
_cairo_gstate_clip_and_composite_trapezoids 3
_cairo_gstate_fill 3
_cairo_surface_clip_and_composite_trapezoids 3
_cairo_surface_fill_path 3
cairo_fill 3
cairo_fill_preserve 3
_cairo_image_surface_assume_ownership_of_data 3
_cairo_ft_scaled_font_glyph_extents 3
_cairo_ft_unscaled_font_create_glyph 3
_cairo_image_surface_create_for_pixman_image 3
_cairo_pixman_format_create 3
_cairo_pixman_format_create_masks 3
_cairo_pixman_format_destroy 3
_cairo_pixman_format_init 3
_cairo_pixman_image_create_for_data 3
_cairo_pixman_image_get_data 3
_cairo_pixman_image_get_depth 3
_cairo_pixman_image_get_height 3
_cairo_pixman_image_get_stride 3
_cairo_pixman_image_get_width 3
_cairo_scaled_font_glyph_extents 3
cairo_image_surface_create_for_data 3
cairo_scaled_font_glyph_extents 3
_cairo_clip_reset 4
_cairo_gstate_reset_clip 4
_cairo_gstate_translate 4
cairo_identity_matrix 4
cairo_reset_clip 4
cairo_translate 4
gdk_cairo_create 4
gdk_window_ref_cairo_surface 4
cairo_font_options_destroy 5
_cairo_unscaled_font_reference 6
_cairo_gstate_show_glyphs_draw_func 6
_cairo_scaled_font_get_glyph_cache_key 6
_cairo_scaled_font_show_glyphs 6
_cairo_surface_show_glyphs 6
_cairo_xlib_surface_show_glyphs 6
_cairo_xlib_surface_show_glyphs8 6
_cairo_ft_scaled_font_glyph_bbox 6
_cairo_gstate_backend_to_user 6
_cairo_gstate_ensure_font_face 6
_cairo_gstate_ensure_scaled_font 6
_cairo_gstate_set_font_face 6
_cairo_gstate_set_font_matrix 6
_cairo_gstate_set_font_options 6
_cairo_gstate_show_glyphs 6
_cairo_path_fixed_get_current_point 6
_cairo_scaled_font_glyph_bbox 6
_cairo_xlib_surface_get_font_options 6
_pango_cairo_font_install 6
_pango_cairo_font_map_get_renderer 6
cairo_get_current_point 6
cairo_scaled_font_destroy 6
cairo_scaled_font_reference 6
cairo_set_font_face 6
cairo_set_font_matrix 6
cairo_set_font_options 6
cairo_show_glyphs 6
cairo_surface_get_font_options 6
pango_cairo_fc_font_install 6
pango_cairo_fc_font_map_get_renderer 6
pango_cairo_renderer_draw_glyphs 6
pango_cairo_show_glyph_string 6
_cairo_scaled_font_keys_equal 6
cairo_scaled_font_create 6
pango_cairo_fc_font_get_font_face 6
cairo_font_face_reference 6
_cairo_hash_table_lookup 6
_cairo_scaled_font_init_key 6
_cairo_hash_table_lookup_internal 6
gdk_cairo_region 6
_cairo_clip_clip 6
_cairo_clip_init 6
_cairo_color_compute_shorts 6
_cairo_color_init_rgb 6
_cairo_color_init_rgba 6
_cairo_gstate_clip 6
_cairo_gstate_create 6
_cairo_gstate_set_source 6
_cairo_path_fixed_init 6
_cairo_surface_allocate_clip_serial 6
_cairo_surface_get_clip_mode 6
_cairo_surface_set_clip_region 6
_cairo_xlib_surface_set_clip_region 6
cairo_clip 6
cairo_clip_preserve 6
cairo_create 6
cairo_destroy 6
cairo_pattern_create_rgb 6
cairo_set_source 6
cairo_set_source_rgb 6
gdk_cairo_set_source_color 6
pango_cairo_fc_font_get_metrics 7
_cairo_matrix_is_integer_translation 7
_cairo_pattern_acquire_surface 7
_cairo_pattern_acquire_surface_for_solid 7
_cairo_pattern_release_surface 7
_cairo_surface_create_similar_scratch 7
_cairo_surface_create_similar_solid 7
_cairo_surface_fill_rectangle 7
_cairo_xlib_surface_create_similar 7
_cairo_xlib_surface_set_attributes 7
_cairo_xlib_surface_set_repeat 7
cairo_xlib_surface_create_with_xrender_format 7
get_cairo_context 7
_cairo_box_round_to_rectangle 8
_cairo_clip_intersect_to_rectangle 8
_cairo_gstate_clip_and_composite 8
_cairo_region_create_from_rectangle 8
_cairo_pixman_region_num_rects 9
_cairo_pixman_region_rects 9
_gdk_drawable_ref_cairo_surface 9
cairo_font_options_merge 9
cairo_font_options_copy 9
_cairo_font_options_init_default 9
_cairo_array_fini 9
_cairo_surface_fill_rectangles 9
_cairo_user_data_array_fini 9
_cairo_xlib_screen_info_get 9
_cairo_xlib_surface_create_internal 9
_cairo_xlib_surface_fill_rectangles 9
_cairo_xlib_surface_finish 9
cairo_surface_finish 9
_cairo_gstate_copy_transformed_pattern 10
_cairo_gstate_copy_transformed_source 10
_cairo_pattern_init_copy 10
_cairo_pattern_transform 10
_cairo_pixman_region_extents 10
_cairo_pixman_region_intersect 10
_cairo_region_extents_rectangle 10
_cairo_surface_get_current_clip_serial 10
_cairo_surface_set_clip 10
cairo_matrix_translate 10
cairo_matrix_init_scale 10
_cairo_path_fixed_fill_to_traps 10
_cairo_path_fixed_interpret 10
_cairo_polygon_fini 10
_cairo_polygon_init 10
_cairo_traps_extract_region 10
_cairo_traps_fini 10
_cairo_traps_grow_by 10
_cairo_traps_init 10
_cairo_traps_tessellate_polygon 10
_cairo_gstate_apply_device_inverse_transform 11
_cairo_gstate_apply_device_transform 11
_cairo_gstate_identity_matrix 11
cairo_rectangle 11
pango_cairo_context_get_resolution 11
pango_cairo_fc_font_map_get_resolution_fc 11
_cairo_filler_close_path 11
_cairo_path_fixed_close_path 11
cairo_close_path 11
_cairo_traps_add_trap 11
_cairo_get_global_image_glyph_cache 12
_cairo_lock_global_image_glyph_cache 12
_cairo_unlock_global_image_glyph_cache 12
_compare_cairo_edge_by_current_x_slope 12
pango_cairo_fc_font_map_context_key_equal 12
cairo_font_face_destroy 12
_compare_cairo_edge_by_top 13
_cairo_surface_init 13
_cairo_array_init 13
_cairo_path_arg_buf_create 13
_cairo_path_fixed_add_arg_buf 13
_cairo_path_fixed_add_op_buf 13
_cairo_path_op_buf_create 13
_cairo_pattern_create_solid 13
_cairo_user_data_array_init 13
_cairo_stock_color 14
_cairo_xlib_surface_set_picture_clip_rects 14
_cairo_filler_move_to 14
pango_cairo_font_map_get_type 15
cairo_new_path 15
_cairo_format_from_content 15
_cairo_fixed_integer_ceil 16
_cairo_ft_scaled_font_get_glyph_cache_key 16
_cairo_clip_init_copy 17
_cairo_gstate_clone 17
_cairo_pen_init_copy 17
cairo_restore 17
cairo_save 17
_cairo_xlib_surface_ensure_dst_picture 17
_cairo_operator_bounded 17
_cairo_path_fixed_move_to 18
cairo_move_to 18
_cairo_cache_shrink_to 18
cairo_font_options_equal 19
_cairo_fixed_integer_floor 19
pango_cairo_fc_font_map_context_key_get 19
pango_cairo_font_get_type 19
_cairo_scaled_font_map_lock 19
_cairo_scaled_font_map_unlock 19
cairo_matrix_init_translate 19
pango_cairo_fc_font_map_context_key_hash 20
_cairo_restrict_value 20
_cairo_pattern_init 21
_cairo_pattern_init_solid 21
_cairo_path_fixed_fini 22
_pango_cairo_context_get_merged_font_options 22
_cairo_clip_fini 24
_cairo_gstate_destroy 24
_cairo_pen_fini 24
cairo_pattern_reference 24
_cairo_pixman_region_union 25
_cairo_pattern_fini 25
_cairo_pixman_region_union_rect 25
cairo_ft_scaled_font_lock_face 26
cairo_ft_scaled_font_unlock_face 26
pango_cairo_fc_font_lock_face 26
pango_cairo_fc_font_unlock_face 26
cairo_font_options_hash 27
_cairo_pixman_region_destroy 29
_cairo_ft_unscaled_font_lock_face 30
_cairo_ft_unscaled_font_set_scale 30
_cairo_ft_unscaled_font_unlock_face 30
_cairo_pen_init_empty 31
cairo_matrix_multiply 33
_cairo_gstate_user_to_device_distance 35
_cairo_path_fixed_rel_line_to 35
cairo_rel_line_to 35
_cairo_filler_line_to 35
_cairo_path_fixed_line_to 35
_cairo_polygon_line_to 35
_cairo_gstate_unset_scaled_font 35
_cairo_polygon_close 37
_cairo_pixman_region_create 37
_cairo_pixman_region_create_simple 37
_cairo_pixman_region_copy 38
cairo_pattern_destroy 38
cairo_surface_destroy 39
_cairo_fixed_integer_part 40
pango_cairo_fc_font_get_glyph 41
cairo_surface_reference 47
_cairo_polygon_add_edge 50
_cairo_gstate_user_to_backend 52
_cairo_fixed_is_integer 57
cairo_matrix_init_identity 59
_cairo_polygon_move_to 64
_cairo_path_fixed_add 65
_cairo_cache_lookup 74
_cairo_glyph_cache_keys_equal 75
cairo_matrix_transform_point 82
cairo_matrix_init 89
_cairo_glyph_cache_hash 92
_cairo_fixed_to_double 108
cairo_matrix_transform_distance 117
pango_cairo_fc_font_get_glyph_extents 201
pango_cairo_fc_font_get_scaled_font 254
_cairo_fixed_from_double 315
When I have more time I'll try this on the benchmark and also try it in a thin client environment where I expect things will be different. But now it is time for lunch!





My three year old daughter took this photo. She took another one aiming slightly more to the left so you can see me tieing a string to the kite.






