SkQP: make report.html smaller
Change-Id: Ie43bf83fbd94fdf7edc79cfe403b01474894199d Reviewed-on: https://skia-review.googlesource.com/99280 Reviewed-by: Hal Canary <halcanary@google.com> Commit-Queue: Hal Canary <halcanary@google.com>
This commit is contained in:
parent
7b3415cb10
commit
c341d3829d
@ -31,6 +31,7 @@
|
|||||||
#define PATH_IMG_PNG "image.png"
|
#define PATH_IMG_PNG "image.png"
|
||||||
#define PATH_ERR_PNG "errors.png"
|
#define PATH_ERR_PNG "errors.png"
|
||||||
#define PATH_REPORT "report.html"
|
#define PATH_REPORT "report.html"
|
||||||
|
#define PATH_CSV "out.csv"
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -199,28 +200,7 @@ float Check(const uint32_t* pixels,
|
|||||||
return (float)badness;
|
return (float)badness;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MakeReport(const char* report_directory_path) {
|
static constexpr char kDocHead[] =
|
||||||
SkASSERT_RELEASE(sk_isdir(report_directory_path));
|
|
||||||
std::lock_guard<std::mutex> lock(gMutex);
|
|
||||||
{
|
|
||||||
SkFILEWStream csvOut(SkOSPath::Join(report_directory_path, "out.csv").c_str());
|
|
||||||
SkASSERT_RELEASE(csvOut.isValid());
|
|
||||||
if (!csvOut.isValid()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (const Run& run : gErrors) {
|
|
||||||
SkString line = SkStringPrintf("\"%s\",\"%s\",%d,%d\n",
|
|
||||||
run.fBackend.c_str(), run.fGM.c_str(),
|
|
||||||
run.fMaxerror, run.fBadpixels);
|
|
||||||
csvOut.write(line.c_str(), line.size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SkFILEWStream out(SkOSPath::Join(report_directory_path, PATH_REPORT).c_str());
|
|
||||||
if (!out.isValid()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
out.writeText(
|
|
||||||
"<!doctype html>\n"
|
"<!doctype html>\n"
|
||||||
"<html lang=\"en\">\n"
|
"<html lang=\"en\">\n"
|
||||||
"<head>\n"
|
"<head>\n"
|
||||||
@ -228,42 +208,85 @@ bool MakeReport(const char* report_directory_path) {
|
|||||||
"<title>SkQP Report</title>\n"
|
"<title>SkQP Report</title>\n"
|
||||||
"<style>\n"
|
"<style>\n"
|
||||||
"img { max-width:48%; border:1px green solid; }\n"
|
"img { max-width:48%; border:1px green solid; }\n"
|
||||||
"img.i { background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSU"
|
"img.i { background-image:url('data:image/png;base64,iVBORw0KGgoA"
|
||||||
"hEUgAAABAAAAAQCAAAAAA6mKC9AAAAAXNSR0IArs4c6QAAAAJiS0dEAP+Hj8y/AAAACXBI"
|
"AAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAAXNSR0IArs4c6QAAAAJiS0dEAP+H"
|
||||||
"WXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH3gUBEi4DGRAQYgAAAB1JREFUGNNjfMoAAVJQmo"
|
"j8y/AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH3gUBEi4DGRAQYgAAAB1J"
|
||||||
"kBDdBHgPE/lPFsYN0BABdaAwN6tehMAAAAAElFTkSuQmCC'); }\n"
|
"REFUGNNjfMoAAVJQmokBDdBHgPE/lPFsYN0BABdaAwN6tehMAAAAAElFTkSuQmCC"
|
||||||
|
"'); }\n"
|
||||||
"</style>\n"
|
"</style>\n"
|
||||||
|
"<script>\n"
|
||||||
|
"function ce(t) { return document.createElement(t); }\n"
|
||||||
|
"function ct(n) { return document.createTextNode(n); }\n"
|
||||||
|
"function ac(u,v) { return u.appendChild(v); }\n"
|
||||||
|
"function br(u) { ac(u, ce(\"br\")); }\n"
|
||||||
|
"function ma(s, c) { var a = ce(\"a\"); a.href = s; ac(a, c); return a; }\n"
|
||||||
|
"function f(backend, gm, e1, e2) {\n"
|
||||||
|
" var b = ce(\"div\");\n"
|
||||||
|
" var x = ce(\"h2\");\n"
|
||||||
|
" var t = backend + \"/\" + gm;\n"
|
||||||
|
" ac(x, ct(t));\n"
|
||||||
|
" ac(b, x);\n"
|
||||||
|
" ac(b, ct(\"backend: \" + backend));\n"
|
||||||
|
" br(b);\n"
|
||||||
|
" ac(b, ct(\"gm name: \" + gm));\n"
|
||||||
|
" br(b);\n"
|
||||||
|
" ac(b, ct(\"maximum error: \" + e1));\n"
|
||||||
|
" br(b);\n"
|
||||||
|
" ac(b, ct(\"bad pixel counts: \" + e2));\n"
|
||||||
|
" br(b);\n"
|
||||||
|
" var i = ce(\"img\");\n"
|
||||||
|
" i.src = t + \"/image.png\";\n"
|
||||||
|
" i.alt = \"img\";\n"
|
||||||
|
" i.classList.add(\"i\");\n"
|
||||||
|
" ac(b, ma(i.src, i));\n"
|
||||||
|
" i = ce(\"img\");\n"
|
||||||
|
" i.src = t + \"/errors.png\";\n"
|
||||||
|
" i.alt = \"img\";\n"
|
||||||
|
" ac(b, ma(i.src, i));\n"
|
||||||
|
" br(b);\n"
|
||||||
|
" ac(b, ma(t + \"/max.png\", ct(\"max\")));\n"
|
||||||
|
" ac(b, ma(t + \"/min.png\", ct(\"min\")));\n"
|
||||||
|
" ac(b, ce(\"hr\"));\n"
|
||||||
|
" ac(document.body, b);\n"
|
||||||
|
"}\n"
|
||||||
|
"function bar() {\n";
|
||||||
|
|
||||||
|
static constexpr char kDocTail[] =
|
||||||
|
"}\n"
|
||||||
|
"</script>\n"
|
||||||
"</head>\n"
|
"</head>\n"
|
||||||
"<body>\n"
|
"<body onload=\"bar()\">\n"
|
||||||
"<h1>SkQP Report</h1>\n"
|
"<h1>SkQP Report</h1>\n"
|
||||||
"<hr>\n");
|
"<hr>\n"
|
||||||
|
"</body>\n"
|
||||||
|
"</html>\n";
|
||||||
|
|
||||||
|
static void write(SkWStream* wStream, const SkString& text) {
|
||||||
|
wStream->write(text.c_str(), text.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MakeReport(const char* report_directory_path) {
|
||||||
|
SkASSERT_RELEASE(sk_isdir(report_directory_path));
|
||||||
|
std::lock_guard<std::mutex> lock(gMutex);
|
||||||
|
SkFILEWStream csvOut(SkOSPath::Join(report_directory_path, PATH_CSV).c_str());
|
||||||
|
SkFILEWStream htmOut(SkOSPath::Join(report_directory_path, PATH_REPORT).c_str());
|
||||||
|
SkASSERT_RELEASE(csvOut.isValid());
|
||||||
|
if (!csvOut.isValid() || !htmOut.isValid()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
htmOut.writeText(kDocHead);
|
||||||
for (const Run& run : gErrors) {
|
for (const Run& run : gErrors) {
|
||||||
const SkString& backend = run.fBackend;
|
write(&csvOut, SkStringPrintf("\"%s\",\"%s\",%d,%d\n",
|
||||||
const SkString& gm = run.fGM;
|
run.fBackend.c_str(), run.fGM.c_str(),
|
||||||
int maxerror = run.fMaxerror;
|
run.fMaxerror, run.fBadpixels));
|
||||||
int badpixels = run.fBadpixels;
|
if (run.fMaxerror == 0 && run.fBadpixels == 0) {
|
||||||
if (maxerror == 0 && badpixels == 0) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
SkString rdir = SkOSPath::Join(backend.c_str(), gm.c_str());
|
write(&htmOut, SkStringPrintf(" f(\"%s\", \"%s\", %d, %d);\n",
|
||||||
SkString text = SkStringPrintf(
|
run.fBackend.c_str(), run.fGM.c_str(),
|
||||||
"<h2>%s</h2>\n"
|
run.fMaxerror, run.fBadpixels));
|
||||||
"backend: %s\n<br>\n"
|
|
||||||
"gm name: %s\n<br>\n"
|
|
||||||
"maximum error: %d\n<br>\n"
|
|
||||||
"bad pixel counts: %d\n<br>\n"
|
|
||||||
"<a href=\"%s/" PATH_IMG_PNG "\">"
|
|
||||||
"<img src=\"%s/" PATH_IMG_PNG "\" alt='img' class=\"i\"></a>\n"
|
|
||||||
"<a href=\"%s/" PATH_ERR_PNG "\">"
|
|
||||||
"<img src=\"%s/" PATH_ERR_PNG "\" alt='err'></a>\n<br>\n"
|
|
||||||
"<a href=\"%s/" PATH_MAX_PNG "\">max</a>\n<br>\n"
|
|
||||||
"<a href=\"%s/" PATH_MIN_PNG "\">min</a>\n<hr>\n\n",
|
|
||||||
rdir.c_str(), backend.c_str(), gm.c_str(), maxerror, badpixels,
|
|
||||||
rdir.c_str(), rdir.c_str(), rdir.c_str(),
|
|
||||||
rdir.c_str(), rdir.c_str(), rdir.c_str());
|
|
||||||
out.write(text.c_str(), text.size());
|
|
||||||
}
|
}
|
||||||
out.writeText("</body>\n</html>\n");
|
htmOut.writeText(kDocTail);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} // namespace gmkb
|
} // namespace gmkb
|
||||||
|
Loading…
Reference in New Issue
Block a user