This looks good you add MySQL times in microseconds and publish results in milliseconds (ms) with 2 decimals.
For the question about database connection time its overhead you get for the queries
without a connection you can't execute any queries so time to connect and select a database must be included.
Test this replacement for cpg_db_connect:
function cpg_db_connect()
{
global $CONFIG, $query_stats, $queries;
$query_start = cpgGetMicroTime();
$result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);
if (!$result) {
return false;
}
$query_end = cpgGetMicroTime();
if (!isset($CONFIG['debug_mode']) || $CONFIG['debug_mode'] == 1 || $CONFIG['debug_mode'] == 2) {
$trace = debug_backtrace();
$last = $trace[0];
$localfile = str_replace(realpath(dirname(__FILE__) . DIRECTORY_SEPARATOR . '..') . DIRECTORY_SEPARATOR , '', $last['file']);
$duration = ($query_end - $query_start) * 1000;
$query_stats[] = $duration;
$queries[] = "mysql_connect: {$CONFIG['dbserver']} [$localfile:{$last['line']}] (".round($duration, 2)." ms)";
}
$query_start = cpgGetMicroTime();
if (!mysql_select_db($CONFIG['dbname'])) {
return false;
}
$query_end = cpgGetMicroTime();
if (!isset($CONFIG['debug_mode']) || $CONFIG['debug_mode'] == 1 || $CONFIG['debug_mode'] == 2) {
$duration = ($query_end - $query_start) * 1000;
$query_stats[] = $duration;
$queries[] = "mysql_select_db: {$CONFIG['dbname']} [$localfile:{$last['line']}] (".round($duration, 2)." ms)";
}
if (!empty($CONFIG['dbcharset'])) {
cpg_db_query("SET NAMES '{$CONFIG['dbcharset']}'", $result);
}
return $result;
}