Bug 91991

Summary: Web Inspector: Timeline: avoid "IPC message too big" on save/load
Product: WebKit Reporter: eustas.bug
Component: Web Inspector (Deprecated)Assignee: eustas.bug
Status: RESOLVED FIXED    
Severity: Normal CC: apavlov, bweinstein, caseq, dglazkov, eustas.bug, joepeck, keishi, loislo, pfeldman, pmuellr, rik, timothy, webkit.review.bot, yurys
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 92348, 95414    
Bug Blocks:    
Attachments:
Description Flags
Patch
none
Patch
none
Patch
none
Patch
none
Archive of layout-test-results from gce-cr-linux-03
none
Patch
none
Archive of layout-test-results from gce-cr-linux-07
none
Patch
none
Archive of layout-test-results from gce-cr-linux-03
none
Patch
none
Archive of layout-test-results from gce-cr-linux-05
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch none

eustas.bug
Reported 2012-07-23 06:43:33 PDT
Motivation: Now timeline tries to save all data with one chunk. Sometimes this causes "IPC message to big" error. Solution: Refactor Profiles/Heap code - extract chunked IO and reuse it.
Attachments
Patch (41.31 KB, patch)
2012-07-23 06:57 PDT, eustas.bug
no flags
Patch (26.07 KB, patch)
2012-08-03 05:21 PDT, eustas.bug
no flags
Patch (26.26 KB, patch)
2012-08-04 12:45 PDT, eustas.bug
no flags
Patch (29.75 KB, patch)
2012-08-21 01:07 PDT, eustas.bug
no flags
Archive of layout-test-results from gce-cr-linux-03 (388.00 KB, application/zip)
2012-08-21 03:46 PDT, WebKit Review Bot
no flags
Patch (38.15 KB, patch)
2012-08-22 23:02 PDT, eustas.bug
no flags
Archive of layout-test-results from gce-cr-linux-07 (574.83 KB, application/zip)
2012-08-22 23:53 PDT, WebKit Review Bot
no flags
Patch (38.90 KB, patch)
2012-08-23 04:42 PDT, eustas.bug
no flags
Archive of layout-test-results from gce-cr-linux-03 (374.41 KB, application/zip)
2012-08-23 05:18 PDT, WebKit Review Bot
no flags
Patch (39.15 KB, patch)
2012-08-24 01:47 PDT, eustas.bug
no flags
Archive of layout-test-results from gce-cr-linux-05 (619.22 KB, application/zip)
2012-08-24 02:51 PDT, WebKit Review Bot
no flags
Patch (38.95 KB, patch)
2012-08-24 03:02 PDT, eustas.bug
no flags
Patch (38.57 KB, patch)
2012-08-27 05:16 PDT, eustas.bug
no flags
Patch (39.85 KB, patch)
2012-08-29 04:31 PDT, eustas.bug
no flags
Patch (39.83 KB, patch)
2012-08-29 05:18 PDT, eustas.bug
no flags
Patch (39.83 KB, patch)
2012-08-29 07:09 PDT, eustas.bug
no flags
eustas.bug
Comment 1 2012-07-23 06:57:30 PDT
Created attachment 153790 [details] Patch refactoring-preview
Ilya Tikhonovsky
Comment 2 2012-07-23 08:12:25 PDT
Comment on attachment 153790 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=153790&action=review > Source/WebCore/WebCore.gypi:6302 > + 'inspector/front-end/FileUtils.js', please fix WebKit.qrc and WebCore.vcproj files too
Ilya Tikhonovsky
Comment 3 2012-07-24 02:43:36 PDT
Comment on attachment 153790 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=153790&action=review Looks like the existing implementation has bad design. Could you please fix it (replace the callbacks with delegate interface) in the first patch and extract the code into separate file in the second or vice versa. > Source/WebCore/inspector/front-end/FileUtils.js:101 > + * @param {function(WebInspector.HeapSnapshotProxy)=} callback please remove this > Source/WebCore/inspector/front-end/FileUtils.js:110 > + return true; why do we need a return value here
eustas.bug
Comment 4 2012-07-26 01:36:52 PDT
Comment on attachment 153790 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=153790&action=review >> Source/WebCore/inspector/front-end/FileUtils.js:101 >> + * @param {function(WebInspector.HeapSnapshotProxy)=} callback > > please remove this Fixed in https://bugs.webkit.org/show_bug.cgi?id=92348 Please take a look.
Alexander Pavlov (apavlov)
Comment 5 2012-07-26 03:49:20 PDT
Comment on attachment 153790 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=153790&action=review > Source/WebCore/ChangeLog:9 > + Sometimes this causes "IPC message to big" error. Wrong indent > Source/WebCore/ChangeLog:11 > + Solution: Refactor Profiles/Heap code - extract chunked IO and reuse it. Now that you are describing your solution, it's a good idea to mention the FileUtils and quickly cover its contents. > Source/WebCore/ChangeLog:19 > + Ditto. Please remove non-meaningful comments, as they obscure the changelog entry contents. You can remove all of these along with added (WebInspector.*.prototype.*) entries in FileUtils.js (so, retain only the new type names). I believe this was mentioned about a month ago in the webkit-dev mailing list thread named "Please include function-level comments in change log entries". Ultimately, your goal is NOT commenting every entry added by webkit-patch but creating a changelog that will help others understand what your patch does. > Source/WebCore/ChangeLog:70 > + (WebInspector.HeapSnapshotLoader.prototype.startTransfer): You don't need these entries > Source/WebCore/ChangeLog:87 > + (WebInspector.HeapProfileHeader.prototype.load): Ditto > Source/WebCore/ChangeLog:115 > + (WebInspector.ProfilesPanel.prototype._createFileSelectorElement): Ditto > Source/WebCore/inspector/front-end/FileUtils.js:34 > +WebInspector.ChunkedTransferer = function() ChunkedTransferrer. But I believe a more meaningful name is needed, if possible. > Source/WebCore/inspector/front-end/FileUtils.js:42 > + * @ What is this line here for? > Source/WebCore/inspector/front-end/FileUtils.js:56 > + * @param {function(*)=} callback Can you make the parameter/return types more specific? > Source/WebCore/inspector/front-end/FileUtils.js:63 > + dispose: function() What is this method necessary for? It has no non-trivial implementations. > Source/WebCore/inspector/front-end/FileUtils.js:80 > + onChunkTransfered: function() onChunkTransferred > Source/WebCore/inspector/front-end/FileUtils.js:148 > + this._delegate && this._delegate.onTransferStarted(); Please avoid these hacky shortcuts > Source/WebCore/inspector/front-end/FileUtils.js:160 > + this._delegate && this._delegate.onChunkTransfered(); ditto > Source/WebCore/inspector/front-end/FileUtils.js:268 > + lastIndex = lastIndex ? lastIndex : source.length; lastIndex = lastIndex || source.length; (this is one of a few acceptable, JS-specific shortcuts) > Source/WebCore/inspector/front-end/FileUtils.js:271 > + for (var index = startIndex ? startIndex : 0; index < lastIndex; ++index) { ... = startIndex || 0;... > Source/WebCore/inspector/front-end/FileUtils.js:272 > + var character = source.charCodeAt(index); A good rule is to choose variable names that reflect the data they hold. In this case, |character| holds not a real character but its charCode (a number). I understand that this is just code motion, but refactoring is a good reason (and the most common one :)) to clean up the code. > Source/WebCore/inspector/front-end/HeapSnapshotView.js:987 > +WebInspector.HeapSnapshotLoadFileTransferer = function(snapshotHeader, fileReader) ...Transferrer > LayoutTests/ChangeLog:8 > + Motivation: Now timeline tries to save all data with one chunk. LayoutTests ChangeLog entry requires only treatment of changes relevant to the modified tests, as the timeline issue is fixed in Source/WebCore > LayoutTests/inspector/profiler/heap-snapshot-loader.html:112 > + }, Trailing comma
eustas.bug
Comment 6 2012-07-26 05:20:20 PDT
Comment on attachment 153790 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=153790&action=review >> Source/WebCore/ChangeLog:9 >> + Sometimes this causes "IPC message to big" error. > > Wrong indent Got it. >> Source/WebCore/ChangeLog:11 >> + Solution: Refactor Profiles/Heap code - extract chunked IO and reuse it. > > Now that you are describing your solution, it's a good idea to mention the FileUtils and quickly cover its contents. OK. >> Source/WebCore/ChangeLog:19 >> + Ditto. > > Please remove non-meaningful comments, as they obscure the changelog entry contents. You can remove all of these along with added (WebInspector.*.prototype.*) entries in FileUtils.js (so, retain only the new type names). I believe this was mentioned about a month ago in the webkit-dev mailing list thread named "Please include function-level comments in change log entries". > > Ultimately, your goal is NOT commenting every entry added by webkit-patch but creating a changelog that will help others understand what your patch does. Done. Thanks. >> Source/WebCore/ChangeLog:70 >> + (WebInspector.HeapSnapshotLoader.prototype.startTransfer): > > You don't need these entries Fixed. >> Source/WebCore/ChangeLog:87 >> + (WebInspector.HeapProfileHeader.prototype.load): > > Ditto Fixed. >> Source/WebCore/ChangeLog:115 >> + (WebInspector.ProfilesPanel.prototype._createFileSelectorElement): > > Ditto Fixed. >> Source/WebCore/WebCore.gypi:6302 >> + 'inspector/front-end/FileUtils.js', > > please fix WebKit.qrc and WebCore.vcproj files too Fixed. >> Source/WebCore/inspector/front-end/FileUtils.js:34 >> +WebInspector.ChunkedTransferer = function() > > ChunkedTransferrer. But I believe a more meaningful name is needed, if possible. Fixed. >> Source/WebCore/inspector/front-end/FileUtils.js:42 >> + * @ > > What is this line here for? Typo. Fixed. >> Source/WebCore/inspector/front-end/FileUtils.js:56 >> + * @param {function(*)=} callback > > Can you make the parameter/return types more specific? Callbacks are removed in new patch. >> Source/WebCore/inspector/front-end/FileUtils.js:63 >> + dispose: function() > > What is this method necessary for? It has no non-trivial implementations. HeapSnapshotLoader has. >> Source/WebCore/inspector/front-end/FileUtils.js:80 >> + onChunkTransfered: function() > > onChunkTransferred fixed >> Source/WebCore/inspector/front-end/FileUtils.js:110 >> + return true; > > why do we need a return value here Fixed >> Source/WebCore/inspector/front-end/FileUtils.js:148 >> + this._delegate && this._delegate.onTransferStarted(); > > Please avoid these hacky shortcuts OK >> Source/WebCore/inspector/front-end/FileUtils.js:160 >> + this._delegate && this._delegate.onChunkTransfered(); > > ditto Done. >> Source/WebCore/inspector/front-end/FileUtils.js:268 >> + lastIndex = lastIndex ? lastIndex : source.length; > > lastIndex = lastIndex || source.length; (this is one of a few acceptable, JS-specific shortcuts) Fixed. >> Source/WebCore/inspector/front-end/FileUtils.js:271 >> + for (var index = startIndex ? startIndex : 0; index < lastIndex; ++index) { > > ... = startIndex || 0;... Thanks. >> Source/WebCore/inspector/front-end/FileUtils.js:272 >> + var character = source.charCodeAt(index); > > A good rule is to choose variable names that reflect the data they hold. In this case, |character| holds not a real character but its charCode (a number). > > I understand that this is just code motion, but refactoring is a good reason (and the most common one :)) to clean up the code. Fixed, thanks. >> Source/WebCore/inspector/front-end/HeapSnapshotView.js:987 >> +WebInspector.HeapSnapshotLoadFileTransferer = function(snapshotHeader, fileReader) > > ...Transferrer Fixed. >> LayoutTests/ChangeLog:8 >> + Motivation: Now timeline tries to save all data with one chunk. > > LayoutTests ChangeLog entry requires only treatment of changes relevant to the modified tests, as the timeline issue is fixed in Source/WebCore OK. >> LayoutTests/inspector/profiler/heap-snapshot-loader.html:112 >> + }, > > Trailing comma fixed.
eustas.bug
Comment 7 2012-08-03 05:21:47 PDT
Andrey Kosyakov
Comment 8 2012-08-03 05:28:03 PDT
Comment on attachment 156334 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=156334&action=review > Source/WebCore/inspector/front-end/FileUtils.js:198 > + var charCode = source.charCodeAt(index); > + if (charCode === openingBracket) > + ++counter; > + else if (charCode === closingBracket) { > + if (--counter === 0) > + return index + 1; > + } so what if we have brackets within strings?
eustas.bug
Comment 9 2012-08-04 12:40:41 PDT
Comment on attachment 156334 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=156334&action=review >> Source/WebCore/inspector/front-end/FileUtils.js:198 >> + } > > so what if we have brackets within strings? fixed
eustas.bug
Comment 10 2012-08-04 12:45:33 PDT
Yury Semikhatsky
Comment 11 2012-08-05 23:53:31 PDT
Comment on attachment 156538 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=156538&action=review > Source/WebCore/inspector/front-end/FileUtils.js:193 > + if (character === '"' && source[index - 1] !== '\\') What is the performance impact of using character directly instead of its char code for comparison as it used to be? > Source/WebCore/inspector/front-end/TimelineModel.js:167 > + /* TODO: Prevent model recording/reset/etc during loading. */ TODO -> FIXME > Source/WebCore/inspector/front-end/TimelineModel.js:302 > + /* TODO: Show progress indicator */ TODO -> FIXME > Source/WebCore/inspector/front-end/TimelineModel.js:390 > + writer.transferChunk(data.join(",\n")); This way you'll miss ",\n" between records in consecutive chunks.
Andrey Kosyakov
Comment 12 2012-08-06 01:44:05 PDT
Comment on attachment 156538 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=156538&action=review >> Source/WebCore/inspector/front-end/FileUtils.js:193 >> + if (character === '"' && source[index - 1] !== '\\') > > What is the performance impact of using character directly instead of its char code for comparison as it used to be? So how about "\\"?
eustas.bug
Comment 13 2012-08-06 02:52:58 PDT
Comment on attachment 156538 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=156538&action=review >>> Source/WebCore/inspector/front-end/FileUtils.js:193 >>> + if (character === '"' && source[index - 1] !== '\\') >> >> What is the performance impact of using character directly instead of its char code for comparison as it used to be? > > So how about "\\"? @Yury: On synthetic tests direct comparison to char works somewhat faster. @Andrey: Oh, I missed this case =( will be fixed in next patch (est. 20 Aug) >> Source/WebCore/inspector/front-end/TimelineModel.js:390 >> + writer.transferChunk(data.join(",\n")); > > This way you'll miss ",\n" between records in consecutive chunks. Not sure we'll suffer of that, but I'll fix it in next patch.
eustas.bug
Comment 14 2012-08-21 01:07:14 PDT
WebKit Review Bot
Comment 15 2012-08-21 03:46:36 PDT
Comment on attachment 159638 [details] Patch Attachment 159638 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13542700 New failing tests: inspector/timeline/timeline-load.html inspector/timeline/timeline-load-incompatible.html
WebKit Review Bot
Comment 16 2012-08-21 03:46:40 PDT
Created attachment 159647 [details] Archive of layout-test-results from gce-cr-linux-03 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-03 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
Andrey Kosyakov
Comment 17 2012-08-21 07:58:40 PDT
Comment on attachment 159638 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=159638&action=review > Source/WebCore/inspector/front-end/FileUtils.js:97 > + this._isCanceled = false; I think ultimately we just need to pass progress to the file reader. > Source/WebCore/inspector/front-end/FileUtils.js:215 > + if (inString) { > + if (character === '\\') > + ++index; > + else if (character === '"') > + inString = false; > + } else { > + if (character === '"') > + inString = true; > + else if (character === '{') > + ++counter; > + else if (character === '}') { > + if (--counter === 0) > + return index + 1; > + } > + } use switch? > Source/WebCore/inspector/front-end/TimelineModel.js:178 > + return new WebInspector.ChunkedFileReader(file, 5000000, delegate); extract a const for 5000000? > Source/WebCore/inspector/front-end/TimelineModel.js:245 > + this._json = ''; s/_json/_buffer/? Also, double quotes please. > Source/WebCore/inspector/front-end/TimelineModel.js:270 > + while (true) { > + lastIndex = WebInspector.findBalancedCurlyBrackets(data, index); > + if (lastIndex != -1) > + index = lastIndex; > + else > + break; > + } do { index = lastIndex; lastIndex = WebInspector.findBalancedCurlyBrackets(data, index); } while (lastIndex !== -1) > Source/WebCore/inspector/front-end/TimelineModel.js:271 > + var json = data.slice(0, index) + ']'; Double quotes, please. > Source/WebCore/inspector/front-end/TimelineModel.js:275 > + json = '[0' + json; This [0 thingie looks like a hack. Also, double quotes please. > Source/WebCore/inspector/front-end/TimelineModel.js:346 > + case event.target.error.NOT_FOUND_ERR: > + WebInspector.log(WebInspector.UIString('Timeline.loadFromFile: File "%s" not found.', reader.fileName())); > + break; > + case event.target.error.NOT_READABLE_ERR: > + WebInspector.log(WebInspector.UIString('Timeline.loadFromFile: File "%s" is not readable', reader.fileName())); > + break; > + case event.target.error.ABORT_ERR: > + break; > + default: > + WebInspector.log(WebInspector.UIString('Timeline.loadFromFile: An error occurred while reading the file "%s"', reader.fileName())); Please note Pavel has just changed the text for these error messages and changed the way we report errors. See bug 91528 for details. Also, please indent breaks. I would also alias event.target.error to var error for brevity. > Source/WebCore/inspector/front-end/TimelineModel.js:361 > + this._prologue = '[' + JSON.stringify(new String(version)); why do you need new String()? Also, double quotes on strings please. > Source/WebCore/inspector/front-end/TimelineModel.js:382 > + onTransferFinished: function(writer) { > + }, > + > + onError: function(writer, event) { > + }, style: empty functions should be like function foo() { } > Source/WebCore/inspector/front-end/TimelineModel.js:384 > + _pushChunk: function (writer) function (writer) => function(writer) > Source/WebCore/inspector/front-end/TimelineModel.js:395 > + data.push(''); so we'll have an empty line at the beginning of each chunk and an empty line at the end of each chunk. is that the intent? > Source/WebCore/inspector/front-end/TimelineModel.js:400 > + var itemLength = item.length + 2; + 2? > Source/WebCore/inspector/front-end/TimelineModel.js:407 > + if (this._recordIndex == this._records.length) { === > LayoutTests/inspector/timeline/timeline-load.html:74 > + _loadedSize: 0, > + _fileSize: stringifiedData.length, > + > + start: function(output) > + { > + output.startTransfer(); > + delegate.onTransferStarted(this); > + > + var chunk = stringifiedData; > + this._loadedSize += chunk.length; > + output.transferChunk(chunk); > + delegate.onChunkTransferred(this); > + > + output.finishTransfer(); > + delegate.onTransferFinished(this); > + > + model.saveToFile(); > + }, > + > + cancel: function() > + { > + }, > + > + loadedSize: function() > + { > + return this._loadedSize; > + }, > + > + fileSize: function() > + { > + return this._fileSize; > + }, > + > + fileName: function() > + { > + return 'fakeFile'; > + } Please avoid duplicating such large pieces of code. > LayoutTests/inspector/timeline/timeline-load.html:100 > + startTransfer: function() > + { > + delegate.onTransferStarted(this); > + }, > + > + transferChunk: function(chunk) > + { > + saveData += chunk; > + delegate.onChunkTransferred(this); > + }, > + > + finishTransfer: function() > + { > + delegate.onTransferFinished(this); > + checkSaveData(); > + }, > + > + dispose: function() > + { > + }, -ditto- Please avoid duplicating such large pieces of code.
eustas.bug
Comment 18 2012-08-22 22:47:21 PDT
Comment on attachment 159638 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=159638&action=review >> Source/WebCore/inspector/front-end/FileUtils.js:97 >> + this._isCanceled = false; > > I think ultimately we just need to pass progress to the file reader. I think it is better to keep IO and UI distinct. IMHO we could introduce "Cancelable" interface, make "Progress" implement it and pass "Progress" downcasted to "Cancelable". >> Source/WebCore/inspector/front-end/FileUtils.js:215 >> + } > > use switch? Currently switch is 3 times slower. >> Source/WebCore/inspector/front-end/TimelineModel.js:178 >> + return new WebInspector.ChunkedFileReader(file, 5000000, delegate); > > extract a const for 5000000? Done >> Source/WebCore/inspector/front-end/TimelineModel.js:245 >> + this._json = ''; > > s/_json/_buffer/? > Also, double quotes please. Done >> Source/WebCore/inspector/front-end/TimelineModel.js:270 >> + } > > do { > index = lastIndex; > lastIndex = WebInspector.findBalancedCurlyBrackets(data, index); > } while (lastIndex !== -1) OK >> Source/WebCore/inspector/front-end/TimelineModel.js:271 >> + var json = data.slice(0, index) + ']'; > > Double quotes, please. Fixed >> Source/WebCore/inspector/front-end/TimelineModel.js:275 >> + json = '[0' + json; > > This [0 thingie looks like a hack. > Also, double quotes please. Done >> Source/WebCore/inspector/front-end/TimelineModel.js:346 >> + WebInspector.log(WebInspector.UIString('Timeline.loadFromFile: An error occurred while reading the file "%s"', reader.fileName())); > > Please note Pavel has just changed the text for these error messages and changed the way we report errors. See bug 91528 for details. > Also, please indent breaks. > I would also alias event.target.error to var error for brevity. Fixed. >> Source/WebCore/inspector/front-end/TimelineModel.js:361 >> + this._prologue = '[' + JSON.stringify(new String(version)); > > why do you need new String()? > Also, double quotes on strings please. I don't know the real reason. It was so as long as history can be tracked (about 13 months). >> Source/WebCore/inspector/front-end/TimelineModel.js:382 >> + }, > > style: empty functions should be like function foo() { } Fixed >> Source/WebCore/inspector/front-end/TimelineModel.js:384 >> + _pushChunk: function (writer) > > function (writer) => function(writer) fixed >> Source/WebCore/inspector/front-end/TimelineModel.js:395 >> + data.push(''); > > so we'll have an empty line at the beginning of each chunk and an empty line at the end of each chunk. is that the intent? Ooops. Broke this under the influence of Yury's comment. >> Source/WebCore/inspector/front-end/TimelineModel.js:400 >> + var itemLength = item.length + 2; > > + 2? separator length. fixed. >> LayoutTests/inspector/timeline/timeline-load.html:74 >> + } > > Please avoid duplicating such large pieces of code. Done.
eustas.bug
Comment 19 2012-08-22 23:02:39 PDT
Andrey Kosyakov
Comment 20 2012-08-22 23:34:55 PDT
Comment on attachment 160090 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=160090&action=review > Source/WebCore/inspector/front-end/FileUtils.js:225 > + if (data.length == 0) if (!data.length) > Source/WebCore/inspector/front-end/FileUtils.js:303 > +WebInspector.ChunkedFileWriter = function(fileName, delegate) FileOutputStream? > Source/WebCore/inspector/front-end/TimelineModel.js:289 > + if (index === 0) if (!index) > Source/WebCore/inspector/front-end/TimelineModel.js:436 > + if (this._recordIndex == this._records.length) { > + data.push(data.pop() + "]"); > + } drop {} > LayoutTests/inspector/timeline/timeline-load.html:18 > + return { > + _loadedSize: 0, > + _fileSize: input.length, > + Can this be written as our typical class definition, with constructor and prototype?
Andrey Kosyakov
Comment 21 2012-08-22 23:37:00 PDT
(In reply to comment #18) > (From update of attachment 159638 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=159638&action=review > > >> Source/WebCore/inspector/front-end/FileUtils.js:97 > >> + this._isCanceled = false; > > > > I think ultimately we just need to pass progress to the file reader. > > I think it is better to keep IO and UI distinct. > IMHO we could introduce "Cancelable" interface, make "Progress" implement it and pass "Progress" downcasted to "Cancelable". Progress is not a UI-level concept, it's just an interface (ProgressIndicator is the UI component). The idea is that besides being able to canel the operation, we often also want to track its progress.
WebKit Review Bot
Comment 22 2012-08-22 23:53:16 PDT
Comment on attachment 160090 [details] Patch Attachment 160090 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13558624 New failing tests: inspector/timeline/timeline-load.html
WebKit Review Bot
Comment 23 2012-08-22 23:53:20 PDT
Created attachment 160096 [details] Archive of layout-test-results from gce-cr-linux-07 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-07 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
eustas.bug
Comment 24 2012-08-23 04:42:08 PDT
Comment on attachment 160090 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=160090&action=review >> Source/WebCore/inspector/front-end/FileUtils.js:225 >> + if (data.length == 0) > > if (!data.length) fixed >> Source/WebCore/inspector/front-end/FileUtils.js:303 >> +WebInspector.ChunkedFileWriter = function(fileName, delegate) > > FileOutputStream? Sounds good. >> Source/WebCore/inspector/front-end/TimelineModel.js:289 >> + if (index === 0) > > if (!index) fixed >> Source/WebCore/inspector/front-end/TimelineModel.js:436 >> + } > > drop {} fixed >> LayoutTests/inspector/timeline/timeline-load.html:18 >> + > > Can this be written as our typical class definition, with constructor and prototype? Done
eustas.bug
Comment 25 2012-08-23 04:42:39 PDT
WebKit Review Bot
Comment 26 2012-08-23 05:18:09 PDT
Comment on attachment 160129 [details] Patch Attachment 160129 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13560665 New failing tests: inspector/timeline/timeline-load.html
WebKit Review Bot
Comment 27 2012-08-23 05:18:12 PDT
Created attachment 160134 [details] Archive of layout-test-results from gce-cr-linux-03 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-03 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
eustas.bug
Comment 28 2012-08-24 01:47:14 PDT
Created attachment 160358 [details] Patch examine-objects-on-bot
WebKit Review Bot
Comment 29 2012-08-24 02:51:16 PDT
Comment on attachment 160358 [details] Patch Attachment 160358 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/13600061 New failing tests: inspector/timeline/timeline-load.html
WebKit Review Bot
Comment 30 2012-08-24 02:51:20 PDT
Created attachment 160367 [details] Archive of layout-test-results from gce-cr-linux-05 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-05 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
eustas.bug
Comment 31 2012-08-24 03:02:36 PDT
Andrey Kosyakov
Comment 32 2012-08-27 04:31:26 PDT
Comment on attachment 160371 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=160371&action=review > Source/WebCore/inspector/front-end/FileUtils.js:286 > + else if (character === '{') "{" > Source/WebCore/inspector/front-end/FileUtils.js:288 > + else if (character === '}') { ditto > Source/WebCore/inspector/front-end/TimelineModel.js:361 > + onError: function(reader, event) { { => next line > Source/WebCore/inspector/front-end/TimelineModel.js:423 > + } else { > + data.push(""); > + } no need for {} > LayoutTests/inspector/timeline/timeline-load.html:18 > + function callback() { > + model.saveToFile(); > + } { needs to be on its own line. I think you can inline or bind this, though. > LayoutTests/inspector/timeline/timeline-load.html:35 > + if (JSON.stringify(expectedOutput) == JSON.stringify(saveData)) > + InspectorTest.addResult("passed"); > + else > + InspectorTest.addResult("saved data is not equal to restored"); Use InspectorTest.assertEquals() > LayoutTests/inspector/timeline/timeline-load.html:43 > + var mockProgress = new WebInspector.Progress(); This could be out of try block. > LayoutTests/inspector/timeline/timeline-load.html:48 > + } catch (e) { > + InspectorTest.addResult("failed"); > + InspectorTest.completeTest(); > + } Doesn't test harness take care of this? > LayoutTests/inspector/timeline/timeline-test.js:175 > + var half = Math.ceil(length / 2); (length + 1) >> 1
eustas.bug
Comment 33 2012-08-27 05:05:27 PDT
Comment on attachment 160371 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=160371&action=review >> Source/WebCore/inspector/front-end/FileUtils.js:286 >> + else if (character === '{') > > "{" Done >> Source/WebCore/inspector/front-end/FileUtils.js:288 >> + else if (character === '}') { > > ditto Done >> Source/WebCore/inspector/front-end/TimelineModel.js:361 >> + onError: function(reader, event) { > > { => next line fixed >> Source/WebCore/inspector/front-end/TimelineModel.js:423 >> + } > > no need for {} fixed >> LayoutTests/inspector/timeline/timeline-load.html:18 >> + } > > { needs to be on its own line. I think you can inline or bind this, though. Done >> LayoutTests/inspector/timeline/timeline-load.html:35 >> + InspectorTest.addResult("saved data is not equal to restored"); > > Use InspectorTest.assertEquals() Done >> LayoutTests/inspector/timeline/timeline-load.html:48 >> + } > > Doesn't test harness take care of this? Removed >> LayoutTests/inspector/timeline/timeline-test.js:175 >> + var half = Math.ceil(length / 2); > > (length + 1) >> 1 Done
eustas.bug
Comment 34 2012-08-27 05:16:55 PDT
Andrey Kosyakov
Comment 35 2012-08-27 07:42:10 PDT
Comment on attachment 160695 [details] Patch LGTM.
Alexander Pavlov (apavlov)
Comment 36 2012-08-29 02:53:27 PDT
Comment on attachment 160695 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=160695&action=review > Source/WebCore/ChangeLog:9 > + Sometimes this causes "IPC message to big" error. typo: to -> too > Source/WebCore/inspector/front-end/FileUtils.js:161 > + * @param {!string} url "Functions and all value types (boolean, number, and string) are non-nullable by default whether or not they are declared with the Non-nullable operator." (https://developers.google.com/closure/compiler/docs/js-for-compiler#nonnull) > Source/WebCore/inspector/front-end/FileUtils.js:230 > + if (this._isCanceled) Does this check imply that this._output.transferChunk() can cancel the transfer? This doesn't look consistent: the data is transferred in any case but the event is not dispatched in all cases. > Source/WebCore/inspector/front-end/TimelineModel.js:46 > +WebInspector.TimelineModel.TransferChunkLength = 5000000; Having the "Bytes" suffix would be awesome. > Source/WebCore/inspector/front-end/TimelineModel.js:284 > + } while (lastIndex != -1) !== > Source/WebCore/inspector/front-end/TimelineModel.js:292 > + // Prepending "0" to turn string to valid JSON. typo: to -> into > Source/WebCore/inspector/front-end/TimelineModel.js:313 > + for (var i = 1, l = items.length; i < l; ++i) We try to abstain from using "l" as the variable name at all times, which is a general coding practice. You can use "size" instead. > Source/WebCore/inspector/front-end/TimelineModel.js:366 > + switch(error.code) { Whitespace after "switch" > Source/WebCore/inspector/front-end/TimelineModel.js:434 > + if (this._recordIndex == this._records.length) === > LayoutTests/ChangeLog:10 > + * inspector/timeline/timeline-load.html: Turned to test suite to avoid code typo: to -> into > LayoutTests/inspector/timeline/timeline-load.html:95 > +<a href="https://bugs.webkit.org/show_bug.cgi?id=91714">Bug 91714</a> hint: This is usually appended to the test description ("Also tests...") in parentheses on the same line to avoid adding new lines to the golden expectation.
Alexander Pavlov (apavlov)
Comment 37 2012-08-29 03:03:38 PDT
Comment on attachment 160695 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=160695&action=review > Source/WebCore/inspector/front-end/TimelineModel.js:367 > + case error.NOT_FOUND_ERR: After a talk with Andrey, we decided to use the FileError object directly for this switch (so, "FileError.NOT_FOUND_ERR" and so on) to make the origin of these errors a bit more clear.
eustas.bug
Comment 38 2012-08-29 04:30:21 PDT
Comment on attachment 160695 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=160695&action=review >> Source/WebCore/ChangeLog:9 >> + Sometimes this causes "IPC message to big" error. > > typo: to -> too fixed >> Source/WebCore/inspector/front-end/FileUtils.js:161 >> + * @param {!string} url > > "Functions and all value types (boolean, number, and string) are non-nullable by default whether or not they are declared with the Non-nullable operator." (https://developers.google.com/closure/compiler/docs/js-for-compiler#nonnull) OK >> Source/WebCore/inspector/front-end/FileUtils.js:230 >> + if (this._isCanceled) > > Does this check imply that this._output.transferChunk() can cancel the transfer? This doesn't look consistent: the data is transferred in any case but the event is not dispatched in all cases. That is not stated, but the contract is "do not bother delegate after cancel() is invoked". I.e. the party that calls "cancel()" is responsible for proper cancellation of things that are not controlled by reader. And, yes, transfer can be canceled by this._output.transferChunk() >> Source/WebCore/inspector/front-end/TimelineModel.js:46 >> +WebInspector.TimelineModel.TransferChunkLength = 5000000; > > Having the "Bytes" suffix would be awesome. Done. Thanks. >> Source/WebCore/inspector/front-end/TimelineModel.js:284 >> + } while (lastIndex != -1) > > !== Fixed. >> Source/WebCore/inspector/front-end/TimelineModel.js:292 >> + // Prepending "0" to turn string to valid JSON. > > typo: to -> into Fixed. >> Source/WebCore/inspector/front-end/TimelineModel.js:313 >> + for (var i = 1, l = items.length; i < l; ++i) > > We try to abstain from using "l" as the variable name at all times, which is a general coding practice. You can use "size" instead. Done. Thanks. >> Source/WebCore/inspector/front-end/TimelineModel.js:366 >> + switch(error.code) { > > Whitespace after "switch" Fixed >> Source/WebCore/inspector/front-end/TimelineModel.js:434 >> + if (this._recordIndex == this._records.length) > > === Done >> LayoutTests/ChangeLog:10 >> + * inspector/timeline/timeline-load.html: Turned to test suite to avoid code > > typo: to -> into Fixed >> LayoutTests/inspector/timeline/timeline-load.html:95 >> +<a href="https://bugs.webkit.org/show_bug.cgi?id=91714">Bug 91714</a> > > hint: This is usually appended to the test description ("Also tests...") in parentheses on the same line to avoid adding new lines to the golden expectation. Fixed
eustas.bug
Comment 39 2012-08-29 04:31:19 PDT
eustas.bug
Comment 40 2012-08-29 05:18:02 PDT
eustas.bug
Comment 41 2012-08-29 07:09:44 PDT
Alexander Pavlov (apavlov)
Comment 42 2012-08-29 07:16:24 PDT
Comment on attachment 161219 [details] Patch r=me
WebKit Review Bot
Comment 43 2012-08-29 13:23:06 PDT
Comment on attachment 161219 [details] Patch Clearing flags on attachment: 161219 Committed r127039: <http://trac.webkit.org/changeset/127039>
WebKit Review Bot
Comment 44 2012-08-29 13:23:13 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.