Demo/bin/Debug/front_end/promises_module.js

(开头部分) 19KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

WebInspector.PromisePane=function()
{WebInspector.VBox.call(this);this.registerRequiredCSS("ui/filter.css");this.registerRequiredCSS("promises/promisePane.css");this.element.classList.add("promises");var toolbar=new WebInspector.Toolbar(this.element);this._recordButton=new WebInspector.ToolbarButton("","record-toolbar-item");this._recordButton.addEventListener("click",this._recordButtonClicked.bind(this));toolbar.appendToolbarItem(this._recordButton);var clearButton=new WebInspector.ToolbarButton(WebInspector.UIString("Clear"),"clear-toolbar-item");clearButton.addEventListener("click",this._clearButtonClicked.bind(this));toolbar.appendToolbarItem(clearButton);toolbar.appendSeparator();this._promiseStatusFiltersSetting=WebInspector.settings.createSetting("promiseStatusFilters",{});this._hideCollectedPromisesSetting=WebInspector.settings.createSetting("hideCollectedPromises",false);this._createFilterBar();toolbar.appendToolbarItem(this._filterBar.filterButton());var garbageCollectButton=new WebInspector.ToolbarButton(WebInspector.UIString("Collect garbage"),"garbage-collect-toolbar-item");garbageCollectButton.addEventListener("click",this._garbageCollectButtonClicked,this);toolbar.appendToolbarItem(garbageCollectButton);toolbar.appendSeparator();var asyncCheckbox=new WebInspector.ToolbarCheckbox(WebInspector.UIString("Async"),WebInspector.UIString("Capture async stack traces"),WebInspector.moduleSetting("enableAsyncStackTraces"));toolbar.appendToolbarItem(asyncCheckbox);this.element.appendChild(this._filterBar.filtersElement());this._hiddenByFilterCount=0;this._filterStatusMessageElement=this.element.createChild("div","promises-filter-status hidden");this._filterStatusTextElement=this._filterStatusMessageElement.createChild("span");this._filterStatusMessageElement.createTextChild(" ");var resetFiltersLink=this._filterStatusMessageElement.createChild("span","link");resetFiltersLink.textContent=WebInspector.UIString("Show all promises.");resetFiltersLink.addEventListener("click",this._resetFilters.bind(this),true);this._dataGridContainer=new WebInspector.DataGridContainerWidget();this._dataGridContainer.show(this.element);var columns=[{id:"status",weight:1},{id:"function",title:WebInspector.UIString("Function"),disclosure:true,weight:10},{id:"created",title:WebInspector.UIString("Created"),weight:10},{id:"settled",title:WebInspector.UIString("Settled"),weight:10},{id:"tts",title:WebInspector.UIString("Time to settle"),weight:10}];this._dataGrid=new WebInspector.ViewportDataGrid(columns,undefined,undefined,undefined,this._onContextMenu.bind(this));this._dataGrid.setStickToBottom(true);this._dataGridContainer.appendDataGrid(this._dataGrid);this._linkifier=new WebInspector.Linkifier();this._promiseDetailsByDebuggerModel=new Map();this._promiseIdToNode=new Map();this._popoverHelper=new WebInspector.PopoverHelper(this.element,this._getPopoverAnchor.bind(this),this._showPopover.bind(this));this._popoverHelper.setTimeout(250,250);this.element.addEventListener("click",this._hidePopover.bind(this),true);WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel,WebInspector.DebuggerModel.Events.PromiseUpdated,this._onPromiseUpdated,this);WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel,WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated,this._mainFrameNavigated,this);WebInspector.context.addFlavorChangeListener(WebInspector.Target,this._targetChanged,this);WebInspector.targetManager.observeTargets(this);}
WebInspector.PromisePane._maxPromiseCount=10000;WebInspector.PromiseDetails=function(details)
{this.id=details.id;this.isGarbageCollected=false;this.update(details);}
WebInspector.PromiseDetails.prototype={update:function(details)
{if(this.id!==details.id)
throw new Error("Invalid id, expected "+this.id+" was "+details.id);if(details.status)
this.status=details.status;if(details.parentId)
this.parentId=details.parentId;if(details.callFrame)
this.callFrame=details.callFrame;if(details.creationTime)
this.creationTime=details.creationTime;if(details.settlementTime)
this.settlementTime=details.settlementTime;if(details.creationStack)
this.creationStack=details.creationStack;if(details.asyncCreationStack)
this.asyncCreationStack=details.asyncCreationStack;if(details.settlementStack)
this.settlementStack=details.settlementStack;if(details.asyncSettlementStack)
this.asyncSettlementStack=details.asyncSettlementStack;}}
WebInspector.PromisePane.prototype={_createFilterBar:function()
{this._filterBar=new WebInspector.FilterBar("promisePane");this._textFilterUI=new WebInspector.TextFilterUI(true);this._textFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged,this._onFilterChanged,this);this._filterBar.addFilter(this._textFilterUI);var statuses=[{name:"pending",label:WebInspector.UIString("Pending")},{name:"resolved",label:WebInspector.UIString("Fulfilled")},{name:"rejected",label:WebInspector.UIString("Rejected")}];this._statusFilterUI=new WebInspector.NamedBitSetFilterUI(statuses,this._promiseStatusFiltersSetting);this._statusFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged,this._onFilterChanged,this);this._filterBar.addFilter(this._statusFilterUI);var hideCollectedCheckbox=new WebInspector.CheckboxFilterUI("hide-collected-promises",WebInspector.UIString("Hide collected promises"),true,this._hideCollectedPromisesSetting);hideCollectedCheckbox.addEventListener(WebInspector.FilterUI.Events.FilterChanged,this._onFilterChanged,this);this._filterBar.addFilter(hideCollectedCheckbox);},_shouldBeVisible:function(details,node)
{if(!this._statusFilterUI.accept(details.status))
return false;if(this._hideCollectedPromisesSetting.get()&&details.isGarbageCollected)
return false;var regex=this._textFilterUI.regex();if(!regex)
return true;var text=node.dataTextForSearch();regex.lastIndex=0;return regex.test(text);},_onFilterChanged:function()
{if(this._filterChangedTimeout)
clearTimeout(this._filterChangedTimeout);this._filterChangedTimeout=setTimeout(onTimerFired.bind(this),100);function onTimerFired()
{delete this._filterChangedTimeout;this._refresh();}},elementsToRestoreScrollPositionsFor:function()
{return[this._dataGrid.scrollContainer];},targetAdded:function(target)
{var debuggerModel=WebInspector.DebuggerModel.fromTarget(target);if(debuggerModel&&this._enabled)
this._enablePromiseTracker(debuggerModel);},targetRemoved:function(target)
{var debuggerModel=WebInspector.DebuggerModel.fromTarget(target);if(!debuggerModel)
return;this._promiseDetailsByDebuggerModel.delete(debuggerModel);if(this._debuggerModel===debuggerModel){this._clear();delete this._debuggerModel;}},_targetChanged:function(event)
{if(!this._enabled)
return;var target=(event.data);var debuggerModel=WebInspector.DebuggerModel.fromTarget(target);if(!debuggerModel||this._debuggerModel===debuggerModel)
return;this._debuggerModel=debuggerModel;this._refresh();},_mainFrameNavigated:function(event)
{var frame=(event.data);var target=frame.target();var debuggerModel=WebInspector.DebuggerModel.fromTarget(target);if(!debuggerModel)
return;this._promiseDetailsByDebuggerModel.delete(debuggerModel);if(this._debuggerModel===debuggerModel)
this._clear();},wasShown:function()
{if(typeof this._enabled==="undefined"){var target=WebInspector.context.flavor(WebInspector.Target);this._debuggerModel=WebInspector.DebuggerModel.fromTarget(target);this._updateRecordingState(true);}
if(this._refreshIsNeeded)
this._refresh();},_enablePromiseTracker:function(debuggerModel)
{debuggerModel.enablePromiseTracker(true);},_disablePromiseTracker:function(debuggerModel)
{debuggerModel.disablePromiseTracker();},willHide:function()
{this._hidePopover();},_hidePopover:function()
{this._popoverHelper.hidePopover();},_recordButtonClicked:function()
{this._updateRecordingState(!this._recordButton.toggled());},_updateRecordingState:function(enabled)
{this._enabled=enabled;this._recordButton.setToggled(this._enabled);this._recordButton.setTitle(this._enabled?WebInspector.UIString("Stop Recording Promises Log"):WebInspector.UIString("Record Promises Log"));WebInspector.DebuggerModel.instances().forEach(this._enabled?this._enablePromiseTracker:this._disablePromiseTracker,this);},_clearButtonClicked:function()
{this._clear();if(this._debuggerModel)
this._promiseDetailsByDebuggerModel.delete(this._debuggerModel);},_resetFilters:function()
{this._hideCollectedPromisesSetting.set(false);this._promiseStatusFiltersSetting.set({});this._textFilterUI.setValue("");},_updateFilterStatus:function()
{this._filterStatusTextElement.textContent=WebInspector.UIString(this._hiddenByFilterCount===1?"%d promise is hidden by filters.":"%d promises are hidden by filters.",this._hiddenByFilterCount);this._filterStatusMessageElement.classList.toggle("hidden",!this._hiddenByFilterCount);},_garbageCollectButtonClicked:function()
{var targets=WebInspector.targetManager.targets();for(var i=0;i<targets.length;++i)
targets[i].heapProfilerAgent().collectGarbage();},_truncateLogIfNeeded:function(debuggerModel)
{var promiseIdToDetails=this._promiseDetailsByDebuggerModel.get(debuggerModel);if(!promiseIdToDetails||promiseIdToDetails.size<=WebInspector.PromisePane._maxPromiseCount)
return false;var elementsToTruncate=WebInspector.PromisePane._maxPromiseCount/10;var sortedDetails=promiseIdToDetails.valuesArray().sort(compare);for(var i=0;i<elementsToTruncate;++i)
promiseIdToDetails.delete(sortedDetails[i].id);return true;function compare(x,y)
{var t1=x.creationTime||0;var t2=y.creationTime||0;return t1-t2||x.id-y.id;}},_onPromiseUpdated:function(event)
{var debuggerModel=(event.target);var eventType=(event.data.eventType);var protocolDetails=(event.data.promise);var promiseIdToDetails=this._promiseDetailsByDebuggerModel.get(debuggerModel);if(!promiseIdToDetails){promiseIdToDetails=new Map();this._promiseDetailsByDebuggerModel.set(debuggerModel,promiseIdToDetails);}
var details=promiseIdToDetails.get(protocolDetails.id);if(!details&&eventType==="gc")
return;var truncated=this._truncateLogIfNeeded(debuggerModel);if(details)
details.update(protocolDetails)
else
后面还有 63 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。