1 function LayeringTextStage(element, options)
3 Stage.call(this, element, options);
4 this._textElementParent = this.element;
5 this._textElements = [];
6 this._textItemIndex = 0;
8 this._animateCounts = 0;
11 LayeringTextStage.textItems = [
12 "<div class='text-layer'>",
13 "<h2>Types of benchmarks</h2>",
17 "<li>word processing software</li>",
18 "<li>tool software of CAD</li>",
19 "<li>user's application software (i.e.: MIS)</li>",
24 "<li>contains key codes</li>",
25 "<li>normally abstracted from actual program</li>",
26 "<li>popular kernel: Livermore loop</li>",
27 "<li>linpack benchmark (contains basic linear algebra subroutine written in FORTRAN language)</li>",
28 "<li>results are represented in MFLOPS</li>",
31 "<li>Synthetic Benchmark",
33 "<li>Procedure for programming synthetic benchmark:",
35 "<li>take statistics of all types of operations from many application programs</li>",
36 "<li>get proportion of each operation</li>",
37 "<li>write program based on the proportion above</li>",
40 "<li>Types of Synthetic Benchmark are:",
46 "<li>These were the first general purpose industry standard computer benchmarks. They do not necessarily obtain high scores on modern pipelined computers.</li>",
49 "<li>I/O benchmarks</li>",
50 "<li>Database benchmarks: to measure the throughput and response times of database management systems (DBMS')</li>",
51 "<li>Parallel benchmarks: used on machines with multiple cores, processors or systems consisting of multiple machines</li>",
53 "<h2>Common benchmarks</h2>",
55 "<li>Business Applications Performance Corporation (BAPCo)</li>",
56 "<li>Embedded Microprocessor Benchmark Consortium (EEMBC)</li>",
57 "<li>Standard Performance Evaluation Corporation (SPEC), in particular their SPECint and SPECfp</li>",
58 "<li>Transaction Processing Performance Council (TPC)</li>",
59 "<li>Coremark: Embedded computing benchmark</li>",
61 "<h3>Open source benchmarks</h3>",
63 "<li>AIM Multiuser Benchmark: composed of a list of tests that could be mixed to create a 'load mix' that would simulate a specific computer function on any UNIX-type OS.</li>",
64 "<li>Bonnie++: filesystem and hard drive benchmark</li>",
65 "<li>BRL-CAD: cross-platform architecture-agnostic benchmark suite based on multithreaded ray tracing performance; baselined against a VAX-11/780; and used since 1984 for evaluating relative CPU performance, compiler differences, optimization levels, coherency, architecture differences, and operating system differences.</li>",
70 LayeringTextStage.parseTextItem = function(textItem)
73 parseResult.tagStart = textItem.match(/<(.*?)>/g)[0];
74 var spaceIndex = parseResult.tagStart.indexOf(" ");
75 parseResult.nodeName = parseResult.tagStart.substring(1, spaceIndex != -1 ? spaceIndex : parseResult.tagStart.length - 1);
76 parseResult.args = spaceIndex != -1 ? Utilities.parseArguments(parseResult.tagStart.substring(spaceIndex + 1, parseResult.tagStart.length - 1)) : {};
77 var tagEnd = "</" + parseResult.nodeName + ">";
78 parseResult.tagEnd = textItem.endsWith(tagEnd) ? tagEnd : "";
82 LayeringTextStage.isOpeningTextItem = function(textItem)
84 return !LayeringTextStage.parseTextItem(textItem).tagEnd.length;
87 LayeringTextStage.isClosingTextItem = function(textItem)
89 return textItem.indexOf("/") == +1;
92 LayeringTextStage.textItemsFlags = LayeringTextStage.textItems.map(function(textItem)
94 var textItemFlags = {};
95 textItemFlags.isOpening = LayeringTextStage.isOpeningTextItem(textItem);
96 textItemFlags.isClosing = LayeringTextStage.isClosingTextItem(textItem);
100 LayeringTextStage.isColorableTextItem = function(textItemFlags)
102 return !(textItemFlags.isOpening || textItemFlags.isClosing);
105 LayeringTextStage.isInsertableTextItem = function(textItemFlags)
107 return !textItemFlags.isClosing;
110 LayeringTextStage.colorableTextItems = LayeringTextStage.textItemsFlags.filter(function(textItemFlags)
112 return LayeringTextStage.isColorableTextItem(textItemFlags);
115 LayeringTextStage.insertableTextItems = LayeringTextStage.textItemsFlags.filter(function(textItemFlags)
117 return LayeringTextStage.isInsertableTextItem(textItemFlags);
120 LayeringTextStage.colorIndexToTextElementIndex = function(colorIndex)
122 var textElementIndex = 0;
125 for (var textItemIndex = 0; textItemIndex < LayeringTextStage.textItemsFlags.length; ++textItemIndex) {
126 if (LayeringTextStage.isColorableTextItem(LayeringTextStage.textItemsFlags[textItemIndex])) {
127 if (++index > colorIndex)
130 if (LayeringTextStage.isInsertableTextItem(LayeringTextStage.textItemsFlags[textItemIndex]))
134 return textElementIndex;
137 LayeringTextStage.prototype = Object.create(Stage.prototype);
138 LayeringTextStage.prototype.constructor = LayeringTextStage;
140 LayeringTextStage.prototype._nextTextItem = function(textItemFlags)
142 var textItem = LayeringTextStage.textItems[this._textItemIndex];
143 Utilities.extendObject(textItemFlags, LayeringTextStage.textItemsFlags[this._textItemIndex]);
144 this._textItemIndex = (this._textItemIndex + 1) % LayeringTextStage.textItems.length;
148 LayeringTextStage.prototype._previousTextItem = function(textItemFlags)
150 this._textItemIndex = (this._textItemIndex + LayeringTextStage.textItems.length - 1) % LayeringTextStage.textItems.length;
151 Utilities.extendObject(textItemFlags, LayeringTextStage.textItemsFlags[this._textItemIndex]);
152 return LayeringTextStage.textItems[this._textItemIndex];
155 LayeringTextStage.prototype._pushTextElement = function()
157 var textItemFlags = {};
158 var textItem = this._nextTextItem(textItemFlags);
159 for ( ; textItemFlags.isClosing; textItem = this._nextTextItem(textItemFlags))
160 this._textElementParent = this._textElementParent.parentNode;
162 var parseResult = LayeringTextStage.parseTextItem(textItem);
163 textItem = textItem.substring(parseResult.tagStart.length, textItem.length - parseResult.tagEnd.length);
165 var textElement = document.createElement(parseResult.nodeName);
167 for (var attrname in parseResult.args)
168 textElement.setAttribute(attrname, parseResult.args[attrname]);
170 this._textElementParent.appendChild(textElement);
172 if (!parseResult.tagEnd.length)
173 this._textElementParent = textElement;
175 textElement.innerHTML = textItem;
177 this._textElements.push(textElement);
178 return this._textElements.length;
181 LayeringTextStage.prototype._popTextElement = function()
183 var textItemFlags = {};
184 var textItem = this._previousTextItem(textItemFlags);
185 for ( ; textItemFlags.isClosing; textItem = this._previousTextItem(textItemFlags))
186 this._textElementParent = this._textElementParent.lastChild;
188 if (textItemFlags.isOpening)
189 this._textElementParent = this._textElementParent.parentNode;
191 this._textElements[this._textElements.length - 1].remove();
193 this._textElements.pop();
194 return this._textElements.length;
197 LayeringTextStage.prototype._colorTextItem = function(color)
199 var textElementIndex = LayeringTextStage.colorIndexToTextElementIndex(this._colorIndex);
200 for ( ; textElementIndex < this._textElements.length; textElementIndex += LayeringTextStage.insertableTextItems)
201 this._textElements[textElementIndex].style.backgroundColor = color;
204 LayeringTextStage.prototype.animate = function(timeDelta)
206 this._colorTextItem("transparent");
207 this._colorIndex = (this._colorIndex + 1) % LayeringTextStage.colorableTextItems;
208 this._colorTextItem("YellowGreen");
210 var blackTextElements = Math.min(this._textElements.length, LayeringTextStage.insertableTextItems);
212 for ( ; i < this._textElements.length - blackTextElements; ++i)
213 this._textElements[i].style.color = (this._animateCounts & 1) ? "LightYellow" : "white";
215 for ( ; i < this._textElements.length; ++i)
216 this._textElements[i].style.color = "black";
218 ++this._animateCounts;
221 LayeringTextStage.prototype.tune = function(count)
224 return this._textElements.length;
227 for (var i = 0; i < count; ++i)
228 this._pushTextElement();
229 return this._textElements.length;
232 count = Math.min(-count, this._textElements.length);
233 for (var i = 0; i < count; ++i)
234 this._popTextElement();
236 return this._textElements.length;
239 function LayeringTextBenchmark(suite, test, options, recordTable, progressBar)
241 StageBenchmark.call(this, suite, test, options, recordTable, progressBar);
244 LayeringTextBenchmark.prototype = Object.create(StageBenchmark.prototype);
245 LayeringTextBenchmark.prototype.constructor = LayeringTextBenchmark;
247 LayeringTextBenchmark.prototype.createStage = function(element)
249 return new LayeringTextStage(element, this._options);
252 window.benchmarkClient.create = function(suite, test, options, recordTable, progressBar)
254 return new LayeringTextBenchmark(suite, test, options, recordTable, progressBar);