Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Side by Side Diff: move_attributes.html

Issue 23797002: Hack to add accessors for WebIDL attributes. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/HTMLElement.idl ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <html>
2 <head>
3 <script>
4 function shouldBe(str1, str2) {
5 var result1;
6 try {
7 result1 = eval(str1);
8 } catch (e) {
9 result1 = e;
10 }
11 try {
12 result2 = eval(str2);
13 } catch (e) {
14 result2 = e;
15 }
16 if (result1 === result2)
17 document.body.innerHTML += str1 + " === " + str2 + " <span style='color:gree n; font-weight:bold'>PASS</span><br>";
18 else
19 document.body.innerHTML += str1 + " was not " + str2 + ". The left hand side was [" + result1 + "] and the right hand side was [" + result2 + "]. <span styl e='color:red; font-weight:bold'>FAIL</span><br>";
20 }
21
22 function shouldThrow(str) {
23 var result;
24 var thrown = false;
25 try {
26 result = eval(str);
27 } catch (e) {
28 thrown = true;
29 result = e;
30 }
31 if (thrown === true)
32 document.body.innerHTML += str + " threw [" + result + "]. <span style='colo r:green; font-weight:bold'>PASS</span><br>";
33 else
34 document.body.innerHTML += str + " did not throw. The result was [" + result + "]. <span style='color:red; font-weight:bold'>FAIL</span><br>";
35 }
36
37 function log(str) {
38 document.body.innerHTML += str + "<br>";
39 }
40
41 function run(title, repeatNum, func, rounds) {
42 var result = document.getElementById("result");
43 if (!result) {
44 var result = document.createElement("div");
45 document.body.appendChild(result);
46 }
47
48 var rounds = rounds || 5;
49 var times = [];
50 for (var r = 0; r < rounds; r++) {
51 var start = Date.now();
52 func(repeatNum);
53 var time = Date.now() - start;
54 times.push(time * 1e6 / repeatNum);
55 //result.appendChild(document.createTextNode(time));
56 //result.appendChild(document.createElement("br"));
57 }
58
59 times.sort(function (a, b) { return a - b; });
60 var median = times[Math.floor(times.length / 2)];
61 var min = times[0];
62 var max = times[times.length - 1];
63 var sum = 0;
64 var sum2 = 0;
65 for (var i = 0; i < times.length; i++) {
66 sum += times[i];
67 sum2 += times[i] * times[i];
68 }
69 var avg = sum / rounds;
70 var avgTotal = avg * repeatNum / 1e6;
71 var stdev = Math.sqrt(sum2 / rounds - avg * avg);
72
73 result.appendChild(document.createTextNode(title + " : mean=" + avg.toFixed(2) + "ns, min=" + min + "ns, median=" + median + "ns, max=" + max + "ns, stdev=" + stdev.toFixed(2) + "ns, total=" + avgTotal.toFixed(2) + "ms"));
74 result.appendChild(document.createElement("br"));
75 }
76 </script>
77 </head>
78 <body>
79 <script>
80 function checkCorrectness() {
81 div = document.createElement("div");
82 shouldBe('div.hasOwnProperty("testAttrOnHTMLDivElement")', "true");
83 shouldBe('div.hasOwnProperty("testAttrOnHTMLElement")', "true");
84 shouldBe('div.hasOwnProperty("testAttrOnElement")', "true");
85 shouldBe('div.hasOwnProperty("testAttrOnNode")', "true");
86 shouldBe('div.__proto__.hasOwnProperty("testAttrOnHTMLDivElementWithGetterAndS etter")', "true");
87 shouldBe('div.__proto__.__proto__.hasOwnProperty("testAttrOnHTMLElementWithGet terAndSetter")', "true");
88 shouldBe('div.__proto__.__proto__.__proto__.hasOwnProperty("testAttrOnElementW ithGetterAndSetter")', "true");
89 shouldBe('div.__proto__.__proto__.__proto__.__proto__.hasOwnProperty("testAttr OnNodeWithGetterAndSetter")', "true");
90 shouldBe('div.__proto__.hasOwnProperty("testAttrOnHTMLDivElementWithGetterAndS etterExpected")', "true");
91 shouldBe('div.__proto__.__proto__.hasOwnProperty("testAttrOnHTMLElementWithGet terAndSetterExpected")', "true");
92 shouldBe('div.__proto__.__proto__.__proto__.hasOwnProperty("testAttrOnElementW ithGetterAndSetterExpected")', "true");
93 shouldBe('div.__proto__.__proto__.__proto__.__proto__.hasOwnProperty("testAttr OnNodeWithGetterAndSetterExpected")', "true");
94 shouldBe('xhr = new XMLHttpRequest(); xhr.__proto__ = HTMLDivElement.prototype ; xhr.testAttrOnHTMLDivElement', "undefined");
95 /*
96 shouldThrow('xhr = new XMLHttpRequest(); xhr.__proto__ = HTMLDivElement.protot ype; xhr.testAttrOnHTMLDivElementWithGetterAndSetter');
97 shouldThrow('obj = Object.create(div); obj.testAttrOnHTMLDivElement');
98 shouldThrow('obj = Object.create(div); obj.testAttrOnHTMLDivElementWithGetterA ndSetter');
99 */
100 }
101
102 checkCorrectness();
103
104 Object.defineProperty(HTMLDivElement.prototype, "testAttrOnHTMLDivElementWithGet terAndSetterExpected", {
105 get: function() { return this.testAttrOnHTMLDivElement; },
106 set: function(v) { this.testAttrOnHTMLDivElement = v; } });
107 Object.defineProperty(HTMLElement.prototype, "testAttrOnHTMLElementWithGetterAnd SetterExpected", {
108 get: function() { return this.testAttrOnHTMLElement; },
109 set: function(v) { this.testAttrOnHTMLElement = v; } });
110 Object.defineProperty(Element.prototype, "testAttrOnElementWithGetterAndSetterEx pected", {
111 get: function() { return this.testAttrOnElement; },
112 set: function(v) { this.testAttrOnElement = v; } });
113 Object.defineProperty(Node.prototype, "testAttrOnNodeWithGetterAndSetterExpected ", {
114 get: function() { return this.testAttrOnNode; },
115 set: function(v) { this.testAttrOnNode = v; } });
116
117 var repeatNum1 = 20000000;
118 var repeatNum2 = 10000000;
119 var rounds = 10;
120
121 var div = document.createElement("div");
122
123 log("");
124
125 run("div.testAttrOnHTMLDivElement getter", repeatNum1, function(repeatNum) {
126 var div = document.createElement("div");
127 for (var j = 0; j < repeatNum; j++) {
128 div.testAttrOnHTMLDivElement;
129 }
130 }, rounds);
131
132 run("div.testAttrOnHTMLElement getter", repeatNum1, function(repeatNum) {
133 var div = document.createElement("div");
134 for (var j = 0; j < repeatNum; j++) {
135 div.testAttrOnHTMLElement;
136 }
137 }, rounds);
138
139 run("div.testAttrOnElement getter", repeatNum1, function(repeatNum) {
140 var div = document.createElement("div");
141 for (var j = 0; j < repeatNum; j++) {
142 div.testAttrOnElement;
143 }
144 }, rounds);
145
146 run("div.testAttrOnNode getter", repeatNum1, function(repeatNum) {
147 var div = document.createElement("div");
148 for (var j = 0; j < repeatNum; j++) {
149 div.testAttrOnNode;
150 }
151 }, rounds);
152
153 run("div.testAttrOnHTMLDivElementWithGetterAndSetter getter", repeatNum1, functi on(repeatNum) {
154 var div = document.createElement("div");
155 for (var j = 0; j < repeatNum; j++) {
156 div.testAttrOnHTMLDivElementWithGetterAndSetter;
157 }
158 }, rounds);
159
160 run("div.testAttrOnHTMLElementWithGetterAndSetter getter", repeatNum1, function( repeatNum) {
161 var div = document.createElement("div");
162 for (var j = 0; j < repeatNum; j++) {
163 div.testAttrOnHTMLElementWithGetterAndSetter;
164 }
165 }, rounds);
166
167 run("div.testAttrOnElementWithGetterAndSetter getter", repeatNum1, function(repe atNum) {
168 var div = document.createElement("div");
169 for (var j = 0; j < repeatNum; j++) {
170 div.testAttrOnElementWithGetterAndSetter;
171 }
172 }, rounds);
173
174 run("div.testAttrOnNodeWithGetterAndSetter getter", repeatNum1, function(repeatN um) {
175 var div = document.createElement("div");
176 for (var j = 0; j < repeatNum; j++) {
177 div.testAttrOnNodeWithGetterAndSetter;
178 }
179 }, rounds);
180
181 run("div.testAttrOnHTMLDivElementWithGetterAndSetterExpected getter", repeatNum1 , function(repeatNum) {
182 var div = document.createElement("div");
183 for (var j = 0; j < repeatNum; j++) {
184 div.testAttrOnHTMLDivElementWithGetterAndSetterExpected;
185 }
186 }, rounds);
187
188 run("div.testAttrOnHTMLElementWithGetterAndSetterExpected getter", repeatNum1, f unction(repeatNum) {
189 var div = document.createElement("div");
190 for (var j = 0; j < repeatNum; j++) {
191 div.testAttrOnHTMLElementWithGetterAndSetterExpected;
192 }
193 }, rounds);
194
195 run("div.testAttrOnElementWithGetterAndSetterExpected getter", repeatNum1, funct ion(repeatNum) {
196 var div = document.createElement("div");
197 for (var j = 0; j < repeatNum; j++) {
198 div.testAttrOnElementWithGetterAndSetterExpected;
199 }
200 }, rounds);
201
202 run("div.testAttrOnNodeWithGetterAndSetterExpected getter", repeatNum1, function (repeatNum) {
203 var div = document.createElement("div");
204 for (var j = 0; j < repeatNum; j++) {
205 div.testAttrOnNodeWithGetterAndSetterExpected;
206 }
207 }, rounds);
208
209 log("");
210
211 run("div.testAttrOnHTMLDivElement setter", repeatNum2, function(repeatNum) {
212 var div = document.createElement("div");
213 for (var j = 0; j < repeatNum; j++) {
214 div.testAttrOnHTMLDivElement = "";
215 }
216 }, rounds);
217
218 run("div.testAttrOnHTMLElement setter", repeatNum2, function(repeatNum) {
219 var div = document.createElement("div");
220 for (var j = 0; j < repeatNum; j++) {
221 div.testAttrOnHTMLElement = "";
222 }
223 }, rounds);
224
225 run("div.testAttrOnElement setter", repeatNum2, function(repeatNum) {
226 var div = document.createElement("div");
227 for (var j = 0; j < repeatNum; j++) {
228 div.testAttrOnElement = "";
229 }
230 }, rounds);
231
232 run("div.testAttrOnNode setter", repeatNum2, function(repeatNum) {
233 var div = document.createElement("div");
234 for (var j = 0; j < repeatNum; j++) {
235 div.testAttrOnNode = "";
236 }
237 }, rounds);
238
239 run("div.testAttrOnHTMLDivElementWithGetterAndSetter setter", repeatNum2, functi on(repeatNum) {
240 var div = document.createElement("div");
241 for (var j = 0; j < repeatNum; j++) {
242 div.testAttrOnHTMLDivElementWithGetterAndSetter = "";
243 }
244 }, rounds);
245
246 run("div.testAttrOnHTMLElementWithGetterAndSetter setter", repeatNum2, function( repeatNum) {
247 var div = document.createElement("div");
248 for (var j = 0; j < repeatNum; j++) {
249 div.testAttrOnHTMLElementWithGetterAndSetter = "";
250 }
251 }, rounds);
252
253 run("div.testAttrOnElementWithGetterAndSetter setter", repeatNum2, function(repe atNum) {
254 var div = document.createElement("div");
255 for (var j = 0; j < repeatNum; j++) {
256 div.testAttrOnElementWithGetterAndSetter = "";
257 }
258 }, rounds);
259
260 run("div.testAttrOnNodeWithGetterAndSetter setter", repeatNum2, function(repeatN um) {
261 var div = document.createElement("div");
262 for (var j = 0; j < repeatNum; j++) {
263 div.testAttrOnNodeWithGetterAndSetter = "";
264 }
265 }, rounds);
266
267 run("div.testAttrOnHTMLDivElementWithGetterAndSetterExpected setter", repeatNum2 , function(repeatNum) {
268 var div = document.createElement("div");
269 for (var j = 0; j < repeatNum; j++) {
270 div.testAttrOnHTMLDivElementWithGetterAndSetterExpected = "";
271 }
272 }, rounds);
273
274 run("div.testAttrOnHTMLElementWithGetterAndSetterExpected setter", repeatNum2, f unction(repeatNum) {
275 var div = document.createElement("div");
276 for (var j = 0; j < repeatNum; j++) {
277 div.testAttrOnHTMLElementWithGetterAndSetterExpected = "";
278 }
279 }, rounds);
280
281 run("div.testAttrOnElementWithGetterAndSetterExpected setter", repeatNum2, funct ion(repeatNum) {
282 var div = document.createElement("div");
283 for (var j = 0; j < repeatNum; j++) {
284 div.testAttrOnElementWithGetterAndSetterExpected = "";
285 }
286 }, rounds);
287
288 run("div.testAttrOnNodeWithGetterAndSetterExpected setter", repeatNum2, function (repeatNum) {
289 var div = document.createElement("div");
290 for (var j = 0; j < repeatNum; j++) {
291 div.testAttrOnNodeWithGetterAndSetterExpected = "";
292 }
293 }, rounds);
294
295 log("");
296 </script>
297 </body>
298 </html>
OLDNEW
« no previous file with comments | « Source/core/html/HTMLElement.idl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698