benchstat: specify meta charset=utf-8 to avoid garbled text

This commit fixes a few parts that do not conform to the specification of html5
by specifying doctype and html, head, body and title elements.

Fixes golang/go#23308

Change-Id: If9e58b056247fce4505c2482443043f9853af3a4
Reviewed-on: https://go-review.googlesource.com/85796
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
diff --git a/analysis/appengine/template/compare.html b/analysis/appengine/template/compare.html
index 846bae7..d87a126 100644
--- a/analysis/appengine/template/compare.html
+++ b/analysis/appengine/template/compare.html
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
+    <meta charset="utf-8">
     <title>Performance Result Comparison</title>
     <style type="text/css">
 #header h1 {
diff --git a/analysis/appengine/template/index.html b/analysis/appengine/template/index.html
index 6e9ddcf..0306805 100644
--- a/analysis/appengine/template/index.html
+++ b/analysis/appengine/template/index.html
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
+    <meta charset="utf-8">
     <title>Go Performance Result Dashboard</title>
     <style type="text/css">
 #header h1 {
diff --git a/analysis/appengine/template/trend.html b/analysis/appengine/template/trend.html
index f8cde19..4d0ed65 100644
--- a/analysis/appengine/template/trend.html
+++ b/analysis/appengine/template/trend.html
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
+    <meta charset="utf-8">
     <title>Performance Result Comparison</title>
     <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
     <style type="text/css">
diff --git a/cmd/benchstat/main.go b/cmd/benchstat/main.go
index b7fb691..1ec3808 100644
--- a/cmd/benchstat/main.go
+++ b/cmd/benchstat/main.go
@@ -157,15 +157,21 @@
 
 	var buf bytes.Buffer
 	if *flagHTML {
-		buf.WriteString(htmlStyle)
+		buf.WriteString(htmlHeader)
 		benchstat.FormatHTML(&buf, tables)
+		buf.WriteString(htmlFooter)
 	} else {
 		benchstat.FormatText(&buf, tables)
 	}
 	os.Stdout.Write(buf.Bytes())
 }
 
-var htmlStyle = `<style>
+var htmlHeader = `<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Performance Result Comparison</title>
+<style>
 .benchstat { border-collapse: collapse; }
 .benchstat th:nth-child(1) { text-align: left; }
 .benchstat tbody td:nth-child(1n+2):not(.note) { text-align: right; padding: 0em 1em; }
@@ -174,4 +180,9 @@
 .benchstat .better td.delta { font-weight: bold; }
 .benchstat .worse td.delta { font-weight: bold; color: #c00; }
 </style>
+</head>
+<body>
+`
+var htmlFooter = `</body>
+</html>
 `
diff --git a/cmd/benchstat/testdata/examplehtml.golden b/cmd/benchstat/testdata/examplehtml.golden
index 193ae06..501dd57 100644
--- a/cmd/benchstat/testdata/examplehtml.golden
+++ b/cmd/benchstat/testdata/examplehtml.golden
@@ -1,3 +1,8 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Performance Result Comparison</title>
 <style>
 .benchstat { border-collapse: collapse; }
 .benchstat th:nth-child(1) { text-align: left; }
@@ -7,6 +12,8 @@
 .benchstat .better td.delta { font-weight: bold; }
 .benchstat .worse td.delta { font-weight: bold; color: #c00; }
 </style>
+</head>
+<body>
 
 <table class='benchstat oldnew'>
 <tr class='configs'><th><th>exampleold.txt<th>examplenew.txt
@@ -27,3 +34,5 @@
 </tbody>
 
 </table>
+</body>
+</html>
diff --git a/cmd/benchstat/testdata/exampleoldhtml.golden b/cmd/benchstat/testdata/exampleoldhtml.golden
index d7c651c..72c3860 100644
--- a/cmd/benchstat/testdata/exampleoldhtml.golden
+++ b/cmd/benchstat/testdata/exampleoldhtml.golden
@@ -1,3 +1,8 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Performance Result Comparison</title>
 <style>
 .benchstat { border-collapse: collapse; }
 .benchstat th:nth-child(1) { text-align: left; }
@@ -7,6 +12,8 @@
 .benchstat .better td.delta { font-weight: bold; }
 .benchstat .worse td.delta { font-weight: bold; color: #c00; }
 </style>
+</head>
+<body>
 
 <table class='benchstat '>
 
@@ -28,3 +35,5 @@
 </tbody>
 
 </table>
+</body>
+</html>
diff --git a/cmd/benchstat/testdata/oldnew4html.golden b/cmd/benchstat/testdata/oldnew4html.golden
index 2f47768..d8dbdba 100644
--- a/cmd/benchstat/testdata/oldnew4html.golden
+++ b/cmd/benchstat/testdata/oldnew4html.golden
@@ -1,3 +1,8 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Performance Result Comparison</title>
 <style>
 .benchstat { border-collapse: collapse; }
 .benchstat th:nth-child(1) { text-align: left; }
@@ -7,6 +12,8 @@
 .benchstat .better td.delta { font-weight: bold; }
 .benchstat .worse td.delta { font-weight: bold; color: #c00; }
 </style>
+</head>
+<body>
 
 <table class='benchstat '>
 <tr class='configs'><th><th>old.txt<th>new.txt<th>slashslash4.txt
@@ -95,3 +102,5 @@
 </tbody>
 
 </table>
+</body>
+</html>
diff --git a/cmd/benchstat/testdata/oldnewhtml.golden b/cmd/benchstat/testdata/oldnewhtml.golden
index 5eb7a2a..84ed364 100644
--- a/cmd/benchstat/testdata/oldnewhtml.golden
+++ b/cmd/benchstat/testdata/oldnewhtml.golden
@@ -1,3 +1,8 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Performance Result Comparison</title>
 <style>
 .benchstat { border-collapse: collapse; }
 .benchstat th:nth-child(1) { text-align: left; }
@@ -7,6 +12,8 @@
 .benchstat .better td.delta { font-weight: bold; }
 .benchstat .worse td.delta { font-weight: bold; color: #c00; }
 </style>
+</head>
+<body>
 
 <table class='benchstat oldnew'>
 <tr class='configs'><th><th>old.txt<th>new.txt
@@ -95,3 +102,5 @@
 </tbody>
 
 </table>
+</body>
+</html>