Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2012 Intel Inc. All rights reserved. | 3 * Copyright (C) 2012 Intel Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 { | 38 { |
| 39 this._model = model; | 39 this._model = model; |
| 40 this._filters = []; | 40 this._filters = []; |
| 41 /** | 41 /** |
| 42 * @type {!Map.<!WebInspector.TimelineModel.Record, !WebInspector.TimelinePr esentationModel.Record>} | 42 * @type {!Map.<!WebInspector.TimelineModel.Record, !WebInspector.TimelinePr esentationModel.Record>} |
| 43 */ | 43 */ |
| 44 this._recordToPresentationRecord = new Map(); | 44 this._recordToPresentationRecord = new Map(); |
| 45 this.reset(); | 45 this.reset(); |
| 46 } | 46 } |
| 47 | 47 |
| 48 WebInspector.TimelinePresentationModel._hiddenRecords = { }; | |
| 49 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.MarkDOMContent] = 1; | |
| 50 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.MarkLoad] = 1; | |
| 51 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.MarkFirstPaint] = 1; | |
| 52 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.GPUTask] = 1; | |
| 53 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.ScheduleStyleRecalculation] = 1; | |
| 54 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.InvalidateLayout] = 1; | |
| 55 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.RequestMainThreadFrame] = 1; | |
| 56 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.ActivateLayerTree] = 1; | |
| 57 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.DrawFrame] = 1; | |
| 58 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel .RecordType.BeginFrame] = 1; | |
| 59 | |
| 60 WebInspector.TimelinePresentationModel._coalescingRecords = { }; | 48 WebInspector.TimelinePresentationModel._coalescingRecords = { }; |
| 61 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.Layout] = 1; | 49 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.Layout] = 1; |
| 62 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.Paint] = 1; | 50 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.Paint] = 1; |
| 63 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.Rasterize] = 1; | 51 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.Rasterize] = 1; |
| 64 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.DecodeImage] = 1; | 52 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.DecodeImage] = 1; |
| 65 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.ResizeImage] = 1; | 53 WebInspector.TimelinePresentationModel._coalescingRecords[WebInspector.TimelineM odel.RecordType.ResizeImage] = 1; |
| 66 | 54 |
| 67 WebInspector.TimelinePresentationModel.prototype = { | 55 WebInspector.TimelinePresentationModel.prototype = { |
| 68 /** | 56 /** |
| 69 * @param {?WebInspector.TimelineModel.Record} record | 57 * @param {?WebInspector.TimelineModel.Record} record |
| 70 * @return {?WebInspector.TimelinePresentationModel.Record} | 58 * @return {?WebInspector.TimelinePresentationModel.Record} |
| 71 */ | 59 */ |
| 72 toPresentationRecord: function(record) | 60 toPresentationRecord: function(record) |
| 73 { | 61 { |
| 74 return record ? this._recordToPresentationRecord.get(record) || null : n ull; | 62 return record ? this._recordToPresentationRecord.get(record) || null : n ull; |
| 75 }, | 63 }, |
| 76 | 64 |
| 77 /** | 65 /** |
| 78 * @param {!WebInspector.TimelinePresentationModel.Filter} filter | |
| 79 */ | |
| 80 addFilter: function(filter) | |
| 81 { | |
| 82 this._filters.push(filter); | |
| 83 }, | |
| 84 | |
| 85 /** | |
| 86 * @param {?WebInspector.TimelinePresentationModel.Filter} filter | |
| 87 */ | |
| 88 setSearchFilter: function(filter) | |
| 89 { | |
| 90 if (!filter) { | |
| 91 var allRecords = this._recordToPresentationRecord.values(); | |
| 92 for (var i = 0; i < allRecords.length; ++i) | |
| 93 delete allRecords[i].clicked; | |
| 94 } | |
| 95 this._searchFilter = filter; | |
| 96 }, | |
| 97 | |
| 98 /** | |
| 99 * @return {!WebInspector.TimelinePresentationModel.Record} | 66 * @return {!WebInspector.TimelinePresentationModel.Record} |
| 100 */ | 67 */ |
| 101 rootRecord: function() | 68 rootRecord: function() |
| 102 { | 69 { |
| 103 return this._rootRecord; | 70 return this._rootRecord; |
| 104 }, | 71 }, |
| 105 | 72 |
| 106 reset: function() | 73 reset: function() |
| 107 { | 74 { |
| 108 this._recordToPresentationRecord.clear(); | 75 this._recordToPresentationRecord.clear(); |
| 109 var rootPayload = { type: WebInspector.TimelineModel.RecordType.Root }; | 76 var rootPayload = { type: WebInspector.TimelineModel.RecordType.Root }; |
| 110 var rootRecord = new WebInspector.TimelineModel.Record(this._model, /** @type {!TimelineAgent.TimelineEvent} */ (rootPayload), null); | 77 var rootRecord = new WebInspector.TimelineModel.Record(this._model, /** @type {!TimelineAgent.TimelineEvent} */ (rootPayload), null); |
| 111 this._rootRecord = new WebInspector.TimelinePresentationModel.Record(roo tRecord, null); | 78 this._rootRecord = new WebInspector.TimelinePresentationModel.Record(roo tRecord, null); |
| 112 this._eventDividerRecords = []; | |
| 113 this._minimumRecordTime = -1; | |
| 114 /** @type {!Object.<string, !WebInspector.TimelinePresentationModel.Reco rd>} */ | 79 /** @type {!Object.<string, !WebInspector.TimelinePresentationModel.Reco rd>} */ |
| 115 this._coalescingBuckets = {}; | 80 this._coalescingBuckets = {}; |
| 116 this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer(); | |
| 117 | |
| 118 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ | |
| 119 this._mainThreadTasks = ([]); | |
| 120 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ | |
| 121 this._gpuThreadTasks = ([]); | |
| 122 }, | 81 }, |
| 123 | 82 |
| 124 /** | 83 /** |
| 125 * @return {number} | |
| 126 */ | |
| 127 minimumRecordTime: function() | |
| 128 { | |
| 129 return this._minimumRecordTime; | |
| 130 }, | |
| 131 | |
| 132 /** | |
| 133 * @return {number} | |
| 134 */ | |
| 135 maximumRecordTime: function() | |
| 136 { | |
| 137 return this._maximumRecordTime; | |
| 138 }, | |
| 139 | |
| 140 /** | |
| 141 * @return {!Array.<!WebInspector.TimelineModel.Record>} | |
| 142 */ | |
| 143 mainThreadTasks: function() | |
| 144 { | |
| 145 return this._mainThreadTasks; | |
| 146 }, | |
| 147 | |
| 148 /** | |
| 149 * @return {!Array.<!WebInspector.TimelineModel.Record>} | |
| 150 */ | |
| 151 gpuThreadTasks: function() | |
| 152 { | |
| 153 return this._gpuThreadTasks; | |
| 154 }, | |
| 155 | |
| 156 /** | |
| 157 * @param {!WebInspector.TimelineModel.Record} record | 84 * @param {!WebInspector.TimelineModel.Record} record |
| 158 */ | 85 */ |
| 159 addRecord: function(record) | 86 addRecord: function(record) |
| 160 { | 87 { |
| 161 if (record.type === WebInspector.TimelineModel.RecordType.Program) | |
| 162 this._mainThreadTasks.push(record); | |
| 163 if (record.type === WebInspector.TimelineModel.RecordType.GPUTask) | |
| 164 this._gpuThreadTasks.push(record); | |
| 165 | |
| 166 var startTime = record.startTime; | |
| 167 var endTime = record.endTime; | |
| 168 if (this._minimumRecordTime === -1 || startTime < this._minimumRecordTim e) | |
| 169 this._minimumRecordTime = startTime; | |
| 170 if (this._maximumRecordTime === -1 || endTime > this._maximumRecordTime) | |
| 171 this._maximumRecordTime = endTime; | |
| 172 | |
| 173 var records; | 88 var records; |
| 174 if (record.type === WebInspector.TimelineModel.RecordType.Program) | 89 if (record.type === WebInspector.TimelineModel.RecordType.Program) |
| 175 records = record.children; | 90 records = record.children; |
| 176 else | 91 else |
| 177 records = [record]; | 92 records = [record]; |
| 178 | 93 |
| 179 for (var i = 0; i < records.length; ++i) | 94 for (var i = 0; i < records.length; ++i) |
| 180 this._innerAddRecord(this._rootRecord, records[i]); | 95 this._innerAddRecord(this._rootRecord, records[i]); |
| 181 }, | 96 }, |
| 182 | 97 |
| 183 /** | 98 /** |
| 184 * @param {!WebInspector.TimelinePresentationModel.Record} parentRecord | 99 * @param {!WebInspector.TimelinePresentationModel.Record} parentRecord |
| 185 * @param {!WebInspector.TimelineModel.Record} record | 100 * @param {!WebInspector.TimelineModel.Record} record |
| 186 */ | 101 */ |
| 187 _innerAddRecord: function(parentRecord, record) | 102 _innerAddRecord: function(parentRecord, record) |
| 188 { | 103 { |
| 189 if (WebInspector.TimelineUIUtils.isEventDivider(record)) | |
| 190 this._eventDividerRecords.push(record); | |
| 191 | |
| 192 if (record.type in WebInspector.TimelinePresentationModel._hiddenRecords ) | |
| 193 return null; | |
| 194 | |
| 195 const recordTypes = WebInspector.TimelineModel.RecordType; | |
| 196 | |
| 197 var origin = parentRecord; | |
| 198 var coalescingBucket; | 104 var coalescingBucket; |
| 199 | 105 |
| 200 // On main thread, only coalesce if the last event is of same type. | 106 // On main thread, only coalesce if the last event is of same type. |
| 201 if (parentRecord === this._rootRecord) | 107 if (parentRecord === this._rootRecord) |
| 202 coalescingBucket = record.thread ? record.type : "mainThread"; | 108 coalescingBucket = record.thread ? record.type : "mainThread"; |
| 203 var coalescedRecord = this._findCoalescedParent(record, parentRecord, co alescingBucket); | 109 var coalescedRecord = this._findCoalescedParent(record, parentRecord, co alescingBucket); |
| 204 if (coalescedRecord) | 110 if (coalescedRecord) |
| 205 parentRecord = coalescedRecord; | 111 parentRecord = coalescedRecord; |
| 206 | 112 |
| 207 var formattedRecord = new WebInspector.TimelinePresentationModel.Record( record, parentRecord); | 113 var formattedRecord = new WebInspector.TimelinePresentationModel.Record( record, parentRecord); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 293 var parentRecord = presentationRecord._presentationParent.record(); | 199 var parentRecord = presentationRecord._presentationParent.record(); |
| 294 WebInspector.TimelineUIUtils.aggregateTimeByCategory(parentRecord.aggreg atedStats, record.aggregatedStats); | 200 WebInspector.TimelineUIUtils.aggregateTimeByCategory(parentRecord.aggreg atedStats, record.aggregatedStats); |
| 295 if (parentRecord.startTime > record.startTime) | 201 if (parentRecord.startTime > record.startTime) |
| 296 parentRecord.startTime = record.startTime; | 202 parentRecord.startTime = record.startTime; |
| 297 if (parentRecord.endTime < record.endTime) { | 203 if (parentRecord.endTime < record.endTime) { |
| 298 parentRecord.endTime = record.endTime; | 204 parentRecord.endTime = record.endTime; |
| 299 parentRecord.lastChildEndTime = parentRecord.endTime; | 205 parentRecord.lastChildEndTime = parentRecord.endTime; |
| 300 } | 206 } |
| 301 }, | 207 }, |
| 302 | 208 |
| 209 /** | |
| 210 * @param {?RegExp} textFilter | |
| 211 */ | |
| 212 setTextFilter: function(textFilter) | |
| 213 { | |
| 214 if (this._textFilter === textFilter) | |
| 215 return; | |
| 216 this._textFilter = textFilter; | |
| 217 for (var i = 0; this._filteredRecords && i < this._filteredRecords.lengt h; ++i) | |
| 218 delete this._filteredRecords[i]._expandedOrCollapsedWhileFiltered; | |
| 219 }, | |
| 220 | |
| 303 invalidateFilteredRecords: function() | 221 invalidateFilteredRecords: function() |
| 304 { | 222 { |
| 305 delete this._filteredRecords; | 223 delete this._filteredRecords; |
| 306 }, | 224 }, |
| 307 | 225 |
| 308 /** | 226 /** |
| 309 * @return {!Array.<!WebInspector.TimelinePresentationModel.Record>} | 227 * @return {!Array.<!WebInspector.TimelinePresentationModel.Record>} |
| 310 */ | 228 */ |
| 311 filteredRecords: function() | 229 filteredRecords: function() |
| 312 { | 230 { |
| 313 if (this._filteredRecords) | 231 if (this._filteredRecords) |
| 314 return this._filteredRecords; | 232 return this._filteredRecords; |
| 315 | 233 |
| 316 var recordsInWindow = []; | 234 var recordsInWindow = []; |
|
caseq
2014/03/04 16:38:03
indent
| |
| 317 var stack = [{children: this._rootRecord._presentationChildren, index: 0 , parentIsCollapsed: false, parentRecord: {}}]; | 235 |
| 318 var revealedDepth = 0; | 236 var stack = [{children: this._rootRecord._presentationChildren, index: 0, parentIsCollapsed: false, parentRecord: {}}]; |
| 237 var revealedDepth = 0; | |
|
caseq
2014/03/04 16:38:03
ditto
| |
| 319 | 238 |
| 320 function revealRecordsInStack() { | 239 function revealRecordsInStack() { |
| 321 for (var depth = revealedDepth + 1; depth < stack.length; ++depth) { | 240 for (var depth = revealedDepth + 1; depth < stack.length; ++depth) { |
| 322 if (stack[depth - 1].parentIsCollapsed) { | 241 if (stack[depth - 1].parentIsCollapsed) { |
| 323 stack[depth].parentRecord._presentationParent._expandable = true; | 242 stack[depth].parentRecord._presentationParent._expandable = true; |
| 324 return; | 243 return; |
| 325 } | 244 } |
| 326 stack[depth - 1].parentRecord._collapsed = false; | 245 stack[depth - 1].parentRecord._collapsed = false; |
| 327 recordsInWindow.push(stack[depth].parentRecord); | 246 recordsInWindow.push(stack[depth].parentRecord); |
| 328 stack[depth].windowLengthBeforeChildrenTraversal = recordsInWind ow.length; | 247 stack[depth].windowLengthBeforeChildrenTraversal = recordsInWind ow.length; |
| 329 stack[depth].parentIsRevealed = true; | 248 stack[depth].parentIsRevealed = true; |
| 330 revealedDepth = depth; | 249 revealedDepth = depth; |
| 331 } | 250 } |
| 332 } | 251 } |
| 333 | 252 |
| 334 while (stack.length) { | 253 while (stack.length) { |
| 335 var entry = stack[stack.length - 1]; | 254 var entry = stack[stack.length - 1]; |
| 336 var records = entry.children; | 255 var records = entry.children; |
| 337 if (records && entry.index < records.length) { | 256 if (records && entry.index < records.length) { |
| 338 var record = records[entry.index]; | 257 var record = records[entry.index]; |
| 339 ++entry.index; | 258 ++entry.index; |
| 340 | 259 |
| 341 if (this.isVisible(record.record())) { | 260 if (this._model.isVisible(record.record())) { |
| 342 record._presentationParent._expandable = true; | 261 record._presentationParent._expandable = true; |
| 343 if (this._searchFilter) | 262 if (this._textFilter) |
| 344 revealRecordsInStack(); | 263 revealRecordsInStack(); |
| 345 if (!entry.parentIsCollapsed) { | 264 if (!entry.parentIsCollapsed) { |
| 346 recordsInWindow.push(record); | 265 recordsInWindow.push(record); |
| 347 revealedDepth = stack.length; | 266 revealedDepth = stack.length; |
| 348 entry.parentRecord._collapsed = false; | 267 entry.parentRecord._collapsed = false; |
| 349 } | 268 } |
| 350 } | 269 } |
| 351 | 270 |
| 352 record._expandable = false; | 271 record._expandable = false; |
| 353 | 272 |
| 354 stack.push({children: record._presentationChildren, | 273 stack.push({children: record._presentationChildren, |
| 355 index: 0, | 274 index: 0, |
| 356 parentIsCollapsed: (entry.parentIsCollapsed || (reco rd._collapsed && (!this._searchFilter || record.clicked))), | 275 parentIsCollapsed: entry.parentIsCollapsed || (recor d._collapsed && (!this._textFilter || record._expandedOrCollapsedWhileFiltered)) , |
| 357 parentRecord: record, | 276 parentRecord: record, |
| 358 windowLengthBeforeChildrenTraversal: recordsInWindow .length}); | 277 windowLengthBeforeChildrenTraversal: recordsInWindow .length}); |
| 359 } else { | 278 } else { |
| 360 stack.pop(); | 279 stack.pop(); |
| 361 revealedDepth = Math.min(revealedDepth, stack.length - 1); | 280 revealedDepth = Math.min(revealedDepth, stack.length - 1); |
| 362 entry.parentRecord._visibleChildrenCount = recordsInWindow.lengt h - entry.windowLengthBeforeChildrenTraversal; | 281 entry.parentRecord._visibleChildrenCount = recordsInWindow.lengt h - entry.windowLengthBeforeChildrenTraversal; |
| 363 } | 282 } |
| 364 } | 283 } |
| 365 | 284 |
| 366 this._filteredRecords = recordsInWindow; | 285 this._filteredRecords = recordsInWindow; |
| 367 return recordsInWindow; | 286 return recordsInWindow; |
| 368 }, | 287 }, |
| 369 | 288 |
| 370 /** | |
| 371 * @return {!Array.<!WebInspector.TimelineModel.Record>} | |
| 372 */ | |
| 373 eventDividerRecords: function() | |
| 374 { | |
| 375 return this._eventDividerRecords; | |
| 376 }, | |
| 377 | |
| 378 /** | |
| 379 * @param {!WebInspector.TimelineModel.Record} record | |
| 380 * @return {boolean} | |
| 381 */ | |
| 382 isVisible: function(record) | |
| 383 { | |
| 384 for (var i = 0; i < this._filters.length; ++i) { | |
| 385 if (!this._filters[i].accept(record)) | |
| 386 return false; | |
| 387 } | |
| 388 return !this._searchFilter || this._searchFilter.accept(record); | |
| 389 }, | |
| 390 | |
| 391 __proto__: WebInspector.Object.prototype | 289 __proto__: WebInspector.Object.prototype |
| 392 } | 290 } |
| 393 | 291 |
| 394 /** | 292 /** |
| 395 * @constructor | 293 * @constructor |
| 396 * @param {!WebInspector.TimelineModel.Record} record | 294 * @param {!WebInspector.TimelineModel.Record} record |
| 397 * @param {?WebInspector.TimelinePresentationModel.Record} parentRecord | 295 * @param {?WebInspector.TimelinePresentationModel.Record} parentRecord |
| 398 */ | 296 */ |
| 399 WebInspector.TimelinePresentationModel.Record = function(record, parentRecord) | 297 WebInspector.TimelinePresentationModel.Record = function(record, parentRecord) |
| 400 { | 298 { |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 421 WebInspector.TimelinePresentationModel.Record.prototype = { | 319 WebInspector.TimelinePresentationModel.Record.prototype = { |
| 422 /** | 320 /** |
| 423 * @return {!WebInspector.TimelineModel.Record} | 321 * @return {!WebInspector.TimelineModel.Record} |
| 424 */ | 322 */ |
| 425 record: function() | 323 record: function() |
| 426 { | 324 { |
| 427 return this._record; | 325 return this._record; |
| 428 }, | 326 }, |
| 429 | 327 |
| 430 /** | 328 /** |
| 431 * @return {boolean} | |
| 432 */ | |
| 433 isRoot: function() | |
| 434 { | |
| 435 return this.type === WebInspector.TimelineModel.RecordType.Root; | |
| 436 }, | |
| 437 | |
| 438 /** | |
| 439 * @return {!Array.<!WebInspector.TimelinePresentationModel.Record>} | 329 * @return {!Array.<!WebInspector.TimelinePresentationModel.Record>} |
| 440 */ | 330 */ |
| 441 presentationChildren: function() | 331 presentationChildren: function() |
| 442 { | 332 { |
| 443 return this._presentationChildren; | 333 return this._presentationChildren; |
| 444 }, | 334 }, |
| 445 | 335 |
| 446 /** | 336 /** |
| 447 * @return {boolean} | 337 * @return {boolean} |
| 448 */ | 338 */ |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 466 { | 356 { |
| 467 return this._collapsed; | 357 return this._collapsed; |
| 468 }, | 358 }, |
| 469 | 359 |
| 470 /** | 360 /** |
| 471 * @param {boolean} collapsed | 361 * @param {boolean} collapsed |
| 472 */ | 362 */ |
| 473 setCollapsed: function(collapsed) | 363 setCollapsed: function(collapsed) |
| 474 { | 364 { |
| 475 this._collapsed = collapsed; | 365 this._collapsed = collapsed; |
| 366 this._expandedOrCollapsedWhileFiltered = true; | |
| 476 }, | 367 }, |
| 477 | 368 |
| 478 /** | 369 /** |
| 479 * @return {?WebInspector.TimelinePresentationModel.Record} | 370 * @return {?WebInspector.TimelinePresentationModel.Record} |
| 480 */ | 371 */ |
| 481 presentationParent: function() | 372 presentationParent: function() |
| 482 { | 373 { |
| 483 return this._presentationParent || null; | 374 return this._presentationParent || null; |
| 484 }, | 375 }, |
| 485 | 376 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 540 }, | 431 }, |
| 541 | 432 |
| 542 /** | 433 /** |
| 543 * @param {!WebInspector.TimelineRecordGraphRow} graphRow | 434 * @param {!WebInspector.TimelineRecordGraphRow} graphRow |
| 544 */ | 435 */ |
| 545 setGraphRow: function(graphRow) | 436 setGraphRow: function(graphRow) |
| 546 { | 437 { |
| 547 this._graphRow = graphRow; | 438 this._graphRow = graphRow; |
| 548 } | 439 } |
| 549 } | 440 } |
| 550 | |
| 551 /** | |
| 552 * @interface | |
| 553 */ | |
| 554 WebInspector.TimelinePresentationModel.Filter = function() | |
| 555 { | |
| 556 } | |
| 557 | |
| 558 WebInspector.TimelinePresentationModel.Filter.prototype = { | |
| 559 /** | |
| 560 * @param {!WebInspector.TimelineModel.Record} record | |
| 561 * @return {boolean} | |
| 562 */ | |
| 563 accept: function(record) { return false; } | |
| 564 } | |
| OLD | NEW |