Lines 52-80
Link Here
|
52 |
|
52 |
|
53 |
public class Utils { |
53 |
public class Utils { |
54 |
|
54 |
|
55 |
public final static String TTEST_FAILURE_MESSAGE="There is not enough evidence to reject the null hypothesis at the 90% level (Student's t-test)."; |
55 |
public final static double STANDARD_ERROR_THRESHOLD = 0.03; // 3% |
56 |
public final static double STANDARD_ERROR_THRESHOLD = 0.02; // 2% |
|
|
57 |
static final NumberFormat PERCENT_FORMAT = NumberFormat.getPercentInstance(); |
56 |
static final NumberFormat PERCENT_FORMAT = NumberFormat.getPercentInstance(); |
58 |
static { |
57 |
static { |
59 |
PERCENT_FORMAT.setMaximumFractionDigits(1); |
58 |
PERCENT_FORMAT.setMaximumFractionDigits(1); |
60 |
} |
59 |
} |
61 |
public final static String STANDARD_ERROR_THRESHOLD_STRING =PERCENT_FORMAT.format(STANDARD_ERROR_THRESHOLD); |
60 |
public final static String STANDARD_ERROR_THRESHOLD_STRING = PERCENT_FORMAT.format(STANDARD_ERROR_THRESHOLD); |
62 |
public final static String TTEST_MODERATION_MESSAGE="Student's t-test failed at the 90% level but it's moderated with standard error lower than "+STANDARD_ERROR_THRESHOLD_STRING; |
|
|
63 |
public final static String STANDARD_ERROR_MESSAGE="Standard error on this test is higher than "+STANDARD_ERROR_THRESHOLD_STRING; |
61 |
public final static String STANDARD_ERROR_MESSAGE="Standard error on this test is higher than "+STANDARD_ERROR_THRESHOLD_STRING; |
64 |
public final static String OK_IMAGE="OK.gif"; |
62 |
public final static String OK_IMAGE="OK.gif"; |
65 |
public final static String OK_IMAGE_ERR="OK_err.gif"; |
|
|
66 |
public final static String OK_IMAGE_TTEST="OK_ttest.gif"; |
67 |
public final static String OK_IMAGE_WARN="OK_caution.gif"; |
63 |
public final static String OK_IMAGE_WARN="OK_caution.gif"; |
68 |
public final static String FAIL_IMAGE="FAIL.gif"; |
64 |
public final static String FAIL_IMAGE="FAIL.gif"; |
69 |
public final static String FAIL_IMAGE_TTEST="FAIL_ttest.gif"; |
|
|
70 |
public final static String FAIL_IMAGE_ERR="FAIL_err.gif"; |
71 |
public final static String FAIL_IMAGE_WARN="FAIL_caution.gif"; |
65 |
public final static String FAIL_IMAGE_WARN="FAIL_caution.gif"; |
72 |
public final static String FAIL_IMAGE_EXPLAINED="FAIL_greyed.gif"; |
66 |
public final static String FAIL_IMAGE_EXPLAINED="FAIL_greyed.gif"; |
73 |
public final static int OK = 0; |
67 |
public final static int OK = 0; |
74 |
public final static int ERR = 0x1; |
68 |
public final static int ERR = 0x1; |
75 |
public final static int TTEST = 0x2; |
69 |
public final static int TTEST = 0x2; |
76 |
public final static int DEV = 0x4; |
70 |
public final static int DEV = 0x4; |
77 |
private final static int NOT_SIGNIFICANT = ERR | TTEST; |
|
|
78 |
|
71 |
|
79 |
/** |
72 |
/** |
80 |
* @param dimension |
73 |
* @param dimension |
Lines 139-151
Link Here
|
139 |
} |
132 |
} |
140 |
|
133 |
|
141 |
/** |
134 |
/** |
142 |
* @return <html><head><meta http-equiv="Content-Type" |
135 |
* Return <html><head><meta http-equiv="Content-Type" |
143 |
* content="text/html; charset=iso-8859-1"> |
136 |
* content="text/html; charset=iso-8859-1"> |
144 |
*/ |
137 |
*/ |
145 |
public static String HTML_OPEN = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">"; |
138 |
public static String HTML_OPEN = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">"; |
146 |
|
139 |
|
147 |
/** |
140 |
/** |
148 |
* @return "</html>". |
141 |
* Return "</html>". |
149 |
*/ |
142 |
*/ |
150 |
public static String HTML_CLOSE = "</html>"; |
143 |
public static String HTML_CLOSE = "</html>"; |
151 |
|
144 |
|
Lines 170-176
Link Here
|
170 |
String description; |
163 |
String description; |
171 |
|
164 |
|
172 |
/** |
165 |
/** |
173 |
* |
166 |
* |
174 |
* @param name |
167 |
* @param name |
175 |
* the value specifed for the key config in the |
168 |
* the value specifed for the key config in the |
176 |
* eclipse.perf.config system.property key value listings. |
169 |
* eclipse.perf.config system.property key value listings. |
Lines 183-195
Link Here
|
183 |
this.name = name; |
176 |
this.name = name; |
184 |
this.description = description; |
177 |
this.description = description; |
185 |
} |
178 |
} |
186 |
|
179 |
|
187 |
public String getName() { |
180 |
public String getName() { |
188 |
return name; |
181 |
return name; |
189 |
} |
182 |
} |
190 |
|
183 |
|
191 |
public boolean descriptionMatches(String description) { |
184 |
public boolean descriptionMatches(String descr) { |
192 |
return description.equals(this.description); |
185 |
return descr.equals(this.description); |
193 |
} |
186 |
} |
194 |
} |
187 |
} |
195 |
|
188 |
|
Lines 218-224
Link Here
|
218 |
/** |
211 |
/** |
219 |
* Queries database with variation composed of buildIdPattern, config and |
212 |
* Queries database with variation composed of buildIdPattern, config and |
220 |
* jvm. |
213 |
* jvm. |
221 |
* |
214 |
* |
222 |
* @return Array of scenarios. |
215 |
* @return Array of scenarios. |
223 |
*/ |
216 |
*/ |
224 |
public static Scenario[] getScenarios(String buildIdPattern, String scenarioPattern, String config, String jvm) { |
217 |
public static Scenario[] getScenarios(String buildIdPattern, String scenarioPattern, String config, String jvm) { |
Lines 232-238
Link Here
|
232 |
|
225 |
|
233 |
/** |
226 |
/** |
234 |
* Creates a Variations object using build id pattern, config and jvm. |
227 |
* Creates a Variations object using build id pattern, config and jvm. |
235 |
* |
228 |
* |
236 |
* @param buildIdPattern |
229 |
* @param buildIdPattern |
237 |
* @param config |
230 |
* @param config |
238 |
* @param jvm |
231 |
* @param jvm |
Lines 291-303
Link Here
|
291 |
|
284 |
|
292 |
/** |
285 |
/** |
293 |
* Utility method to copy a file. |
286 |
* Utility method to copy a file. |
294 |
* |
287 |
* |
295 |
* @param src - |
288 |
* @param src the source file. |
296 |
* the source file. |
289 |
* @param dest the destination. |
297 |
* @param dest - |
|
|
298 |
* the destination. |
299 |
*/ |
290 |
*/ |
300 |
public static void copyFile(File src, String dest) { |
291 |
private static void copyFile(File src, File dest) { |
301 |
|
292 |
|
302 |
try { |
293 |
try { |
303 |
InputStream in = new FileInputStream(src); |
294 |
InputStream in = new FileInputStream(src); |
Lines 316-326
Link Here
|
316 |
e.printStackTrace(); |
307 |
e.printStackTrace(); |
317 |
} |
308 |
} |
318 |
} |
309 |
} |
|
|
310 |
public static void copyImages(File images, File output) { |
311 |
copyFile(new File(images, Utils.FAIL_IMAGE), new File(output, Utils.FAIL_IMAGE)); |
312 |
copyFile(new File(images, Utils.FAIL_IMAGE_EXPLAINED), new File(output, Utils.FAIL_IMAGE_EXPLAINED)); |
313 |
copyFile(new File(images, Utils.FAIL_IMAGE_WARN), new File(output, Utils.FAIL_IMAGE_WARN)); |
314 |
copyFile(new File(images, Utils.OK_IMAGE), new File(output, Utils.OK_IMAGE)); |
315 |
copyFile(new File(images, Utils.OK_IMAGE_WARN), new File(output, Utils.OK_IMAGE_WARN)); |
316 |
} |
317 |
public static void copyScripts(File scripts, File output) { |
318 |
copyFile(new File(scripts, "ToolTip.css"), new File(output, "ToolTip.css")); |
319 |
copyFile(new File(scripts, "ToolTip.js"), new File(output, "ToolTip.js")); |
320 |
} |
319 |
|
321 |
|
320 |
/** |
322 |
/** |
321 |
* Returns a LineGraph object representing measurements for a scenario over |
323 |
* Returns a LineGraph object representing measurements for a scenario over |
322 |
* builds. |
324 |
* builds. |
323 |
* |
325 |
* |
324 |
* @param t - |
326 |
* @param t - |
325 |
* the scenario object. |
327 |
* the scenario object. |
326 |
* @param dimensionName - |
328 |
* @param dimensionName - |
Lines 368-374
Link Here
|
368 |
Color color = black; |
370 |
Color color = black; |
369 |
if (buildID.startsWith("N")) |
371 |
if (buildID.startsWith("N")) |
370 |
color = yellow; |
372 |
color = yellow; |
371 |
|
373 |
|
372 |
graph.addItem("main", label, dim.getDisplayValue(value), value, color, true, getDateFromBuildID(buildID), true); |
374 |
graph.addItem("main", label, dim.getDisplayValue(value), value, color, true, getDateFromBuildID(buildID), true); |
373 |
continue; |
375 |
continue; |
374 |
} |
376 |
} |
Lines 392-398
Link Here
|
392 |
continue; |
394 |
continue; |
393 |
} else if (buildID.startsWith("N")) |
395 |
} else if (buildID.startsWith("N")) |
394 |
continue; |
396 |
continue; |
395 |
|
397 |
|
396 |
for (int i=0;i<currentBuildIdPrefixes.size();i++){ |
398 |
for (int i=0;i<currentBuildIdPrefixes.size();i++){ |
397 |
if (buildID.startsWith(currentBuildIdPrefixes.get(i).toString())&&!currentFound) { |
399 |
if (buildID.startsWith(currentBuildIdPrefixes.get(i).toString())&&!currentFound) { |
398 |
graph.addItem("main", buildID, dim.getDisplayValue(value), value, black, false, getDateFromBuildID(buildID), false); |
400 |
graph.addItem("main", buildID, dim.getDisplayValue(value), value, black, false, getDateFromBuildID(buildID), false); |
Lines 410-416
Link Here
|
410 |
|
412 |
|
411 |
/** |
413 |
/** |
412 |
* Prints a LineGraph object as a gif |
414 |
* Prints a LineGraph object as a gif |
413 |
* |
415 |
* |
414 |
* @param p - |
416 |
* @param p - |
415 |
* the LineGraph object. |
417 |
* the LineGraph object. |
416 |
* @param output - |
418 |
* @param output - |
Lines 450-456
Link Here
|
450 |
/** |
452 |
/** |
451 |
* Utility method which returns HTML code representing an image map for a |
453 |
* Utility method which returns HTML code representing an image map for a |
452 |
* LineGraph object. |
454 |
* LineGraph object. |
453 |
* |
455 |
* |
454 |
* @param p - |
456 |
* @param p - |
455 |
* the LineGraph object. |
457 |
* the LineGraph object. |
456 |
* @param imageSource - |
458 |
* @param imageSource - |
Lines 470-476
Link Here
|
470 |
|
472 |
|
471 |
/** |
473 |
/** |
472 |
* A utility which returns the index of a given buildId in an array. |
474 |
* A utility which returns the index of a given buildId in an array. |
473 |
* |
475 |
* |
474 |
* @param timeSeriesLabels - |
476 |
* @param timeSeriesLabels - |
475 |
* array of buildIds |
477 |
* array of buildIds |
476 |
* @param buildId - |
478 |
* @param buildId - |
Lines 586-592
Link Here
|
586 |
|
588 |
|
587 |
/** |
589 |
/** |
588 |
* Returns the date/time from the build id in format yyyymmddhm |
590 |
* Returns the date/time from the build id in format yyyymmddhm |
589 |
* |
591 |
* |
590 |
* @param buildId |
592 |
* @param buildId |
591 |
* @return date/time in format YYYYMMDDHHMM, ie. 200504060010 |
593 |
* @return date/time in format YYYYMMDDHHMM, ie. 200504060010 |
592 |
*/ |
594 |
*/ |
Lines 650-662
Link Here
|
650 |
out = new PrintWriter(new FileWriter(new File(outputFile))); |
652 |
out = new PrintWriter(new FileWriter(new File(outputFile))); |
651 |
out.println(Utils.HTML_OPEN + "</head><body>\n"); |
653 |
out.println(Utils.HTML_OPEN + "</head><body>\n"); |
652 |
out.println("<h3>Summary of Elapsed Process Variation Coefficients</h3>\n"+ |
654 |
out.println("<h3>Summary of Elapsed Process Variation Coefficients</h3>\n"+ |
653 |
"<p> This table provides a bird's eye view of variability in elapsed process times\n"+ |
655 |
"<p> This table provides a bird's eye view of variability in elapsed process times\n"+ |
654 |
"for baseline and current build stream performance scenarios." + |
656 |
"for baseline and current build stream performance scenarios." + |
655 |
" This summary is provided to facilitate the identification of scenarios that should be examined due to high variability." + |
657 |
" This summary is provided to facilitate the identification of scenarios that should be examined due to high variability." + |
656 |
"The variability for each scenario is expressed as a <a href=\"http://en.wikipedia.org/wiki/Coefficient_of_variation\">coefficient\n"+ |
658 |
"The variability for each scenario is expressed as a <a href=\"http://en.wikipedia.org/wiki/Coefficient_of_variation\">coefficient\n"+ |
657 |
"of variation</a> (CV). The CV is calculated by dividing the <b>standard deviation\n"+ |
659 |
"of variation</a> (CV). The CV is calculated by dividing the <b>standard deviation\n"+ |
658 |
"of the elapse process time over builds</b> by the <b>average elapsed process\n"+ |
660 |
"of the elapse process time over builds</b> by the <b>average elapsed process\n"+ |
659 |
"time over builds</b> and multiplying by 100.\n"+ |
661 |
"time over builds</b> and multiplying by 100.\n"+ |
660 |
"</p><p>High CV values may be indicative of any of the following:<br></p>\n"+ |
662 |
"</p><p>High CV values may be indicative of any of the following:<br></p>\n"+ |
661 |
"<ol><li> an unstable performance test. </li>\n"+ |
663 |
"<ol><li> an unstable performance test. </li>\n"+ |
662 |
"<ul><li>may be evidenced by an erratic elapsed process line graph.<br><br></li></ul>\n"+ |
664 |
"<ul><li>may be evidenced by an erratic elapsed process line graph.<br><br></li></ul>\n"+ |
Lines 665-692
Link Here
|
665 |
"<li>unstable testing hardware.\n" + |
667 |
"<li>unstable testing hardware.\n" + |
666 |
"<ul><li>consistent higher CV values for one test configuration as compared to others across" + |
668 |
"<ul><li>consistent higher CV values for one test configuration as compared to others across" + |
667 |
" scenarios may be related to hardward problems.</li></ul></li></ol>\n"+ |
669 |
" scenarios may be related to hardward problems.</li></ul></li></ol>\n"+ |
668 |
"<p> Scenarios are listed in alphabetical order in the far right column. A scenario's\n"+ |
670 |
"<p> Scenarios are listed in alphabetical order in the far right column. A scenario's\n"+ |
669 |
"variation coefficients (CVs) are in columns to the left for baseline and current\n"+ |
671 |
"variation coefficients (CVs) are in columns to the left for baseline and current\n"+ |
670 |
"build streams for each test configuration. Scenarios with CVs > 10% are highlighted\n"+ |
672 |
"build streams for each test configuration. Scenarios with CVs > 10% are highlighted\n"+ |
671 |
"in yellow (10%<CV><CV<20%) and orange(CV>20%). </p>\n"+ |
673 |
"in yellow (10%<CV><CV<20%) and orange(CV>20%). </p>\n"+ |
672 |
"<p> Each CV value links to the scenario's detailed results to allow viewers to\n"+ |
674 |
"<p> Each CV value links to the scenario's detailed results to allow viewers to\n"+ |
673 |
"investigate the variability.</p>\n"); |
675 |
"investigate the variability.</p>\n"); |
674 |
|
676 |
|
675 |
Hashtable cvTable = (Hashtable) rawDataTables.get(scenarios[0]); |
677 |
Hashtable cvTable = (Hashtable) rawDataTables.get(scenarios[0]); |
676 |
String[] configNames = (String[]) cvTable.keySet().toArray(new String[cvTable.size()]); |
678 |
String[] configNames = (String[]) cvTable.keySet().toArray(new String[cvTable.size()]); |
677 |
Arrays.sort(configNames); |
679 |
Arrays.sort(configNames); |
678 |
|
680 |
|
679 |
|
681 |
|
680 |
int configColumns=configNames.length/2; |
682 |
int configColumns=configNames.length/2; |
681 |
out.println("<table border=\"1\"><tr>" + |
683 |
out.println("<table border=\"1\"><tr>" + |
682 |
"<td colspan=\""+configColumns+"\"><b>Baseline CVs</b></td>"+ |
684 |
"<td colspan=\""+configColumns+"\"><b>Baseline CVs</b></td>"+ |
683 |
"<td colspan=\""+configColumns+"\"><b>Current Build Stream CVs</b></td>"+ |
685 |
"<td colspan=\""+configColumns+"\"><b>Current Build Stream CVs</b></td>"+ |
684 |
"<td rowspan=\"2\"><b>Scenario Name</b></td>"+ |
686 |
"<td rowspan=\"2\"><b>Scenario Name</b></td>"+ |
685 |
"</tr><tr>"); |
687 |
"</tr><tr>"); |
686 |
|
688 |
|
687 |
|
689 |
|
688 |
for (int i = 0; i < configNames.length; i++) { |
690 |
for (int i = 0; i < configNames.length; i++) { |
689 |
//configNames here have prefix cConfig- or bConfig- depending on whether the data comes from |
691 |
//configNames here have prefix cConfig- or bConfig- depending on whether the data comes from |
690 |
//current build stream data or baseline data. |
692 |
//current build stream data or baseline data. |
691 |
out.print("<td>" + ((ConfigDescriptor)configDescriptors.get(configNames[i].substring(8))).description + "</td>"); |
693 |
out.print("<td>" + ((ConfigDescriptor)configDescriptors.get(configNames[i].substring(8))).description + "</td>"); |
692 |
} |
694 |
} |
Lines 696-702
Link Here
|
696 |
Hashtable aCvTable = (Hashtable) rawDataTables.get(scenarios[i]); |
698 |
Hashtable aCvTable = (Hashtable) rawDataTables.get(scenarios[i]); |
697 |
String scenario = scenarios[i]; |
699 |
String scenario = scenarios[i]; |
698 |
String scenarioFile=scenario.replace('#', '.').replace(':', '_').replace('\\', '_')+".html"; |
700 |
String scenarioFile=scenario.replace('#', '.').replace(':', '_').replace('\\', '_')+".html"; |
699 |
|
701 |
|
700 |
for (int j = 0; j < configNames.length; j++) { |
702 |
for (int j = 0; j < configNames.length; j++) { |
701 |
String url=configNames[j].substring(8)+"/"+scenarioFile; |
703 |
String url=configNames[j].substring(8)+"/"+scenarioFile; |
702 |
if (aCvTable.get(configNames[j]) == null) { |
704 |
if (aCvTable.get(configNames[j]) == null) { |
Lines 776-816
Link Here
|
776 |
|
778 |
|
777 |
public static boolean hasConfidentResult(Variations variations, String scenarioName, String baseline, String config) { |
779 |
public static boolean hasConfidentResult(Variations variations, String scenarioName, String baseline, String config) { |
778 |
double[] resultStats = resultStats(variations, scenarioName, baseline, config); |
780 |
double[] resultStats = resultStats(variations, scenarioName, baseline, config); |
779 |
if (resultStats != null) { |
781 |
return (confidenceLevel(resultStats) & ERR) == 0; |
780 |
return resultStats[1] < 0 || resultStats[0] < resultStats[1] || resultStats[2] < STANDARD_ERROR_THRESHOLD; |
|
|
781 |
} |
782 |
return true; |
783 |
} |
782 |
} |
784 |
public static String failureMessage(Variations variations, String scenarioName, String baseline, String config, boolean prefix) { |
783 |
public static String failureMessage(Variations variations, String scenarioName, String baseline, String config) { |
785 |
return failureMessage(resultStats(variations, scenarioName, baseline, config), prefix); |
784 |
return failureMessage(resultStats(variations, scenarioName, baseline, config), true); |
786 |
} |
785 |
} |
787 |
public static String failureMessage(double[] resultStats, boolean prefix) { |
786 |
public static String failureMessage(double[] resultStats, boolean full) { |
788 |
StringBuffer buffer = null; |
787 |
StringBuffer buffer = new StringBuffer(); |
789 |
switch (confidenceLevel(resultStats)) { |
788 |
if (full & (confidenceLevel(resultStats) & ERR) != 0) { |
790 |
case ERR: |
789 |
buffer.append("*** WARNING *** "); |
791 |
buffer = new StringBuffer(); |
790 |
buffer.append(STANDARD_ERROR_MESSAGE); |
792 |
if (prefix) buffer.append("*** INFO *** "); |
791 |
} |
793 |
buffer.append(STANDARD_ERROR_MESSAGE); |
792 |
if (!full) buffer.append("<small><font color=\"gray\"> "); |
794 |
buffer.append(" ("); |
793 |
if (resultStats == null) { |
795 |
buffer.append(PERCENT_FORMAT.format(resultStats[2])); |
794 |
buffer.append('?'); |
796 |
buffer.append(")"); |
795 |
} else { |
797 |
break; |
796 |
double deviation = resultStats[3]==0 ? 0 : -resultStats[3]; |
798 |
case TTEST: |
797 |
if (deviation > 0) { |
799 |
buffer = new StringBuffer(); |
798 |
buffer.append('+'); |
800 |
if (prefix) buffer.append("*** INFO *** "); |
799 |
} |
801 |
buffer.append(TTEST_MODERATION_MESSAGE); |
800 |
buffer.append(PERCENT_FORMAT.format(deviation)); |
802 |
buffer.append(" ("); |
801 |
buffer.append(" (±"); |
803 |
buffer.append(PERCENT_FORMAT.format(resultStats[2])); |
802 |
buffer.append(PERCENT_FORMAT.format(resultStats[2])); |
804 |
buffer.append(")"); |
803 |
buffer.append(")"); |
805 |
break; |
|
|
806 |
case TTEST|ERR: |
807 |
buffer = new StringBuffer(); |
808 |
if (prefix) buffer.append("*** WARNING *** "); |
809 |
buffer.append(TTEST_FAILURE_MESSAGE); |
810 |
break; |
811 |
default: |
812 |
return null; |
813 |
} |
804 |
} |
|
|
805 |
if (!full) buffer.append("</font></small>"); |
814 |
return buffer.toString(); |
806 |
return buffer.toString(); |
815 |
} |
807 |
} |
816 |
public static int confidenceLevel(double[] resultStats) { |
808 |
public static int confidenceLevel(double[] resultStats) { |
Lines 860-900
Link Here
|
860 |
public static String getImage(int confidence, boolean hasExplanation) { |
852 |
public static String getImage(int confidence, boolean hasExplanation) { |
861 |
boolean scenarioFailed = (confidence & DEV) != 0; |
853 |
boolean scenarioFailed = (confidence & DEV) != 0; |
862 |
String image = null; |
854 |
String image = null; |
863 |
|
855 |
|
864 |
if (scenarioFailed) { |
856 |
if (scenarioFailed) { |
865 |
if (hasExplanation) { |
857 |
if (hasExplanation) { |
866 |
image = FAIL_IMAGE_EXPLAINED; |
858 |
image = FAIL_IMAGE_EXPLAINED; |
|
|
859 |
} else if ((confidence & ERR) != 0) { |
860 |
image = FAIL_IMAGE_WARN; |
867 |
} else { |
861 |
} else { |
868 |
switch (confidence) { |
862 |
image = FAIL_IMAGE; |
869 |
default: |
|
|
870 |
image = FAIL_IMAGE; |
871 |
break; |
872 |
case TTEST: |
873 |
image = FAIL_IMAGE_TTEST; |
874 |
break; |
875 |
case ERR: |
876 |
image = FAIL_IMAGE_ERR; |
877 |
break; |
878 |
case NOT_SIGNIFICANT: |
879 |
image = FAIL_IMAGE_WARN; |
880 |
break; |
881 |
} |
882 |
} |
863 |
} |
883 |
} else { |
864 |
} else if ((confidence & ERR) != 0) { |
884 |
switch (confidence) { |
865 |
image = OK_IMAGE_WARN; |
885 |
default: |
866 |
} else { |
886 |
image = OK_IMAGE; |
867 |
image = OK_IMAGE; |
887 |
break; |
|
|
888 |
case TTEST: |
889 |
image = OK_IMAGE_TTEST; |
890 |
break; |
891 |
case ERR: |
892 |
image = OK_IMAGE_ERR; |
893 |
break; |
894 |
case NOT_SIGNIFICANT: |
895 |
image = OK_IMAGE_WARN; |
896 |
break; |
897 |
} |
898 |
} |
868 |
} |
899 |
return image; |
869 |
return image; |
900 |
} |
870 |
} |