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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline/TimelineLoader.js

Issue 1755123003: Timeline: quit using Progress, introduce TimelineLifecycleDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments addressed Created 4 years, 9 months 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @constructor 6 * @constructor
7 * @implements {WebInspector.OutputStream} 7 * @implements {WebInspector.OutputStream}
8 * @implements {WebInspector.OutputStreamDelegate} 8 * @implements {WebInspector.OutputStreamDelegate}
9 * @param {!WebInspector.TimelineModel} model 9 * @param {!WebInspector.TracingModel} model
10 * @param {!WebInspector.Progress} progress 10 * @param {!WebInspector.TimelineLifecycleDelegate} delegate
11 */ 11 */
12 WebInspector.TimelineLoader = function(model, progress) 12 WebInspector.TimelineLoader = function(model, delegate)
13 { 13 {
14 this._model = model; 14 this._model = model;
15 this._delegate = delegate;
15 16
16 /** @type {?function()} */ 17 /** @type {?function()} */
17 this._canceledCallback = null; 18 this._canceledCallback = null;
18 this._progress = progress;
19 this._progress.setTitle(WebInspector.UIString("Loading"));
20 this._progress.setTotalWork(WebInspector.TimelineLoader._totalProgress); // Unknown, will loop the values.
21 19
22 this._state = WebInspector.TimelineLoader.State.Initial; 20 this._state = WebInspector.TimelineLoader.State.Initial;
23 this._buffer = ""; 21 this._buffer = "";
24 this._firstChunk = true; 22 this._firstChunk = true;
25 this._wasCanceledOnce = false;
26 23
27 this._loadedBytes = 0; 24 this._loadedBytes = 0;
28 /** @type {number} */ 25 /** @type {number} */
29 this._totalSize; 26 this._totalSize;
30 this._jsonTokenizer = new WebInspector.TextUtils.BalancedJSONTokenizer(this. _writeBalancedJSON.bind(this), true); 27 this._jsonTokenizer = new WebInspector.TextUtils.BalancedJSONTokenizer(this. _writeBalancedJSON.bind(this), true);
31 } 28 }
32 29
33 /** 30 /**
34 * @param {!WebInspector.TimelineModel} model 31 * @param {!WebInspector.TracingModel} model
35 * @param {!File} file 32 * @param {!File} file
36 * @param {!WebInspector.Progress} progress 33 * @param {!WebInspector.TimelineLifecycleDelegate} delegate
34 * @return {!WebInspector.TimelineLoader}
37 */ 35 */
38 WebInspector.TimelineLoader.loadFromFile = function(model, file, progress) 36 WebInspector.TimelineLoader.loadFromFile = function(model, file, delegate)
39 { 37 {
40 var loader = new WebInspector.TimelineLoader(model, progress); 38 var loader = new WebInspector.TimelineLoader(model, delegate);
41 var fileReader = WebInspector.TimelineLoader._createFileReader(file, loader) ; 39 var fileReader = WebInspector.TimelineLoader._createFileReader(file, loader) ;
42 loader._canceledCallback = fileReader.cancel.bind(fileReader); 40 loader._canceledCallback = fileReader.cancel.bind(fileReader);
43 loader._totalSize = file.size; 41 loader._totalSize = file.size;
44 progress.setTotalWork(loader._totalSize);
45 fileReader.start(loader); 42 fileReader.start(loader);
43 return loader;
46 } 44 }
47 45
48 /** 46 /**
49 * @param {!WebInspector.TimelineModel} model 47 * @param {!WebInspector.TracingModel} model
50 * @param {string} url 48 * @param {string} url
51 * @param {!WebInspector.Progress} progress 49 * @param {!WebInspector.TimelineLifecycleDelegate} delegate
50 * @return {!WebInspector.TimelineLoader}
52 */ 51 */
53 WebInspector.TimelineLoader.loadFromURL = function(model, url, progress) 52 WebInspector.TimelineLoader.loadFromURL = function(model, url, delegate)
54 { 53 {
55 var stream = new WebInspector.TimelineLoader(model, progress); 54 var stream = new WebInspector.TimelineLoader(model, delegate);
56 WebInspector.ResourceLoader.loadAsStream(url, null, stream); 55 WebInspector.ResourceLoader.loadAsStream(url, null, stream);
56 return stream;
57 } 57 }
58 58
59 WebInspector.TimelineLoader.TransferChunkLengthBytes = 5000000;
60
59 /** 61 /**
60 * @param {!File} file 62 * @param {!File} file
61 * @param {!WebInspector.OutputStreamDelegate} delegate 63 * @param {!WebInspector.OutputStreamDelegate} delegate
62 * @return {!WebInspector.ChunkedReader} 64 * @return {!WebInspector.ChunkedReader}
63 */ 65 */
64 WebInspector.TimelineLoader._createFileReader = function(file, delegate) 66 WebInspector.TimelineLoader._createFileReader = function(file, delegate)
65 { 67 {
66 return new WebInspector.ChunkedFileReader(file, WebInspector.TimelineModel.T ransferChunkLengthBytes, delegate); 68 return new WebInspector.ChunkedFileReader(file, WebInspector.TimelineLoader. TransferChunkLengthBytes, delegate);
67 } 69 }
68 70
69
70 WebInspector.TimelineLoader._totalProgress = 100000;
71
72 WebInspector.TimelineLoader.State = { 71 WebInspector.TimelineLoader.State = {
73 Initial: "Initial", 72 Initial: "Initial",
74 LookingForEvents: "LookingForEvents", 73 LookingForEvents: "LookingForEvents",
75 ReadingEvents: "ReadingEvents" 74 ReadingEvents: "ReadingEvents"
76 } 75 }
77 76
78 WebInspector.TimelineLoader.prototype = { 77 WebInspector.TimelineLoader.prototype = {
78 cancel: function()
79 {
80 this._model.reset();
81 this._delegate.loadingComplete(false);
82 this._delegate = null;
83 if (this._canceledCallback)
84 this._canceledCallback();
85 },
86
79 /** 87 /**
80 * @override 88 * @override
81 * @param {string} chunk 89 * @param {string} chunk
82 */ 90 */
83 write: function(chunk) 91 write: function(chunk)
84 { 92 {
93 if (!this._delegate)
94 return;
85 this._loadedBytes += chunk.length; 95 this._loadedBytes += chunk.length;
86 if (this._progress.isCanceled() && !this._wasCanceledOnce) { 96 if (!this._firstChunk)
87 this._wasCanceled = true; 97 this._delegate.loadingProgress(this._totalSize ? this._loadedBytes / this._totalSize : undefined);
88 this._reportErrorAndCancelLoading(); 98
89 return;
90 }
91 if (this._firstChunk)
92 this._progress.setTitle(WebInspector.UIString("Loading\u2026"));
93 if (this._totalSize) {
94 this._progress.setWorked(this._loadedBytes);
95 } else {
96 this._progress.setWorked(this._loadedBytes % WebInspector.TimelineLo ader._totalProgress,
97 WebInspector.UIString("Loaded %s", Number.b ytesToString(this._loadedBytes)));
98 }
99 if (this._state === WebInspector.TimelineLoader.State.Initial) { 99 if (this._state === WebInspector.TimelineLoader.State.Initial) {
100 if (chunk[0] === "{") 100 if (chunk[0] === "{")
101 this._state = WebInspector.TimelineLoader.State.LookingForEvents ; 101 this._state = WebInspector.TimelineLoader.State.LookingForEvents ;
102 else if (chunk[0] === "[") 102 else if (chunk[0] === "[")
103 this._state = WebInspector.TimelineLoader.State.ReadingEvents; 103 this._state = WebInspector.TimelineLoader.State.ReadingEvents;
104 else { 104 else {
105 this._reportErrorAndCancelLoading(WebInspector.UIString("Malform ed timeline data: Unknown JSON format")); 105 this._reportErrorAndCancelLoading(WebInspector.UIString("Malform ed timeline data: Unknown JSON format"));
106 return; 106 return;
107 } 107 }
108 } 108 }
(...skipping 13 matching lines...) Expand all
122 }, 122 },
123 123
124 /** 124 /**
125 * @param {string} data 125 * @param {string} data
126 */ 126 */
127 _writeBalancedJSON: function(data) 127 _writeBalancedJSON: function(data)
128 { 128 {
129 var json = data + "]"; 129 var json = data + "]";
130 130
131 if (this._firstChunk) { 131 if (this._firstChunk) {
132 this._model.startCollectingTraceEvents(true); 132 this._delegate.loadingStarted();
133 } else { 133 } else {
134 var commaIndex = json.indexOf(","); 134 var commaIndex = json.indexOf(",");
135 if (commaIndex !== -1) 135 if (commaIndex !== -1)
136 json = json.slice(commaIndex + 1); 136 json = json.slice(commaIndex + 1);
137 json = "[" + json; 137 json = "[" + json;
138 } 138 }
139 139
140 var items; 140 var items;
141 try { 141 try {
142 items = /** @type {!Array.<!WebInspector.TracingManager.EventPayload >} */ (JSON.parse(json)); 142 items = /** @type {!Array.<!WebInspector.TracingManager.EventPayload >} */ (JSON.parse(json));
143 } catch (e) { 143 } catch (e) {
144 this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed t imeline data: %s", e.toString())); 144 this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed t imeline data: %s", e.toString()));
145 return; 145 return;
146 } 146 }
147 147
148 if (this._firstChunk) { 148 if (this._firstChunk) {
149 this._firstChunk = false; 149 this._firstChunk = false;
150 if (this._looksLikeAppVersion(items[0])) { 150 if (this._looksLikeAppVersion(items[0])) {
151 this._reportErrorAndCancelLoading(WebInspector.UIString("Legacy Timeline format is not supported.")); 151 this._reportErrorAndCancelLoading(WebInspector.UIString("Legacy Timeline format is not supported."));
152 return; 152 return;
153 } 153 }
154 } 154 }
155 155
156 try { 156 try {
157 this._model.traceEventsCollected(items); 157 this._model.addEvents(items);
158 } catch(e) { 158 } catch(e) {
159 this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed t imeline data: %s", e.toString())); 159 this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed t imeline data: %s", e.toString()));
160 return; 160 return;
161 } 161 }
162 }, 162 },
163 163
164 /** 164 /**
165 * @param {string=} message 165 * @param {string=} message
166 */ 166 */
167 _reportErrorAndCancelLoading: function(message) 167 _reportErrorAndCancelLoading: function(message)
168 { 168 {
169 if (message) 169 if (message)
170 WebInspector.console.error(message); 170 WebInspector.console.error(message);
171 this._model.tracingComplete(); 171 this.cancel();
172 this._model.reset();
173 if (this._canceledCallback)
174 this._canceledCallback();
175 this._progress.done();
176 }, 172 },
177 173
178 /** 174 /**
179 * @param {*} item 175 * @param {*} item
180 * @return {boolean} 176 * @return {boolean}
181 */ 177 */
182 _looksLikeAppVersion: function(item) 178 _looksLikeAppVersion: function(item)
183 { 179 {
184 return typeof item === "string" && item.indexOf("Chrome") !== -1; 180 return typeof item === "string" && item.indexOf("Chrome") !== -1;
185 }, 181 },
186 182
187 /** 183 /**
188 * @override 184 * @override
189 */ 185 */
190 close: function() 186 close: function()
191 { 187 {
192 this._model._loadedFromFile = true; 188 this._model._loadedFromFile = true;
193 this._model.tracingComplete(); 189 if (this._delegate)
194 this._progress.done(); 190 this._delegate.loadingComplete(true);
195 }, 191 },
196 192
197 /** 193 /**
198 * @override 194 * @override
199 */ 195 */
200 onTransferStarted: function() {}, 196 onTransferStarted: function() {},
201 197
202 /** 198 /**
203 * @override 199 * @override
204 * @param {!WebInspector.ChunkedReader} reader 200 * @param {!WebInspector.ChunkedReader} reader
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 * @override 257 * @override
262 * @param {!WebInspector.ChunkedReader} reader 258 * @param {!WebInspector.ChunkedReader} reader
263 * @param {!Event} event 259 * @param {!Event} event
264 */ 260 */
265 onError: function(reader, event) 261 onError: function(reader, event)
266 { 262 {
267 var error = event.target.error; 263 var error = event.target.error;
268 WebInspector.console.error(WebInspector.UIString("Failed to save timelin e: %s (%s, %s)", error.message, error.name, error.code)); 264 WebInspector.console.error(WebInspector.UIString("Failed to save timelin e: %s (%s, %s)", error.message, error.name, error.code));
269 } 265 }
270 } 266 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698