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

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

Issue 2883143003: Timeline: do not start timeline on regular page reloads (Closed)
Patch Set: minor tweaks Created 3 years, 7 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 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 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 28 matching lines...) Expand all
39 super('timeline'); 39 super('timeline');
40 this.registerRequiredCSS('timeline/timelinePanel.css'); 40 this.registerRequiredCSS('timeline/timelinePanel.css');
41 this.element.addEventListener('contextmenu', this._contextMenu.bind(this), f alse); 41 this.element.addEventListener('contextmenu', this._contextMenu.bind(this), f alse);
42 this._dropTarget = new UI.DropTarget( 42 this._dropTarget = new UI.DropTarget(
43 this.element, [UI.DropTarget.Types.Files, UI.DropTarget.Types.URIList], 43 this.element, [UI.DropTarget.Types.Files, UI.DropTarget.Types.URIList],
44 Common.UIString('Drop timeline file or URL here'), this._handleDrop.bind (this)); 44 Common.UIString('Drop timeline file or URL here'), this._handleDrop.bind (this));
45 45
46 /** @type {!Array<!UI.ToolbarItem>} */ 46 /** @type {!Array<!UI.ToolbarItem>} */
47 this._recordingOptionUIControls = []; 47 this._recordingOptionUIControls = [];
48 this._state = Timeline.TimelinePanel.State.Idle; 48 this._state = Timeline.TimelinePanel.State.Idle;
49 this._recordingPageReload = false;
49 this._windowStartTime = 0; 50 this._windowStartTime = 0;
50 this._windowEndTime = Infinity; 51 this._windowEndTime = Infinity;
51 this._millisecondsToRecordAfterLoadEvent = 3000; 52 this._millisecondsToRecordAfterLoadEvent = 3000;
52 this._toggleRecordAction = 53 this._toggleRecordAction =
53 /** @type {!UI.Action }*/ (UI.actionRegistry.action('timeline.toggle-rec ording')); 54 /** @type {!UI.Action }*/ (UI.actionRegistry.action('timeline.toggle-rec ording'));
54 55
55 /** @type {!Array<!TimelineModel.TimelineModelFilter>} */ 56 /** @type {!Array<!TimelineModel.TimelineModelFilter>} */
56 this._filters = []; 57 this._filters = [];
57 if (!Runtime.experiments.isEnabled('timelineShowAllEvents')) { 58 if (!Runtime.experiments.isEnabled('timelineShowAllEvents')) {
58 this._filters.push(Timeline.TimelineUIUtils.visibleEventsFilter()); 59 this._filters.push(Timeline.TimelineUIUtils.visibleEventsFilter());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 PerfUI.TimelineOverviewPane.Events.WindowChanged, this._onWindowChanged. bind(this)); 99 PerfUI.TimelineOverviewPane.Events.WindowChanged, this._onWindowChanged. bind(this));
99 this._overviewPane.show(topPaneElement); 100 this._overviewPane.show(topPaneElement);
100 /** @type {!Array<!Timeline.TimelineEventOverview>} */ 101 /** @type {!Array<!Timeline.TimelineEventOverview>} */
101 this._overviewControls = []; 102 this._overviewControls = [];
102 103
103 this._statusPaneContainer = this._timelinePane.element.createChild('div', 's tatus-pane-container fill'); 104 this._statusPaneContainer = this._timelinePane.element.createChild('div', 's tatus-pane-container fill');
104 105
105 this._createFileSelector(); 106 this._createFileSelector();
106 107
107 SDK.targetManager.addModelListener( 108 SDK.targetManager.addModelListener(
108 SDK.ResourceTreeModel, SDK.ResourceTreeModel.Events.PageReloadRequested, this._pageReloadRequested, this);
109 SDK.targetManager.addModelListener(
110 SDK.ResourceTreeModel, SDK.ResourceTreeModel.Events.Load, this._loadEven tFired, this); 109 SDK.ResourceTreeModel, SDK.ResourceTreeModel.Events.Load, this._loadEven tFired, this);
111 110
112 if (Runtime.experiments.isEnabled('timelineMultipleMainViews')) { 111 if (Runtime.experiments.isEnabled('timelineMultipleMainViews')) {
113 var viewMode = Timeline.TimelinePanel.ViewMode; 112 var viewMode = Timeline.TimelinePanel.ViewMode;
114 this._tabbedPane = new UI.TabbedPane(); 113 this._tabbedPane = new UI.TabbedPane();
115 this._tabbedPane.appendTab(viewMode.FlameChart, Common.UIString('Flame Cha rt'), new UI.VBox()); 114 this._tabbedPane.appendTab(viewMode.FlameChart, Common.UIString('Flame Cha rt'), new UI.VBox());
116 this._tabbedPane.appendTab(viewMode.BottomUp, Common.UIString('Bottom-Up') , new UI.VBox()); 115 this._tabbedPane.appendTab(viewMode.BottomUp, Common.UIString('Bottom-Up') , new UI.VBox());
117 this._tabbedPane.appendTab(viewMode.CallTree, Common.UIString('Call Tree') , new UI.VBox()); 116 this._tabbedPane.appendTab(viewMode.CallTree, Common.UIString('Call Tree') , new UI.VBox());
118 this._tabbedPane.appendTab(viewMode.EventLog, Common.UIString('Event Log') , new UI.VBox()); 117 this._tabbedPane.appendTab(viewMode.EventLog, Common.UIString('Event Log') , new UI.VBox());
119 this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected, this._ onMainViewChanged.bind(this)); 118 this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected, this._ onMainViewChanged.bind(this));
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 */ 209 */
211 _createSettingCheckbox(setting, tooltip) { 210 _createSettingCheckbox(setting, tooltip) {
212 const checkboxItem = new UI.ToolbarSettingCheckbox(setting, tooltip); 211 const checkboxItem = new UI.ToolbarSettingCheckbox(setting, tooltip);
213 this._recordingOptionUIControls.push(checkboxItem); 212 this._recordingOptionUIControls.push(checkboxItem);
214 return checkboxItem; 213 return checkboxItem;
215 } 214 }
216 215
217 _populateToolbar() { 216 _populateToolbar() {
218 // Record 217 // Record
219 this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._tog gleRecordAction)); 218 this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._tog gleRecordAction));
220 this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('mai n.reload')); 219 this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('tim eline.record-reload'));
221 this._clearButton = new UI.ToolbarButton(Common.UIString('Clear'), 'largeico n-clear'); 220 this._clearButton = new UI.ToolbarButton(Common.UIString('Clear'), 'largeico n-clear');
222 this._clearButton.addEventListener(UI.ToolbarButton.Events.Click, () => this ._clear()); 221 this._clearButton.addEventListener(UI.ToolbarButton.Events.Click, () => this ._clear());
223 this._panelToolbar.appendToolbarItem(this._clearButton); 222 this._panelToolbar.appendToolbarItem(this._clearButton);
224 this._panelToolbar.appendSeparator(); 223 this._panelToolbar.appendSeparator();
225 224
226 // View 225 // View
227 this._panelToolbar.appendSeparator(); 226 this._panelToolbar.appendSeparator();
228 this._showScreenshotsToolbarCheckbox = 227 this._showScreenshotsToolbarCheckbox =
229 this._createSettingCheckbox(this._showScreenshotsSetting, Common.UIStrin g('Capture screenshots')); 228 this._createSettingCheckbox(this._showScreenshotsSetting, Common.UIStrin g('Capture screenshots'));
230 this._panelToolbar.appendToolbarItem(this._showScreenshotsToolbarCheckbox); 229 this._panelToolbar.appendToolbarItem(this._showScreenshotsToolbarCheckbox);
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 } 499 }
501 500
502 /** 501 /**
503 * @param {boolean} enabled 502 * @param {boolean} enabled
504 */ 503 */
505 _setUIControlsEnabled(enabled) { 504 _setUIControlsEnabled(enabled) {
506 this._recordingOptionUIControls.forEach(control => control.setEnabled(enable d)); 505 this._recordingOptionUIControls.forEach(control => control.setEnabled(enable d));
507 } 506 }
508 507
509 /** 508 /**
510 * @param {!SDK.TracingManager} tracingManager
511 * @param {boolean} userInitiated
512 * @return {!Promise} 509 * @return {!Promise}
513 */ 510 */
514 _startRecording(tracingManager, userInitiated) { 511 _startRecording() {
512 var tracingManagers = SDK.targetManager.models(SDK.TracingManager);
513 if (!tracingManagers.length)
514 return Promise.resolve();
515
515 console.assert(!this._statusPane, 'Status pane is already opened.'); 516 console.assert(!this._statusPane, 'Status pane is already opened.');
516 this._setState(Timeline.TimelinePanel.State.StartPending); 517 this._setState(Timeline.TimelinePanel.State.StartPending);
517 this._showRecordingStarted(); 518 this._showRecordingStarted();
518 519
519 this._autoRecordGeneration = userInitiated ? null : {tracingManager: tracing Manager};
520 var enabledTraceProviders = Extensions.extensionServer.traceProviders().filt er( 520 var enabledTraceProviders = Extensions.extensionServer.traceProviders().filt er(
521 provider => Timeline.TimelinePanel._settingForTraceProvider(provider).ge t()); 521 provider => Timeline.TimelinePanel._settingForTraceProvider(provider).ge t());
522 522
523 const recordingOptions = { 523 const recordingOptions = {
524 enableJSSampling: !this._disableCaptureJSProfileSetting.get(), 524 enableJSSampling: !this._disableCaptureJSProfileSetting.get(),
525 capturePictures: this._captureLayersAndPicturesSetting.get(), 525 capturePictures: this._captureLayersAndPicturesSetting.get(),
526 captureFilmStrip: this._showScreenshotsSetting.get() 526 captureFilmStrip: this._showScreenshotsSetting.get()
527 }; 527 };
528 528
529 this._pendingPerformanceModel = new Timeline.PerformanceModel(); 529 this._pendingPerformanceModel = new Timeline.PerformanceModel();
530 this._controller = new Timeline.TimelineController(tracingManager, this._pen dingPerformanceModel, this); 530 this._controller = new Timeline.TimelineController(tracingManagers[0], this. _pendingPerformanceModel, this);
531 Host.userMetrics.actionTaken( 531 Host.userMetrics.actionTaken(Host.UserMetrics.Action.TimelineStarted);
532 userInitiated ? Host.UserMetrics.Action.TimelineStarted : Host.UserMetri cs.Action.TimelinePageReloadStarted);
533 this._setUIControlsEnabled(false); 532 this._setUIControlsEnabled(false);
534 this._hideLandingPage(); 533 this._hideLandingPage();
535 return this._controller.startRecording(recordingOptions, enabledTraceProvide rs) 534 return this._controller.startRecording(recordingOptions, enabledTraceProvide rs)
536 .then(() => this._recordingStarted()); 535 .then(() => this._recordingStarted());
537 } 536 }
538 537
539 _stopRecording() { 538 _stopRecording() {
540 if (this._statusPane) { 539 if (this._statusPane) {
541 this._statusPane.finish(); 540 this._statusPane.finish();
542 this._statusPane.updateStatus(Common.UIString('Stopping timeline\u2026')); 541 this._statusPane.updateStatus(Common.UIString('Stopping timeline\u2026'));
543 this._statusPane.updateProgressBar(Common.UIString('Received'), 0); 542 this._statusPane.updateProgressBar(Common.UIString('Received'), 0);
544 } 543 }
545 this._setState(Timeline.TimelinePanel.State.StopPending); 544 this._setState(Timeline.TimelinePanel.State.StopPending);
546 this._autoRecordGeneration = null;
547 this._controller.stopRecording(); 545 this._controller.stopRecording();
548 this._controller = null; 546 this._controller = null;
549 this._setUIControlsEnabled(true); 547 this._setUIControlsEnabled(true);
550 } 548 }
551 549
552 _onSuspendStateChanged() { 550 _onSuspendStateChanged() {
553 this._updateTimelineControls(); 551 this._updateTimelineControls();
554 } 552 }
555 553
556 _updateTimelineControls() { 554 _updateTimelineControls() {
557 var state = Timeline.TimelinePanel.State; 555 var state = Timeline.TimelinePanel.State;
558 this._toggleRecordAction.setToggled(this._state === state.Recording); 556 this._toggleRecordAction.setToggled(this._state === state.Recording);
559 this._toggleRecordAction.setEnabled(this._state === state.Recording || this. _state === state.Idle); 557 this._toggleRecordAction.setEnabled(this._state === state.Recording || this. _state === state.Idle);
560 this._clearButton.setEnabled(this._state === state.Idle); 558 this._clearButton.setEnabled(this._state === state.Idle);
561 this._panelToolbar.setEnabled(this._state !== state.Loading); 559 this._panelToolbar.setEnabled(this._state !== state.Loading);
562 this._dropTarget.setEnabled(this._state === state.Idle); 560 this._dropTarget.setEnabled(this._state === state.Idle);
563 } 561 }
564 562
565 _toggleRecording() { 563 _toggleRecording() {
566 if (this._state === Timeline.TimelinePanel.State.Idle) { 564 if (this._state === Timeline.TimelinePanel.State.Idle) {
567 var tracingManagers = SDK.targetManager.models(SDK.TracingManager); 565 this._recordingPageReload = false;
568 if (tracingManagers.length) 566 this._startRecording();
569 this._startRecording(tracingManagers[0], true);
570 } else if (this._state === Timeline.TimelinePanel.State.Recording) { 567 } else if (this._state === Timeline.TimelinePanel.State.Recording) {
571 this._stopRecording(); 568 this._stopRecording();
572 } 569 }
573 } 570 }
574 571
572 _recordReload() {
573 if (this._state !== Timeline.TimelinePanel.State.Idle)
574 return;
575 this._recordingPageReload = true;
576 this._startRecording();
577 }
578
575 _clear() { 579 _clear() {
576 this._showLandingPage(); 580 this._showLandingPage();
577 this._reset(); 581 this._reset();
578 } 582 }
579 583
580 _reset() { 584 _reset() {
581 PerfUI.LineLevelProfile.instance().reset(); 585 PerfUI.LineLevelProfile.instance().reset();
582 this._setModel(null); 586 this._setModel(null);
583 delete this._selection; 587 delete this._selection;
584 } 588 }
(...skipping 25 matching lines...) Expand all
610 this.requestWindowTimes(0, Infinity); 614 this.requestWindowTimes(0, Infinity);
611 } 615 }
612 this._overviewPane.scheduleUpdate(); 616 this._overviewPane.scheduleUpdate();
613 617
614 this.select(null); 618 this.select(null);
615 if (this._flameChart) 619 if (this._flameChart)
616 this._flameChart.resizeToPreferredHeights(); 620 this._flameChart.resizeToPreferredHeights();
617 } 621 }
618 622
619 _recordingStarted() { 623 _recordingStarted() {
624 if (this._recordingPageReload) {
625 var target = this._controller.mainTarget();
626 var resourceModel = target.model(SDK.ResourceTreeModel);
627 if (resourceModel)
628 resourceModel.reloadPage();
629 }
620 this._reset(); 630 this._reset();
621 this._setState(Timeline.TimelinePanel.State.Recording); 631 this._setState(Timeline.TimelinePanel.State.Recording);
622 this._showRecordingStarted(); 632 this._showRecordingStarted();
623 this._statusPane.updateStatus(Common.UIString('Profiling\u2026')); 633 this._statusPane.updateStatus(Common.UIString('Profiling\u2026'));
624 this._statusPane.updateProgressBar(Common.UIString('Buffer usage'), 0); 634 this._statusPane.updateProgressBar(Common.UIString('Buffer usage'), 0);
625 this._statusPane.startTimer(); 635 this._statusPane.startTimer();
626 this._hideLandingPage(); 636 this._hideLandingPage();
627 } 637 }
628 638
629 /** 639 /**
(...skipping 30 matching lines...) Expand all
660 var recordKey = 670 var recordKey =
661 encloseWithTag('b', UI.shortcutRegistry.shortcutDescriptorsForAction('ti meline.toggle-recording')[0].name); 671 encloseWithTag('b', UI.shortcutRegistry.shortcutDescriptorsForAction('ti meline.toggle-recording')[0].name);
662 var reloadKey = encloseWithTag('b', UI.shortcutRegistry.shortcutDescriptorsF orAction('main.reload')[0].name); 672 var reloadKey = encloseWithTag('b', UI.shortcutRegistry.shortcutDescriptorsF orAction('main.reload')[0].name);
663 var navigateNode = encloseWithTag('b', Common.UIString('WASD')); 673 var navigateNode = encloseWithTag('b', Common.UIString('WASD'));
664 674
665 this._landingPage = new UI.VBox(); 675 this._landingPage = new UI.VBox();
666 this._landingPage.contentElement.classList.add('timeline-landing-page', 'fil l'); 676 this._landingPage.contentElement.classList.add('timeline-landing-page', 'fil l');
667 var centered = this._landingPage.contentElement.createChild('div'); 677 var centered = this._landingPage.contentElement.createChild('div');
668 678
669 var recordButton = UI.createInlineButton(UI.Toolbar.createActionButton(this. _toggleRecordAction)); 679 var recordButton = UI.createInlineButton(UI.Toolbar.createActionButton(this. _toggleRecordAction));
670 var reloadButton = UI.createInlineButton(UI.Toolbar.createActionButtonForId( 'main.reload')); 680 var reloadButton = UI.createInlineButton(UI.Toolbar.createActionButtonForId( 'timeline.record-reload'));
671 681
672 centered.createChild('p').appendChild(UI.formatLocalized( 682 centered.createChild('p').appendChild(UI.formatLocalized(
673 'Click the record button %s or hit %s to capture a new recording.\n' + 683 'Click the record button %s or hit %s to capture a new recording.\n' +
674 'Click the reload button %s or hit %s to record and evaluate the page lo ad.', 684 'Click the reload button %s or hit %s to record and evaluate the page lo ad.',
675 [recordButton, recordKey, reloadButton, reloadKey])); 685 [recordButton, recordKey, reloadButton, reloadKey]));
676 686
677 centered.createChild('p').appendChild(UI.formatLocalized( 687 centered.createChild('p').appendChild(UI.formatLocalized(
678 'After recording, select an area of interest in the overview by dragging .\n' + 688 'After recording, select an area of interest in the overview by dragging .\n' +
679 'Then, zoom and pan the timeline with the mousewheel or %s keys.\n%s', 689 'Then, zoom and pan the timeline with the mousewheel or %s keys.\n%s',
680 [navigateNode, learnMoreNode])); 690 [navigateNode, learnMoreNode]));
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 if (event.name === recordTypes.TimeStamp || event.name === recordTypes.Con soleTime) 796 if (event.name === recordTypes.TimeStamp || event.name === recordTypes.Con soleTime)
787 continue; 797 continue;
788 markers.set(event.startTime, Timeline.TimelineUIUtils.createEventDivider(e vent, zeroTime)); 798 markers.set(event.startTime, Timeline.TimelineUIUtils.createEventDivider(e vent, zeroTime));
789 } 799 }
790 this._overviewPane.setMarkers(markers); 800 this._overviewPane.setMarkers(markers);
791 } 801 }
792 802
793 /** 803 /**
794 * @param {!Common.Event} event 804 * @param {!Common.Event} event
795 */ 805 */
796 _pageReloadRequested(event) {
797 if (this._state !== Timeline.TimelinePanel.State.Idle || !this.isShowing())
798 return;
799 var resourceTreeModel = /** @type {!SDK.ResourceTreeModel} */ (event.data);
800 var tracingManager = resourceTreeModel.target().model(SDK.TracingManager);
801 if (resourceTreeModel.target() !== SDK.targetManager.mainTarget() || !tracin gManager)
802 return;
803
804 resourceTreeModel.suspendReload();
805 this._startRecording(tracingManager, false).then(() => resourceTreeModel.res umeReload());
806 }
807
808 /**
809 * @param {!Common.Event} event
810 */
811 _loadEventFired(event) { 806 _loadEventFired(event) {
812 if (this._state !== Timeline.TimelinePanel.State.Recording || !this._autoRec ordGeneration || 807 if (this._state !== Timeline.TimelinePanel.State.Recording || !this._recordi ngPageReload ||
813 this._autoRecordGeneration.tracingManager.target() !== event.data.resour ceTreeModel.target()) 808 this._controller.mainTarget() !== event.data.resourceTreeModel.target())
814 return; 809 return;
815 setTimeout(stopRecordingOnReload.bind(this, this._autoRecordGeneration), thi s._millisecondsToRecordAfterLoadEvent); 810 setTimeout(stopRecordingOnReload.bind(this, this._controller), this._millise condsToRecordAfterLoadEvent);
alph 2017/05/15 23:56:45 await sleep(...)
816 811
817 /** 812 /**
813 * @param {!Timeline.TimelineController} controller
818 * @this {Timeline.TimelinePanel} 814 * @this {Timeline.TimelinePanel}
819 * @param {!Object} recordGeneration
820 */ 815 */
821 function stopRecordingOnReload(recordGeneration) { 816 function stopRecordingOnReload(controller) {
822 // Check if we're still in the same recording session. 817 // Check if we're still in the same recording session.
823 if (this._state !== Timeline.TimelinePanel.State.Recording || this._autoRe cordGeneration !== recordGeneration) 818 if (controller !== this._controller)
824 return; 819 return;
820 this._recordingPageReload = false;
825 this._stopRecording(); 821 this._stopRecording();
826 } 822 }
827 } 823 }
828 824
829 /** 825 /**
830 * @param {!Timeline.TimelineSelection} selection 826 * @param {!Timeline.TimelineSelection} selection
831 * @return {?TimelineModel.TimelineFrame} 827 * @return {?TimelineModel.TimelineFrame}
832 */ 828 */
833 _frameForSelection(selection) { 829 _frameForSelection(selection) {
834 switch (selection.type()) { 830 switch (selection.type()) {
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 * @param {string} actionId 1283 * @param {string} actionId
1288 * @return {boolean} 1284 * @return {boolean}
1289 */ 1285 */
1290 handleAction(context, actionId) { 1286 handleAction(context, actionId) {
1291 var panel = UI.context.flavor(Timeline.TimelinePanel); 1287 var panel = UI.context.flavor(Timeline.TimelinePanel);
1292 console.assert(panel && panel instanceof Timeline.TimelinePanel); 1288 console.assert(panel && panel instanceof Timeline.TimelinePanel);
1293 switch (actionId) { 1289 switch (actionId) {
1294 case 'timeline.toggle-recording': 1290 case 'timeline.toggle-recording':
1295 panel._toggleRecording(); 1291 panel._toggleRecording();
1296 return true; 1292 return true;
1293 case 'timeline.record-reload':
1294 panel._recordReload();
1295 return true;
1297 case 'timeline.save-to-file': 1296 case 'timeline.save-to-file':
1298 panel._saveToFile(); 1297 panel._saveToFile();
1299 return true; 1298 return true;
1300 case 'timeline.load-from-file': 1299 case 'timeline.load-from-file':
1301 panel._selectFileToLoad(); 1300 panel._selectFileToLoad();
1302 return true; 1301 return true;
1303 case 'timeline.jump-to-previous-frame': 1302 case 'timeline.jump-to-previous-frame':
1304 panel._jumpToFrame(-1); 1303 panel._jumpToFrame(-1);
1305 return true; 1304 return true;
1306 case 'timeline.jump-to-next-frame': 1305 case 'timeline.jump-to-next-frame':
1307 panel._jumpToFrame(1); 1306 panel._jumpToFrame(1);
1308 return true; 1307 return true;
1309 } 1308 }
1310 return false; 1309 return false;
1311 } 1310 }
1312 }; 1311 };
1313 1312
1314 Timeline.TimelinePanel._traceProviderSettingSymbol = Symbol('traceProviderSettin g'); 1313 Timeline.TimelinePanel._traceProviderSettingSymbol = Symbol('traceProviderSettin g');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698