Doubts about the Results oprofile of gtkperf on DirectFB vs TinyX



Hi.....
 
Gtk+ on DirectFB  taking much time ( 58 sec for drwaing 100*1000 on DirectFB , for TinyX it is 1.14 sec when i run gtkperf ) for drawing the lines compared to gtk+ on TinyX.
My analysis of the code is not complete.
 
This below is the Oprofile output with event set to  GLOBAL_POWER_EVENTS events (time during which processor is not stopped) spent  for drawing line on gtk+ on top of DirectFB.
 
 
 
 
gtkperf:

 

tests.c

-----------------------------------------------------------------------------------------------------------------

               :{ /* on_idle_gtkdrawingarea_lines_test total:     535 64.3803 */
               :
               :  AppData *appdata = NULL;
               :  appdata = (AppData *) data;
               :
               :  int i = 0;
               :
               :   /* create graphical context */
     1  0.1203 :  appdata->graphical_context =
               :        gdk_gc_new (appdata->drawingarea_drawing->window);
               :
               :  /* drawing lines is so fast that we'll make 1000 in one loop */
               :  /* just remember to show this in results! */
   331 39.8315 :  for (i = 0; i < 1000; i++)
               :  {
               :
     7  0.8424 :        set_random_drawing_color ();
               :
               :        gint x1 = g_random_int_range (0,
               :                                appdata->drawingarea_drawing->
   111 13.3574 :                                allocation.width);
               :        gint x2 = g_random_int_range (0,
               :                                appdata->drawingarea_drawing->
    11  1.3237 :                                allocation.width );
               :        gint y1 = g_random_int_range (0,
               :                                 appdata->drawingarea_drawing->
    30  3.6101 :                                 allocation.height);
               :        gint y2 = g_random_int_range (0,
               :                                appdata->drawingarea_drawing->
    17  2.0457 :                                allocation.height);
               :
    27  3.2491 :        gdk_draw_line (appdata->drawingarea_drawing->window,
               :                     appdata->graphical_context, x1, y1, x2, y2);
               :  }

 
 
 
 
 
 

               :void
               :set_random_drawing_color ()
    10  1.2034 :{ /* set_random_drawing_color total:    188 22.6233 */
               :
   115 13.8387 :  appdata->current_color.red = g_random_int_range (1, 65535);
    12  1.4440 :  appdata->current_color.green = g_random_int_range (1, 65535);
    10   1.2034 :  appdata->current_color.blue = g_random_int_range (1, 65535);
               :
    18  2.1661 :  gdk_colormap_alloc_color (gdk_colormap_get_system (),
               :                       &appdata->current_color, FALSE, TRUE);
     7  0.8424 :   gdk_gc_set_foreground (appdata->graphical_context,
               :                     &appdata->current_color);
    16  1.9254 :}
               :
               :void
               :on_button_clear_clicked (GtkButton * button, gpointer user_data)
               :{
               :  gtk_text_buffer_set_text (appdata->textview_info_buffer, "", 0);
               :}

 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
gdk_draw_line function:
 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void
gdk_draw_line (GdkDrawable *drawable,
        GdkGC       *gc,
        gint         x1,
        gint         y1,
        gint         x2,
        gint         y2)
{
  GdkSegment segment;
 
  g_return_if_fail (drawable != NULL);
  g_return_if_fail (gc != NULL);
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
  g_return_if_fail (GDK_IS_GC (gc));
 
  segment.x1 = x1;
  segment.y1 = y1;
  segment.x2 = x2;
  segment.y2 = y2;
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_segments (drawable, gc, &segment, 1);
}
 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
 
For DirectFb  gdk_draw_segments which will point to gdk_directfb_draw_segments  and gdk_x11_draw_segments for TinyX.
  
*) Has any body experienced same fault and do any body know why DirectFB is taking lot of time while drawing Lines??????
 
*) Why so many GLOBAL POWER EVENT sample has been taken for the first call to g_random_int_range ???
 
 
 

--
SHAIK RAFEEQH
IIT DELHI


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