mariadb/dbug
unknown 2d1384e442 Made my_snprintf() behavior snprintf() compatible when printing %x arguments (it should
produce hex digits in lower case). (fixed version)

Replaced _dig_vec array with two _dig_vec_upper/_dig_vec_lower arrays.
Added extra argument to int2str function which controls case of digits you get.
Replaced lot of invocations of int2str for decimal radix with more optimized int10_to_str()
function.
Removed unused my_itoa/my_ltoa functions.


client/mysql.cc:
  Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str()
  call.
client/mysqladmin.c:
  Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str()
  call.
dbug/dbug.c:
   _dig_vec became _dig_vec_upper.
include/m_string.h:
  _dig_vec is obsoleted by _dig_vec_upper/_dig_vec_lower.
  my_itoa()/my_ltoa() functions were removed because they were never used in our code.
  int2str() now has one more argument which controls case of digits it will produce.
include/my_global.h:
  my_itoa()/my_ltoa() functions were removed because they were never used in our code.
isam/isamchk.c:
  Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str()
  call.
libmysql/libmysql.def:
  _dig_vec is obsoleted by _dig_vec_upper/_dig_vec_lower.
myisam/myisamchk.c:
  Replaced int2str invocation with radix argument equal to 10 with optimized int10_to_str()
  call.
mysys/mf_tempfile.c:
  _dig_vec became _dig_vec_upper.
mysys/my_error.c:
  Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str()
  call.
mysys/my_tempnam.c:
  _dig_vec became _dig_vec_upper.
sql-common/client.c:
  Replaced int2str invocation with radix argument equal to 10 with optimized int10_to_str()
  call.
sql/item_strfunc.cc:
  _dig_vec became _dig_vec_upper. Also we don't need hex[] array in this file now because we
  have _dig_vec_lower instead.
sql/mysqld.cc:
  Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str()
  call.
sql/password.c:
  _dig_vec became _dig_vec_upper.
sql/sql_bitmap.h:
  _dig_vec became _dig_vec_upper.
strings/int2str.c:
  Replaced _dig_vec by _dig_vec_upper/_dig_vec_lower pair.
  int2str() now has one more argument which controls case of digits it will produce.
  my_itoa()/my_ltoa() functions were removed because they were never used in our code.
strings/longlong2str-x86.s:
  _dig_vec became _dig_vec_upper.
strings/longlong2str.c:
  _dig_vec became _dig_vec_upper.
strings/my_vsnprintf.c:
  If my_snprintf() is printing %x argument it should produce lower case hexadecimal digits
  to be snprintf() compatible.
2004-05-27 17:54:40 +04:00
..
.cvsignore Import changeset 2000-07-31 21:29:14 +02:00
dbug.c Made my_snprintf() behavior snprintf() compatible when printing %x arguments (it should 2004-05-27 17:54:40 +04:00
dbug_add_tags.pl added DBUG_ENTER/RETURN tags, dbug_add_tags.pl bugfix 2002-11-05 16:06:11 +01:00
dbug_analyze.c Changed to use my_global.h 2001-09-14 02:54:33 +03:00
dbug_long.h Import changeset 2000-07-31 21:29:14 +02:00
doinstall.sh Import changeset 2000-07-31 21:29:14 +02:00
example1.c Changed to use my_global.h 2001-09-14 02:54:33 +03:00
example2.c Changed to use my_global.h 2001-09-14 02:54:33 +03:00
example3.c Changed to use my_global.h 2001-09-14 02:54:33 +03:00
factorial.c Changed to use my_global.h 2001-09-14 02:54:33 +03:00
install.sh Import changeset 2000-07-31 21:29:14 +02:00
main.c Changed to use my_global.h 2001-09-14 02:54:33 +03:00
Makefile.am removed redundant -I include-dirs 2002-11-26 14:01:08 +01:00
mklintlib.sh Import changeset 2000-07-31 21:29:14 +02:00
monty.doc Fixed that IF is case insensitive if 2 and 3 arguments are case insensitive. 2002-04-22 10:34:46 +03:00
qmake.cmd Import changeset 2000-07-31 21:29:14 +02:00
readme.prof Import changeset 2000-07-31 21:29:14 +02:00
sanity.c Changed to use my_global.h 2001-09-14 02:54:33 +03:00
user.r Import changeset 2000-07-31 21:29:14 +02:00
vargs.h Import changeset 2000-07-31 21:29:14 +02:00

Hi,

I'm sending you the modifications I made to your Dbug routines to
allow profiling in a (relatively) machine independent fashion.
I use your Dbug routines fairly extensively.  Unfortunately, it's
a royal pain to have to keep profiled versions of various libraries
around.  The modifications allow profiling without the need for this.

How it works.
------------

Basically, I just added code in the dbug routines to write out a file
called dbugmon.out (by default).  This is an ascii file containing lines
of the form:

<function-name> E <time-entered>
<function-name> X <time-exited>

A second program (analyze) reads this file, and produces a report on
standard output.

Profiling is enabled through the `g' flag.  It can take a list of
procedure names for which profiling is enabled.  By default, it
profiles all procedures.

The code in ``dbug.c'' opens the profile file for appending.  This
is in order that one can run a program several times, and get the
sum total of all the times, etc.

The only system dependent part that I'm aware of is the routine
Clock() at the end of dbug.c.  This returns the elapsed user time
in milliseconds.  The version which I have is for 4.3 BSD.  As I
don't have access to other systems, I'm not certain how this would
change.

An example of the report generated follows:

		Profile of Execution
		Execution times are in milliseconds

		    Calls			    Time
		    -----			    ----
		Times	Percentage	Time Spent	Percentage
Function	Called	of total	in Function	of total    Importance
========	======	==========	===========	==========  ==========
factorial      	     5	     83.33	         30	    100.00        8333
main           	     1	     16.67	          0	      0.00           0
========	======	==========	===========	==========
Totals         	     6	    100.00	         30	    100.00


As you can see, it's quite self-evident.  The ``Importance'' column is a
metric obtained by multiplying the percentage of the calls and the percentage
of the time.  Functions with higher 'importance' benefit the most from
being sped up.

I'm really not certain how to add support for setjmp/longjmp, or for
child processes, so I've ignored that for the time being.  In most of
the code that I write, it isn't necessary.  If you have any good ideas,
feel free to add them.

This has been very useful to me.  If you can use it as part of your
dbug distribution, please feel free to do so.

Regards,

				Binayak Banerjee
		{allegra | astrovax | bpa | burdvax}!sjuvax!bbanerje
			bbanerje%sjuvax.sju.edu@relay.cs.net
				July 9, 1987