Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 throw new Error("Incomplete JSON"); | 115 throw new Error("Incomplete JSON"); |
| 116 this._json = this._json.slice(0, closingBracketIndex + 1); | 116 this._json = this._json.slice(0, closingBracketIndex + 1); |
| 117 this._snapshot.strings = JSON.parse(this._json); | 117 this._snapshot.strings = JSON.parse(this._json); |
| 118 }, | 118 }, |
| 119 | 119 |
| 120 /** | 120 /** |
| 121 * @param {string} chunk | 121 * @param {string} chunk |
| 122 */ | 122 */ |
| 123 write: function(chunk) | 123 write: function(chunk) |
| 124 { | 124 { |
| 125 if (this._state === "parse-snapshot-info") { | |
|
alph
2015/03/01 11:30:13
looks like a hack to the state machine.
why not ju
pfeldman
2015/03/01 12:18:53
Done.
| |
| 126 // Tokenizer takes over input. | |
| 127 this._jsonTokenizer.write(chunk); | |
| 128 return; | |
| 129 } | |
| 130 | |
| 125 this._json += chunk; | 131 this._json += chunk; |
| 126 while (true) { | 132 while (true) { |
| 127 switch (this._state) { | 133 switch (this._state) { |
| 128 case "find-snapshot-info": { | 134 case "find-snapshot-info": { |
| 129 var snapshotToken = "\"snapshot\""; | 135 var snapshotToken = "\"snapshot\""; |
| 130 var snapshotTokenIndex = this._json.indexOf(snapshotToken); | 136 var snapshotTokenIndex = this._json.indexOf(snapshotToken); |
| 131 if (snapshotTokenIndex === -1) | 137 if (snapshotTokenIndex === -1) |
| 132 throw new Error("Snapshot token not found"); | 138 throw new Error("Snapshot token not found"); |
| 139 | |
| 133 this._json = this._json.slice(snapshotTokenIndex + snapshotToken .length + 1); | 140 this._json = this._json.slice(snapshotTokenIndex + snapshotToken .length + 1); |
| 134 this._state = "parse-snapshot-info"; | 141 this._state = "parse-snapshot-info"; |
| 135 this._progress.updateStatus("Loading snapshot info\u2026"); | 142 this._progress.updateStatus("Loading snapshot info\u2026"); |
| 143 this._jsonTokenizer = new WebInspector.TextUtils.BalancedJSONTok enizer(this._writeBalancedJSON.bind(this)); | |
| 144 this._jsonTokenizer.write(this._json); | |
| 136 break; | 145 break; |
| 137 } | 146 } |
| 138 case "parse-snapshot-info": { | 147 case "parse-snapshot-info": { |
| 139 var closingBracketIndex = WebInspector.TextUtils.findBalancedCur lyBrackets(this._json); | 148 console.assert(false, "This should nevet happen.") |
|
alph
2015/03/01 11:30:14
typo
pfeldman
2015/03/01 12:18:53
Done.
| |
| 140 if (closingBracketIndex === -1) | |
| 141 return; | |
| 142 this._snapshot.snapshot = /** @type {!HeapSnapshotHeader} */ (JS ON.parse(this._json.slice(0, closingBracketIndex))); | |
| 143 this._json = this._json.slice(closingBracketIndex); | |
| 144 this._state = "find-nodes"; | |
| 145 break; | 149 break; |
| 146 } | 150 } |
| 147 case "find-nodes": { | 151 case "find-nodes": { |
| 148 var nodesToken = "\"nodes\""; | 152 var nodesToken = "\"nodes\""; |
| 149 var nodesTokenIndex = this._json.indexOf(nodesToken); | 153 var nodesTokenIndex = this._json.indexOf(nodesToken); |
| 150 if (nodesTokenIndex === -1) | 154 if (nodesTokenIndex === -1) |
| 151 return; | 155 return; |
| 152 var bracketIndex = this._json.indexOf("[", nodesTokenIndex); | 156 var bracketIndex = this._json.indexOf("[", nodesTokenIndex); |
| 153 if (bracketIndex === -1) | 157 if (bracketIndex === -1) |
| 154 return; | 158 return; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 258 if (bracketIndex === -1) | 262 if (bracketIndex === -1) |
| 259 return; | 263 return; |
| 260 this._json = this._json.slice(bracketIndex); | 264 this._json = this._json.slice(bracketIndex); |
| 261 this._state = "accumulate-strings"; | 265 this._state = "accumulate-strings"; |
| 262 break; | 266 break; |
| 263 } | 267 } |
| 264 case "accumulate-strings": | 268 case "accumulate-strings": |
| 265 return; | 269 return; |
| 266 } | 270 } |
| 267 } | 271 } |
| 272 }, | |
| 273 | |
| 274 /** | |
| 275 * @param {string} data | |
| 276 */ | |
| 277 _writeBalancedJSON: function(data) | |
| 278 { | |
| 279 this._snapshot.snapshot = /** @type {!HeapSnapshotHeader} */ (JSON.parse (data)); | |
| 280 this._json = this._jsonTokenizer.remainder(); | |
| 281 this._jsonTokenizer = null; | |
| 282 this._state = "find-nodes"; | |
| 268 } | 283 } |
| 269 }; | 284 } |
| OLD | NEW |