View Javadoc

1   /*
2    * DaCapo Benchmark Maven Plugin
3    * Copyright (C) 2010 Technische Universität Darmstadt
4    * info@scalabench.org
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
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 }