# New Ticket Created by  Jarkko Hietaniemi 
# Please include the string:  [perl #31058]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org:80/rt3/Ticket/Display.html?id=31058 >


- make number of noop calibration rounds relative to the number of
  opcodes performed (with a fixed minimum, though)
- don't calibrate opcode speeds to the faster-than-light
- "pretty-print" the profiling report (this is of course personal
  taste) by always having the same number of columns, dropping
  "---" lines, and saying "Title" instead of "TITLE".


-- 
Jarkko Hietaniemi <[EMAIL PROTECTED]> http://www.iki.fi/jhi/ "There is this special
biologist word we use for 'stable'.  It is 'dead'." -- Jack Cohen

--- src/embed.c.dist    2004-08-11 12:22:41.000000000 +0300
+++ src/embed.c 2004-08-11 12:49:35.000000000 +0300
@@ -499,17 +499,19 @@
 static FLOATVAL
 calibrate(Parrot_Interp interpreter)
 {
-    int i;
+    size_t n = interpreter->op_count;
+    size_t i;
     FLOATVAL start, empty;
-    opcode_t code[] = {1};      /* noop */
+    opcode_t code[] = { 1 };      /* noop */
     opcode_t *pc = code;
 
-    for (empty = 0.0, i = 0; i < 1000000; ++i) {
-       start = Parrot_floatval_time();
+    if (n < 1000000)   /* minimum opcode count for calibration */
+        n = 1000000;
+    start = Parrot_floatval_time();
+    for (empty = 0.0, i = 0; i < n; i++)
        pc =  (interpreter->op_func_table[*code])(pc, interpreter);
-       empty += Parrot_floatval_time() - start;
-    }
-    return empty;
+    empty += Parrot_floatval_time() - start;
+    return empty / (FLOATVAL)n;
 }
 
 /*
@@ -537,16 +539,15 @@
         RunProfile *profile = interpreter->profile;
         FLOATVAL empty = calibrate(interpreter);
 
-        PIO_printf(interpreter, "\n");
-        PIO_printf(interpreter, "                   OPERATION PROFILE                 
\n\n");
-        PIO_printf(interpreter, " CODE J OP FULL NAME            CALLS  TOTAL TIME   
AVG T. ms\n");
-        PIO_printf(interpreter, " ---- - -----------------    --------  ----------  
----------\n");
-
+        PIO_printf(interpreter, " Code J Name                    Calls  Total/ms      
 Avg/ms\n");
         for (j = 0; j < interpreter->op_count + PARROT_PROF_EXTRA; j++) {
             UINTVAL n = profile->data[j].numcalls;
             profile->data[j].op = j;
-            if (j >= PARROT_PROF_EXTRA)
-                profile->data[j].time -= (empty * n / 1000000);
+            if (j >= PARROT_PROF_EXTRA) {
+                profile->data[j].time -= empty * n;
+                if (profile->data[j].time < 0.0) /* faster than noop */
+                    profile->data[j].time = 0.0;
+            }
         }
         qsort(profile->data, interpreter->op_count +
                 PARROT_PROF_EXTRA,
@@ -560,11 +561,11 @@
                 sum_time += t;
 
                 k = profile->data[j].op;
-                jit = ' ';
+                jit = '-';
 #if JIT_CAPABLE
-                if (k >= PARROT_PROF_EXTRA)
-                    jit = op_jit[k - PARROT_PROF_EXTRA].extcall != 1 ?
-                        'j' : ' ';
+                if (k >= PARROT_PROF_EXTRA &&
+                    op_jit[k - PARROT_PROF_EXTRA].extcall != 1)
+                    jit = 'j';
 #endif
                 PIO_printf(interpreter, " %4d %c %-20s %8vu  %10vf  %10.4vf\n",
                         k - PARROT_PROF_EXTRA,
@@ -577,10 +578,9 @@
             }
         }
 
-        PIO_printf(interpreter, " ---- - -----------------    --------  ----------  
----------\n");
-        PIO_printf(interpreter, " %4vu   %-20s %8vu  %10vf  %10.4vf\n",
+        PIO_printf(interpreter, " %4vu - %-20s %8vu  %10vf  %10.4vf\n",
                 op_count,
-                "",
+                "-",
                 call_count,
                 sum_time,
                 (FLOATVAL)(sum_time * 1000.0 / (FLOATVAL)call_count)

Reply via email to