This is an automated email from Gerrit.

Karl Palsson ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/4221

-- gerrit

commit 2ffde0c63376527b0f5818c852185e5cd5adca1a
Author: Karl Palsson <[email protected]>
Date:   Fri Sep 8 15:44:52 2017 +0000

    profiling: write "correct" sample rate to gmon output
    
    This duration vs sample count is _significantly_ closer to the truth
    than simply declaring the value to be 100Hz.
    
    Change-Id: Ie8d8bdf1959e1aa7cead0631cd2c86afe77d1efc
    Signed-off-by: Karl Palsson <[email protected]>

diff --git a/src/target/target.c b/src/target/target.c
index 8f97666..eba23b2 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -3840,7 +3840,7 @@ typedef unsigned char UNIT[2];  /* unit of profiling */
 
 /* Dump a gmon.out histogram file. */
 static void write_gmon(uint32_t *samples, uint32_t sampleNum, const char 
*filename, bool with_range,
-                       uint32_t start_address, uint32_t end_address, struct 
target *target)
+                       uint32_t start_address, uint32_t end_address, struct 
target *target, uint32_t duration_ms)
 {
        uint32_t i;
        FILE *f = fopen(filename, "w");
@@ -3908,7 +3908,8 @@ static void write_gmon(uint32_t *samples, uint32_t 
sampleNum, const char *filena
        writeLong(f, min, target);                      /* low_pc */
        writeLong(f, max, target);                      /* high_pc */
        writeLong(f, numBuckets, target);       /* # of buckets */
-       writeLong(f, 100, target);                      /* KLUDGE! We lie, ca. 
100Hz best case. */
+       float sample_rate = sampleNum / (duration_ms / 1000.0);
+       writeLong(f, sample_rate, target);
        writeString(f, "seconds");
        for (i = 0; i < (15-strlen("seconds")); i++)
                writeData(f, &zero, 1);
@@ -3957,6 +3958,7 @@ COMMAND_HANDLER(handle_profile_command)
                return ERROR_FAIL;
        }
 
+       uint64_t timestart_ms = timeval_ms();
        /**
         * Some cores let us sample the PC without the
         * annoying halt/resume step; for example, ARMv7 PCSR.
@@ -3968,6 +3970,7 @@ COMMAND_HANDLER(handle_profile_command)
                free(samples);
                return retval;
        }
+       uint32_t duration_ms = timeval_ms() - timestart_ms;
 
        assert(num_of_samples <= MAX_PROFILE_SAMPLE_NUM);
 

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to