1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.scalabench.plugins.dacapo.reporting;
19
20 import java.util.Collections;
21 import java.util.LinkedList;
22 import java.util.List;
23 import java.util.Locale;
24
25 import org.apache.maven.doxia.sink.Sink;
26 import org.apache.maven.reporting.AbstractMavenReportRenderer;
27 import org.dacapo.parser.Config;
28 import org.dacapo.parser.Config.ThreadModel;
29 import org.scalabench.plugins.dacapo.util.SizeNameComparator;
30
31 public class ConfigurationReportRenderer extends AbstractMavenReportRenderer {
32
33 private final Config config;
34
35 private final Locale locale;
36
37 private static final String[] DESCRIPTION_ELEMENTS = new String[] {
38 "short",
39 "long",
40 "author",
41 "license",
42 "copyright",
43 "url",
44 "version",
45 "threads",
46 "repeats"
47 };
48
49 public ConfigurationReportRenderer(Sink sink, Config config, Locale locale) {
50 super(sink);
51 this.config = config;
52 this.locale = locale;
53 }
54
55 @Override
56 public String getTitle() {
57 return formatLocalizedString("report.dacapo.title");
58 }
59
60 @Override
61 protected void renderBody() {
62 startSection(getTitle());
63 renderBodyContent();
64 endSection();
65 }
66
67 private void renderBodyContent() {
68 renderBenchmarkDescription();
69 renderThreadModel();
70 renderInputs();
71 }
72
73 private void renderBenchmarkDescription() {
74 startTable();
75 for (final String key : DESCRIPTION_ELEMENTS) {
76 final String value = config.getDesc(key);
77 if (value == null)
78 continue;
79
80 sink.tableRow();
81 sink.tableCell();
82 sink.text(formatLocalizedString("report.dacapo.config." + key));
83 sink.tableCell_();
84 sink.tableCell();
85 if ("url".equals(key))
86 link(value, value);
87 else
88 sink.text(value);
89 sink.tableCell_();
90 sink.tableRow_();
91 }
92 endTable();
93 }
94
95 private void renderThreadModel() {
96 if (config.getThreadModel() == null)
97 return;
98
99 if (config.getThreadModel() == ThreadModel.SINGLE)
100 paragraph(formatLocalizedString("report.dacapo.threadmodel.single"));
101 else if (config.getThreadModel() == ThreadModel.FIXED)
102 paragraph(formatLocalizedString("report.dacapo.threadmodel.fixed"));
103 else if (config.getThreadModel() == ThreadModel.PER_CPU)
104 paragraph(formatLocalizedString("report.dacapo.threadmodel.perCpu"));
105 }
106
107 private void renderInputs() {
108 final List<String> sizes = new LinkedList<String>(config.getSizes());
109 Collections.sort(sizes, new SizeNameComparator());
110
111 for (final String size : sizes)
112 renderInput(size);
113 }
114
115 private void renderInput(String size) {
116 startSection(formatLocalizedString("report.dacapo.size", size));
117 renderThreadLimit(size);
118 renderArguments(size);
119 renderOutputs(size);
120 endSection();
121 }
122
123 private void renderThreadLimit(String size) {
124 if (config.getThreadModel() == ThreadModel.SINGLE)
125 paragraph(formatLocalizedString("report.dacapo.sizes.threadcount.single"));
126 else if (config.getThreadModel() == ThreadModel.FIXED)
127 paragraph(formatLocalizedString("report.dacapo.sizes.threadcount.fixed", config.getThreadCount(size)));
128 else if (config.getThreadModel() == ThreadModel.PER_CPU)
129 paragraph(formatLocalizedString("report.dacapo.sizes.threadcount.perCpu", config.getThreadFactor(size)));
130 }
131
132 private void renderArguments(String size) {
133 startTable();
134 tableHeader(new String[] { formatLocalizedString("report.dacapo.sizes.arguments.arguments") });
135 for (String arg : config.getArgs(size))
136 tableRow(new String[] { arg });
137 endTable();
138 }
139
140 private void renderOutputs(String size) {
141 paragraph(formatLocalizedString("report.dacapo.sizes.outputs.intro"));
142
143 final String na = formatLocalizedString("report.dacapo.sizes.outputs.na");
144 final String isTextFile = formatLocalizedString("report.dacapo.sizes.outputs.isTextFile");
145 final String isBinaryFile = formatLocalizedString("report.dacapo.sizes.outputs.isBinaryFile");
146
147 startTable();
148 tableHeader(new String[] {
149 formatLocalizedString("report.dacapo.sizes.outputs.file"),
150 formatLocalizedString("report.dacapo.sizes.outputs.textFile"),
151 formatLocalizedString("report.dacapo.sizes.outputs.bytes"),
152 formatLocalizedString("report.dacapo.sizes.outputs.lines"),
153 formatLocalizedString("report.dacapo.sizes.outputs.digest"),
154 });
155 for (String file : config.getOutputs(size)) {
156 tableRow(new String[] {
157 file,
158 config.isTextFile(size, file) ? isTextFile : isBinaryFile,
159 config.hasBytes(size, file) ? Long.toString(config.getBytes(size, file)) : na,
160 config.hasLines(size, file) ? Integer.toString(config.getLines(size, file)) : na,
161 config.hasDigest(size, file) ? config.getDigest(size, file) : na,
162 });
163 }
164 endTable();
165 }
166
167 private String formatLocalizedString(String key, Object... args) {
168 return String.format(locale, ConfigurationReport.getBundle(locale).getString(key), args);
169 }
170 }