tools/fast: simplify logic now that it's run on each commit

pull/8615/head
Alexander Medvednikov 2021-02-07 05:11:48 +01:00
parent a81ee0e94e
commit 68b4051a6e
2 changed files with 43 additions and 71 deletions

View File

@ -19,71 +19,40 @@ fn main() {
println('failed to update V') println('failed to update V')
return return
} }
mut commit_hash := exec('git rev-parse HEAD') commit := exec('git rev-parse HEAD')[..8]
commit_hash = commit_hash[..8] // 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()
}
if !os.exists('table.html') { if !os.exists('table.html') {
os.create('table.html') ? os.create('table.html') ?
} }
mut table := os.read_file('table.html') ? mut table := os.read_file('table.html') ?
/* if table.contains('>$commit<') {
// Do nothing if it's already been processed.
if table.contains(commit_hash) {
println('Commit $commit_hash has already been processed')
return
}
*/
last_commits := exec('git log --pretty=format:"%h" -n 50').split('\n')
// Fetch all unprocessed commits (commits after the last processed commit)
mut commits := []string{}
println('!last_commit="$commit_hash"')
if last_commits.len == 0 || last_commits[0] == commit_hash {
println('nothing to benchmark') println('nothing to benchmark')
exit(1) exit(1)
return return
} }
for i, c in last_commits { // for i, commit in commits {
if c == commit_hash { message := exec('git log --pretty=format:"%s" -n1 $commit')
commits = last_commits[..i].reverse() // println('\n${i + 1}/$commits.len Benchmarking commit $commit "$message"')
break println('\nBenchmarking commit $commit "$message"')
} // Build an optimized V
} // println('Checking out ${commit}...')
println(last_commits) // exec('git checkout $commit')
if commits.len == 0 { println(' Building vprod...')
// Just benchmark the last commit if the tool hasn't been run for too long. exec('v -o $vdir/vprod -prod $vdir/cmd/v')
// commits = [commit_hash] diff1 := measure('$vdir/vprod -cc clang -o v.c -show-timings $vdir/cmd/v', 'v.c')
} diff2 := measure('$vdir/vprod -cc clang -o v2 $vdir/cmd/v', 'v2')
println('Commits to benchmark:') diff3 := measure('$vdir/vprod -x64 $vdir/cmd/tools/1mil.v', 'x64 1mil')
println(commits) diff4 := measure('$vdir/vprod -cc clang $vdir/examples/hello_world.v', 'hello.v')
for i, commit in commits { vc_size := os.file_size('v.c') / 1000
message := exec('git log --pretty=format:"%s" -n1 $commit') // parse/check/cgen
println('\n${i + 1}/$commits.len Benchmarking commit $commit "$message"') parse, check, cgen := measure_steps(vdir)
// Build an optimized V // println('Building V took ${diff}ms')
println('Checking out ${commit}...') commit_date := exec('git log -n1 --pretty="format:%at" $commit')
exec('git checkout $commit') date := time.unix(commit_date.int())
println(' Building vprod...') mut out := os.create('table.html') ?
exec('v -o $vdir/vprod -prod $vdir/cmd/v') // Place the new row on top
diff1 := measure('$vdir/vprod -cc clang -o v.c -show-timings $vdir/cmd/v', 'v.c') table =
diff2 := measure('$vdir/vprod -cc clang -o v2 $vdir/cmd/v', 'v2') '<tr>
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')
vc_size := os.file_size('v.c') / 1000
// parse/check/cgen
parse, check, cgen := measure_steps(vdir)
// println('Building V took ${diff}ms')
commit_date := exec('git log -n1 --pretty="format:%at" $commit')
date := time.unix(commit_date.int())
mut out := os.create('table.html') ?
// Place the new row on top
table =
'<tr>
<td>$date.format()</td> <td>$date.format()</td>
<td><a target=_blank href="https://github.com/vlang/v/commit/$commit">$commit</a></td> <td><a target=_blank href="https://github.com/vlang/v/commit/$commit">$commit</a></td>
<td>$message</td> <td>$message</td>
@ -96,20 +65,20 @@ fn main() {
<td>${check}ms</td> <td>${check}ms</td>
<td>${cgen}ms</td> <td>${cgen}ms</td>
</tr>\n' + </tr>\n' +
table.trim_space() table.trim_space()
out.writeln(table) ? out.writeln(table) ?
out.close() out.close()
// Regenerate index.html // Regenerate index.html
header := os.read_file('header.html') ? header := os.read_file('header.html') ?
footer := os.read_file('footer.html') ? footer := os.read_file('footer.html') ?
mut res := os.create('index.html') ? mut res := os.create('index.html') ?
res.writeln(header) ? res.writeln(header) ?
res.writeln(table) ? res.writeln(table) ?
res.writeln(footer) ? res.writeln(footer) ?
res.close() res.close()
} //}
exec('git checkout master') // exec('git checkout master')
os.write_file('last_commit.txt', commits[commits.len - 1]) ? // os.write_file('last_commit.txt', commits[commits.len - 1]) ?
} }
fn exec(s string) string { fn exec(s string) string {

View File

@ -8,6 +8,9 @@
*, body { *, body {
font-family: Menlo, Monospace, 'Courier New'; font-family: Menlo, Monospace, 'Courier New';
} }
table {
width: 2000px;
}
table, td { table, td {
border-collapse: collapse; border-collapse: collapse;
border: 1px solid #dfdfdf; border: 1px solid #dfdfdf;