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
_______________________________________________
gtk-devel-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-devel-list

Reply via email to