From 0cfa90828cf50623cd2c1fcb7173fe9fa6a545f2 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Fri, 10 Jul 2020 16:51:16 +0200 Subject: [PATCH] tools/fast: run for each commit --- cmd/tools/fast/fast.v | 113 ++++++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 42 deletions(-) diff --git a/cmd/tools/fast/fast.v b/cmd/tools/fast/fast.v index e4e48fd9f3..41b043c8ef 100644 --- a/cmd/tools/fast/fast.v +++ b/cmd/tools/fast/fast.v @@ -21,51 +21,79 @@ fn main() { return } mut commit_hash := exec('git rev-parse HEAD') - commit_hash = commit_hash[..7] - if !os.exists('table.html') { - os.create('table.html') or { panic(err) } + commit_hash = commit_hash[..8] + if os.exists('last_commit.txt') { + last_commit := os.read_file('last_commit.txt')? + if last_commit.trim_space() == commit_hash.trim_space() { + println('No new commits to benchmark. Commit $commit_hash has already been processed.') + return + } + commit_hash = last_commit.trim_space() } - mut table := os.read_file('table.html') or { panic(err) } + + if !os.exists('table.html') { + os.create('table.html')? + } + mut table := os.read_file('table.html')? + /* // Do nothing if it's already been processed. if table.contains(commit_hash) { println('Commit $commit_hash has already been processed') return } - // Build an optimized V - println('Building vprod...') - exec('v -o $vdir/vprod -prod $vdir/cmd/v') - println('Measuring...') - diff1 := measure('$vdir/vprod -cc clang -o v.c $vdir/cmd/v') - diff2 := measure('$vdir/vprod -cc clang -o v2 $vdir/cmd/v') - diff3 := measure('$vdir/vprod -x64 $vdir/cmd/tools/1mil.v') - diff4 := measure('$vdir/vprod -cc clang $vdir/examples/hello_world.v') - //println('Building V took ${diff}ms') - commit_date := exec('git log -n1 --pretty="format:%at"') - message := exec('git log -n1 --pretty="format:%s"') - date := time.unix(commit_date.int()) - mut out := os.create('table.html') or { panic(err) } - // Place the new row on top - table = -' - ${date.format()} - $commit_hash - $message - ${diff1}ms - ${diff2}ms - ${diff3}ms - ${diff4}ms -\n' + - table.trim_space() - out.writeln(table) - out.close() - // Regenerate index.html - header := os.read_file('header.html') or { panic(err) } - footer := os.read_file('footer.html') or { panic(err) } - mut res := os.create('index.html') or { panic(err) } - res.writeln(header) - res.writeln(table) - res.writeln(footer) - res.close() + */ + last_commits := exec('git log --pretty=format:"%h" -n 20').split('\n')//.reverse() + // Fetch all unprocessed commits (commits after the last processed commit) + mut commits := []string{} + println('last_commit="$commit_hash"') + for i, c in last_commits { + if c == commit_hash { + commits = last_commits[..i].reverse() + break + } + } + println(last_commits) + println('Commits to benchmark:') + println(commits) + for i, commit in commits { + message := exec('git log --pretty=format:"%s" -n1 $commit') + println('\n${i + 1}/$commits.len Benchmarking commit $commit "$message"') + // Build an optimized V + println(' Building vprod...') + //exec('v -o $vdir/vprod -prod $vdir/cmd/v') + exec('v -o $vdir/vprod $vdir/cmd/v') + diff1 := measure('$vdir/vprod -cc clang -o v.c $vdir/cmd/v', 'v.c') + diff2 := measure('$vdir/vprod -cc clang -o v2 $vdir/cmd/v', 'v2') + diff3 := measure('$vdir/vprod -x64 $vdir/cmd/tools/1mil.v', 'x64 1mil') + diff4 := measure('$vdir/vprod -cc clang $vdir/examples/hello_world.v', 'hello.v') + //println('Building V took ${diff}ms') + commit_date := exec('git log -n1 --pretty="format:%at"') + date := time.unix(commit_date.int()) + mut out := os.create('table.html')? + // Place the new row on top + table = + ' + ${date.format()} + $commit_hash + $message + ${diff1}ms + ${diff2}ms + ${diff3}ms + ${diff4}ms + \n' + + table.trim_space() + out.writeln(table) + out.close() + // Regenerate index.html + header := os.read_file('header.html')? + footer := os.read_file('footer.html')? + mut res := os.create('index.html')? + res.writeln(header) + res.writeln(table) + res.writeln(footer) + res.close() + } + os.write_file('last_commit.txt', commits[commits.len-1])? } fn exec(s string) string { @@ -74,12 +102,13 @@ fn exec(s string) string { } // returns milliseconds -fn measure(cmd string) int { - println('Warming up...') +fn measure(cmd, description string) int { + println(' Measuring $description') + println(' Warming up...') for _ in 0..3 { exec(cmd) } - println('Building...') + println(' Building...') sw := time.new_stopwatch({}) exec(cmd) return int(sw.elapsed().milliseconds())