UNPKG

devil-windows

Version:

Debugger, profiler and runtime with embedded WebKit DevTools client (for Windows).

354 lines 298 kB
WebInspector.CountersGraph=function(title,delegate,model) {WebInspector.SplitView.call(this,true,false);this.element.id="memory-graphs-container";this._delegate=delegate;this._model=model;this._calculator=new WebInspector.TimelineCalculator(this._model);this._graphsContainer=this.mainElement();this._createCurrentValuesBar();this._canvasView=new WebInspector.VBoxWithResizeCallback(this._resize.bind(this));this._canvasView.show(this._graphsContainer);this._canvasContainer=this._canvasView.element;this._canvasContainer.id="memory-graphs-canvas-container";this._canvas=this._canvasContainer.createChild("canvas");this._canvas.id="memory-counters-graph";this._canvasContainer.addEventListener("mouseover",this._onMouseMove.bind(this),true);this._canvasContainer.addEventListener("mousemove",this._onMouseMove.bind(this),true);this._canvasContainer.addEventListener("mouseout",this._onMouseOut.bind(this),true);this._canvasContainer.addEventListener("click",this._onClick.bind(this),true);this._timelineGrid=new WebInspector.TimelineGrid();this._canvasContainer.appendChild(this._timelineGrid.dividersElement);this.sidebarElement().createChild("div","sidebar-tree sidebar-tree-section").textContent=title;this._counters=[];this._counterUI=[];} WebInspector.CountersGraph.prototype={_createCurrentValuesBar:function() {this._currentValuesBar=this._graphsContainer.createChild("div");this._currentValuesBar.id="counter-values-bar";},createCounter:function(uiName,uiValueTemplate,color) {var counter=new WebInspector.CountersGraph.Counter();this._counters.push(counter);this._counterUI.push(new WebInspector.CountersGraph.CounterUI(this,uiName,uiValueTemplate,color,counter));return counter;},view:function() {return this;},dispose:function() {},reset:function() {for(var i=0;i<this._counters.length;++i){this._counters[i].reset();this._counterUI[i].reset();} this.refresh();},_resize:function() {var parentElement=this._canvas.parentElement;this._canvas.width=parentElement.clientWidth*window.devicePixelRatio;this._canvas.height=parentElement.clientHeight*window.devicePixelRatio;var timelinePaddingLeft=15;this._calculator.setDisplayWindow(timelinePaddingLeft,this._canvas.width);this.refresh();},setWindowTimes:function(startTime,endTime) {this._calculator.setWindow(startTime,endTime);this.scheduleRefresh();},scheduleRefresh:function() {WebInspector.invokeOnceAfterBatchUpdate(this,this.refresh);},draw:function() {for(var i=0;i<this._counters.length;++i){this._counters[i]._calculateVisibleIndexes(this._calculator);this._counters[i]._calculateXValues(this._canvas.width);} this._clear();for(var i=0;i<this._counterUI.length;i++) this._counterUI[i]._drawGraph(this._canvas);},_onClick:function(event) {var x=event.x-this._canvasContainer.totalOffsetLeft();var minDistance=Infinity;var bestTime;for(var i=0;i<this._counterUI.length;++i){var counterUI=this._counterUI[i];if(!counterUI.counter.times.length) continue;var index=counterUI._recordIndexAt(x);var distance=Math.abs(x*window.devicePixelRatio-counterUI.counter.x[index]);if(distance<minDistance){minDistance=distance;bestTime=counterUI.counter.times[index];}} if(bestTime!==undefined) this._revealRecordAt(bestTime);},_revealRecordAt:function(time) {var recordToReveal;function findRecordToReveal(record) {if(!this._model.isVisible(record)) return false;if(record.startTime()<=time&&time<=record.endTime()){recordToReveal=record;return true;} if(!recordToReveal||record.endTime()<time&&recordToReveal.endTime()<record.endTime()) recordToReveal=record;return false;} this._model.forAllRecords(null,findRecordToReveal.bind(this));this._delegate.select(recordToReveal?WebInspector.TimelineSelection.fromRecord(recordToReveal):null);},_onMouseOut:function(event) {delete this._markerXPosition;this._clearCurrentValueAndMarker();},_clearCurrentValueAndMarker:function() {for(var i=0;i<this._counterUI.length;i++) this._counterUI[i]._clearCurrentValueAndMarker();},_onMouseMove:function(event) {var x=event.x-this._canvasContainer.totalOffsetLeft();this._markerXPosition=x;this._refreshCurrentValues();},_refreshCurrentValues:function() {if(this._markerXPosition===undefined) return;for(var i=0;i<this._counterUI.length;++i) this._counterUI[i].updateCurrentValue(this._markerXPosition);},refresh:function() {this._timelineGrid.updateDividers(this._calculator);this.draw();this._refreshCurrentValues();},refreshRecords:function() {},_clear:function() {var ctx=this._canvas.getContext("2d");ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);},highlightSearchResult:function(record,regex,selectRecord) {},setSelection:function(selection) {},__proto__:WebInspector.SplitView.prototype} WebInspector.CountersGraph.Counter=function() {this.times=[];this.values=[];} WebInspector.CountersGraph.Counter.prototype={appendSample:function(time,value) {if(this.values.length&&this.values.peekLast()===value) return;this.times.push(time);this.values.push(value);},reset:function() {this.times=[];this.values=[];},setLimit:function(value) {this._limitValue=value;},_calculateBounds:function() {var maxValue;var minValue;for(var i=this._minimumIndex;i<=this._maximumIndex;i++){var value=this.values[i];if(minValue===undefined||value<minValue) minValue=value;if(maxValue===undefined||value>maxValue) maxValue=value;} minValue=minValue||0;maxValue=maxValue||1;if(this._limitValue){if(maxValue>this._limitValue*0.5) maxValue=Math.max(maxValue,this._limitValue);minValue=Math.min(minValue,this._limitValue);} return{min:minValue,max:maxValue};},_calculateVisibleIndexes:function(calculator) {var start=calculator.minimumBoundary();var end=calculator.maximumBoundary();this._minimumIndex=Number.constrain(this.times.upperBound(start)-1,0,this.times.length-1);this._maximumIndex=Number.constrain(this.times.lowerBound(end),0,this.times.length-1);this._minTime=start;this._maxTime=end;},_calculateXValues:function(width) {if(!this.values.length) return;var xFactor=width/(this._maxTime-this._minTime);this.x=new Array(this.values.length);for(var i=this._minimumIndex+1;i<=this._maximumIndex;i++) this.x[i]=xFactor*(this.times[i]-this._minTime);}} WebInspector.CountersGraph.CounterUI=function(memoryCountersPane,title,currentValueLabel,graphColor,counter) {this._memoryCountersPane=memoryCountersPane;this.counter=counter;var container=memoryCountersPane.sidebarElement().createChild("div","memory-counter-sidebar-info");var swatchColor=graphColor;this._swatch=new WebInspector.SwatchCheckbox(WebInspector.UIString(title),swatchColor);this._swatch.addEventListener(WebInspector.SwatchCheckbox.Events.Changed,this._toggleCounterGraph.bind(this));container.appendChild(this._swatch.element);this._range=this._swatch.element.createChild("span");this._value=memoryCountersPane._currentValuesBar.createChild("span","memory-counter-value");this._value.style.color=graphColor;this.graphColor=graphColor;this.limitColor=WebInspector.Color.parse(graphColor).setAlpha(0.3).toString(WebInspector.Color.Format.RGBA);this.graphYValues=[];this._verticalPadding=10;this._currentValueLabel=currentValueLabel;this._marker=memoryCountersPane._canvasContainer.createChild("div","memory-counter-marker");this._marker.style.backgroundColor=graphColor;this._clearCurrentValueAndMarker();} WebInspector.CountersGraph.CounterUI.prototype={reset:function() {this._range.textContent="";},setRange:function(minValue,maxValue) {this._range.textContent=WebInspector.UIString("[%.0f:%.0f]",minValue,maxValue);},_toggleCounterGraph:function(event) {this._value.classList.toggle("hidden",!this._swatch.checked);this._memoryCountersPane.refresh();},_recordIndexAt:function(x) {return this.counter.x.upperBound(x*window.devicePixelRatio,null,this.counter._minimumIndex+1,this.counter._maximumIndex+1)-1;},updateCurrentValue:function(x) {if(!this.visible()||!this.counter.values.length||!this.counter.x) return;var index=this._recordIndexAt(x);this._value.textContent=WebInspector.UIString(this._currentValueLabel,this.counter.values[index]);var y=this.graphYValues[index]/window.devicePixelRatio;this._marker.style.left=x+"px";this._marker.style.top=y+"px";this._marker.classList.remove("hidden");},_clearCurrentValueAndMarker:function() {this._value.textContent="";this._marker.classList.add("hidden");},_drawGraph:function(canvas) {var ctx=canvas.getContext("2d");var width=canvas.width;var height=canvas.height-2*this._verticalPadding;if(height<=0){this.graphYValues=[];return;} var originY=this._verticalPadding;var counter=this.counter;var values=counter.values;if(!values.length) return;var bounds=counter._calculateBounds();var minValue=bounds.min;var maxValue=bounds.max;this.setRange(minValue,maxValue);if(!this.visible()) return;var yValues=this.graphYValues;var maxYRange=maxValue-minValue;var yFactor=maxYRange?height/(maxYRange):1;ctx.save();ctx.lineWidth=window.devicePixelRatio;if(ctx.lineWidth%2) ctx.translate(0.5,0.5);ctx.beginPath();var value=values[counter._minimumIndex];var currentY=Math.round(originY+height-(value-minValue)*yFactor);ctx.moveTo(0,currentY);for(var i=counter._minimumIndex;i<=counter._maximumIndex;i++){var x=Math.round(counter.x[i]);ctx.lineTo(x,currentY);var currentValue=values[i];if(typeof currentValue!=="undefined") value=currentValue;currentY=Math.round(originY+height-(value-minValue)*yFactor);ctx.lineTo(x,currentY);yValues[i]=currentY;} yValues.length=i;ctx.lineTo(width,currentY);ctx.strokeStyle=this.graphColor;ctx.stroke();if(counter._limitValue){var limitLineY=Math.round(originY+height-(counter._limitValue-minValue)*yFactor);ctx.moveTo(0,limitLineY);ctx.lineTo(width,limitLineY);ctx.strokeStyle=this.limitColor;ctx.stroke();} ctx.closePath();ctx.restore();},visible:function() {return this._swatch.checked;}} WebInspector.SwatchCheckbox=function(title,color) {this.element=document.createElement("div");this._swatch=this.element.createChild("div","swatch");this.element.createChild("span","title").textContent=title;this._color=color;this.checked=true;this.element.addEventListener("click",this._toggleCheckbox.bind(this),true);} WebInspector.SwatchCheckbox.Events={Changed:"Changed"} WebInspector.SwatchCheckbox.prototype={get checked() {return this._checked;},set checked(v) {this._checked=v;if(this._checked) this._swatch.style.backgroundColor=this._color;else this._swatch.style.backgroundColor="";},_toggleCheckbox:function(event) {this.checked=!this.checked;this.dispatchEventToListeners(WebInspector.SwatchCheckbox.Events.Changed);},__proto__:WebInspector.Object.prototype};WebInspector.Layers3DView=function() {WebInspector.VBox.call(this);this.element.classList.add("layers-3d-view");this._initStatusBar();this._emptyView=new WebInspector.EmptyView(WebInspector.UIString("Not in the composited mode.\nConsider forcing composited mode in Settings."));this._canvasElement=this.element.createChild("canvas");this._canvasElement.tabIndex=0;this._transformController=new WebInspector.TransformController(this._canvasElement);this._transformController.addEventListener(WebInspector.TransformController.Events.TransformChanged,this._update,this);this._canvasElement.addEventListener("dblclick",this._onDoubleClick.bind(this),false);this._canvasElement.addEventListener("mousedown",this._onMouseDown.bind(this),false);this._canvasElement.addEventListener("mouseup",this._onMouseUp.bind(this),false);this._canvasElement.addEventListener("mouseout",this._onMouseMove.bind(this),false);this._canvasElement.addEventListener("mousemove",this._onMouseMove.bind(this),false);this._canvasElement.addEventListener("contextmenu",this._onContextMenu.bind(this),false);this._lastActiveObject={};this._picturesForLayer={};this._scrollRectQuadsForLayer={};this._isVisible={};this._layerTree=null;this._textureManager=new WebInspector.LayerTextureManager();this._textureManager.addEventListener(WebInspector.LayerTextureManager.Events.TextureUpdated,this._update,this);WebInspector.settings.showPaintRects.addChangeListener(this._update,this);} WebInspector.Layers3DView.LayerStyle;WebInspector.Layers3DView.PaintTile;WebInspector.Layers3DView.OutlineType={Hovered:"hovered",Selected:"selected"} WebInspector.Layers3DView.Events={ObjectHovered:"ObjectHovered",ObjectSelected:"ObjectSelected",LayerSnapshotRequested:"LayerSnapshotRequested",JumpToPaintEventRequested:"JumpToPaintEventRequested"} WebInspector.Layers3DView.ScrollRectTitles={RepaintsOnScroll:WebInspector.UIString("repaints on scroll"),TouchEventHandler:WebInspector.UIString("touch event listener"),WheelEventHandler:WebInspector.UIString("mousewheel event listener")} WebInspector.Layers3DView.FragmentShader="\ precision mediump float;\ varying vec4 vColor;\ varying vec2 vTextureCoord;\ uniform sampler2D uSampler;\ void main(void)\ {\ gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)) * vColor;\ }";WebInspector.Layers3DView.VertexShader="\ attribute vec3 aVertexPosition;\ attribute vec2 aTextureCoord;\ attribute vec4 aVertexColor;\ uniform mat4 uPMatrix;\ varying vec2 vTextureCoord;\ varying vec4 vColor;\ void main(void)\ {\ gl_Position = uPMatrix * vec4(aVertexPosition, 1.0);\ vColor = aVertexColor;\ vTextureCoord = aTextureCoord;\ }";WebInspector.Layers3DView.SelectedBackgroundColor=[20,40,110,0.66];WebInspector.Layers3DView.BackgroundColor=[0,0,0,0];WebInspector.Layers3DView.HoveredBorderColor=[0,0,255,1];WebInspector.Layers3DView.SelectedBorderColor=[0,255,0,1];WebInspector.Layers3DView.BorderColor=[0,0,0,1];WebInspector.Layers3DView.ScrollRectBackgroundColor=[178,0,0,0.4];WebInspector.Layers3DView.SelectedScrollRectBackgroundColor=[178,0,0,0.6];WebInspector.Layers3DView.ScrollRectBorderColor=[178,0,0,1];WebInspector.Layers3DView.BorderWidth=1;WebInspector.Layers3DView.SelectedBorderWidth=2;WebInspector.Layers3DView.LayerSpacing=20;WebInspector.Layers3DView.ScrollRectSpacing=4;WebInspector.Layers3DView.prototype={setLayerTree:function(layerTree) {this._layerTree=layerTree;this._textureManager.reset();this._update();},setTiles:function(tiles) {this._textureManager.setTiles(tiles);},showImageForLayer:function(layer,imageURL) {this._textureManager.createTexture(onTextureCreated.bind(this),imageURL);function onTextureCreated(texture) {this._layerTexture={layerId:layer.id(),texture:texture};this._update();}},onResize:function() {this._update();},wasShown:function() {if(this._needsUpdate) this._update();},_setOutline:function(type,activeObject) {this._lastActiveObject[type]=activeObject;this._update();},hoverObject:function(activeObject) {this._setOutline(WebInspector.Layers3DView.OutlineType.Hovered,activeObject);},selectObject:function(activeObject) {this._setOutline(WebInspector.Layers3DView.OutlineType.Hovered,null);this._setOutline(WebInspector.Layers3DView.OutlineType.Selected,activeObject);},_initGL:function(canvas) {var gl=canvas.getContext("webgl");gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);gl.enable(gl.BLEND);gl.clearColor(0.0,0.0,0.0,0.0);gl.enable(gl.DEPTH_TEST);return gl;},_createShader:function(type,script) {var shader=this._gl.createShader(type);this._gl.shaderSource(shader,script);this._gl.compileShader(shader);this._gl.attachShader(this._shaderProgram,shader);},_initShaders:function() {this._shaderProgram=this._gl.createProgram();this._createShader(this._gl.FRAGMENT_SHADER,WebInspector.Layers3DView.FragmentShader);this._createShader(this._gl.VERTEX_SHADER,WebInspector.Layers3DView.VertexShader);this._gl.linkProgram(this._shaderProgram);this._gl.useProgram(this._shaderProgram);this._shaderProgram.vertexPositionAttribute=this._gl.getAttribLocation(this._shaderProgram,"aVertexPosition");this._gl.enableVertexAttribArray(this._shaderProgram.vertexPositionAttribute);this._shaderProgram.vertexColorAttribute=this._gl.getAttribLocation(this._shaderProgram,"aVertexColor");this._gl.enableVertexAttribArray(this._shaderProgram.vertexColorAttribute);this._shaderProgram.textureCoordAttribute=this._gl.getAttribLocation(this._shaderProgram,"aTextureCoord");this._gl.enableVertexAttribArray(this._shaderProgram.textureCoordAttribute);this._shaderProgram.pMatrixUniform=this._gl.getUniformLocation(this._shaderProgram,"uPMatrix");this._shaderProgram.samplerUniform=this._gl.getUniformLocation(this._shaderProgram,"uSampler");},_resizeCanvas:function() {this._canvasElement.width=this._canvasElement.offsetWidth*window.devicePixelRatio;this._canvasElement.height=this._canvasElement.offsetHeight*window.devicePixelRatio;this._gl.viewportWidth=this._canvasElement.width;this._gl.viewportHeight=this._canvasElement.height;},_calculateProjectionMatrix:function() {var scaleFactorForMargins=1.2;var viewport=this._layerTree.viewportSize();var baseWidth=viewport?viewport.width:this._layerTree.contentRoot().width();var baseHeight=viewport?viewport.height:this._layerTree.contentRoot().height();var canvasWidth=this._canvasElement.width;var canvasHeight=this._canvasElement.height;var scaleX=canvasWidth/baseWidth/scaleFactorForMargins;var scaleY=canvasHeight/baseHeight/scaleFactorForMargins;var viewScale=Math.min(scaleX,scaleY);var scale=this._transformController.scale();var offsetX=this._transformController.offsetX()*window.devicePixelRatio;var offsetY=this._transformController.offsetY()*window.devicePixelRatio;var rotateX=this._transformController.rotateX();var rotateY=this._transformController.rotateY();return new WebKitCSSMatrix().translate(offsetX,offsetY,0).scale(scale,scale,scale).translate(canvasWidth/2,canvasHeight/2,0).rotate(rotateX,rotateY,0).scale(viewScale,viewScale,viewScale).translate(-baseWidth/2,-baseHeight/2,0);},_arrayFromMatrix:function(m) {return new Float32Array([m.m11,m.m12,m.m13,m.m14,m.m21,m.m22,m.m23,m.m24,m.m31,m.m32,m.m33,m.m34,m.m41,m.m42,m.m43,m.m44]);},_initProjectionMatrix:function() {var projectionMatrix=this._calculateProjectionMatrix();this._pMatrix=new WebKitCSSMatrix().scale(1,-1,-1).translate(-1,-1,0).scale(2/this._canvasElement.width,2/this._canvasElement.height,1/1000000).multiply(projectionMatrix);this._gl.uniformMatrix4fv(this._shaderProgram.pMatrixUniform,false,this._arrayFromMatrix(this._pMatrix));this._textureScale=Math.min(1,Math.max(projectionMatrix.m11,projectionMatrix.m22));},_initWhiteTexture:function() {this._whiteTexture=this._gl.createTexture();this._gl.bindTexture(this._gl.TEXTURE_2D,this._whiteTexture);var whitePixel=new Uint8Array([255,255,255,255]);this._gl.texImage2D(this._gl.TEXTURE_2D,0,this._gl.RGBA,1,1,0,this._gl.RGBA,this._gl.UNSIGNED_BYTE,whitePixel);},_initGLIfNecessary:function() {if(this._gl) return this._gl;this._gl=this._initGL(this._canvasElement);this._initShaders();this._initWhiteTexture();this._textureManager.setContext(this._gl);return this._gl;},_calculateDepths:function() {this._depthByLayerId={};this._isVisible={};var depth=0;var root=this._layerTree.root();var queue=[root];this._depthByLayerId[root.id()]=0;this._isVisible[root.id()]=false;while(queue.length>0){var layer=queue.shift();var children=layer.children();for(var i=0;i<children.length;++i){this._depthByLayerId[children[i].id()]=++depth;this._isVisible[children[i].id()]=children[i]===this._layerTree.contentRoot()||this._isVisible[layer.id()];queue.push(children[i]);}} this._maxDepth=depth;},_isObjectActive:function(type,layer,scrollRectIndex) {var activeObject=this._lastActiveObject[type];return activeObject&&activeObject.layer&&activeObject.layer.id()===layer.id()&&(typeof scrollRectIndex!=="number"||activeObject.scrollRectIndex===scrollRectIndex);},_styleForLayer:function(layer) {var isSelected=this._isObjectActive(WebInspector.Layers3DView.OutlineType.Selected,layer);var isHovered=this._isObjectActive(WebInspector.Layers3DView.OutlineType.Hovered,layer);var borderColor;if(isSelected) borderColor=WebInspector.Layers3DView.SelectedBorderColor;else if(isHovered) borderColor=WebInspector.Layers3DView.HoveredBorderColor;else borderColor=WebInspector.Layers3DView.BorderColor;var borderWidth=isSelected?WebInspector.Layers3DView.SelectedBorderWidth:WebInspector.Layers3DView.BorderWidth;return{borderColor:borderColor,borderWidth:borderWidth};},_depthForLayer:function(layer) {return this._depthByLayerId[layer.id()]*WebInspector.Layers3DView.LayerSpacing;},_calculateScrollRectDepth:function(layer,index) {return this._depthForLayer(layer)+index*WebInspector.Layers3DView.ScrollRectSpacing+1;},_calculateLayerRect:function(layer) {if(!this._isVisible[layer.id()]) return;var activeObject=WebInspector.Layers3DView.ActiveObject.createLayerActiveObject(layer);var rect=new WebInspector.Layers3DView.Rectangle(activeObject);var style=this._styleForLayer(layer);rect.setVertices(layer.quad(),this._depthForLayer(layer));rect.lineWidth=style.borderWidth;rect.borderColor=style.borderColor;this._rects.push(rect);},_calculateLayerScrollRects:function(layer) {var scrollRects=layer.scrollRects();for(var i=0;i<scrollRects.length;++i){var activeObject=WebInspector.Layers3DView.ActiveObject.createScrollRectActiveObject(layer,i);var rect=new WebInspector.Layers3DView.Rectangle(activeObject);rect.calculateVerticesFromRect(layer,scrollRects[i].rect,this._calculateScrollRectDepth(layer,i));var isSelected=this._isObjectActive(WebInspector.Layers3DView.OutlineType.Selected,layer,i);var color=isSelected?WebInspector.Layers3DView.SelectedScrollRectBackgroundColor:WebInspector.Layers3DView.ScrollRectBackgroundColor;rect.fillColor=color;rect.borderColor=WebInspector.Layers3DView.ScrollRectBorderColor;this._rects.push(rect);}},_calculateLayerImageRect:function(layer) {var layerTexture=this._layerTexture;if(layer.id()!==layerTexture.layerId) return;var activeObject=WebInspector.Layers3DView.ActiveObject.createLayerActiveObject(layer);var rect=new WebInspector.Layers3DView.Rectangle(activeObject);rect.setVertices(layer.quad(),this._depthForLayer(layer));rect.texture=layerTexture.texture;this._rects.push(rect);},_calculateLayerTileRects:function(layer) {var tiles=this._textureManager.tilesForLayer(layer.id());for(var i=0;i<tiles.length;++i){var tile=tiles[i];if(!tile.texture) continue;var activeObject=WebInspector.Layers3DView.ActiveObject.createTileActiveObject(layer,tile.traceEvent);var rect=new WebInspector.Layers3DView.Rectangle(activeObject);rect.calculateVerticesFromRect(layer,{x:tile.rect[0],y:tile.rect[1],width:tile.rect[2],height:tile.rect[3]},this._depthForLayer(layer)+1);rect.texture=tile.texture;this._rects.push(rect);}},_calculateViewportRect:function() {var rect=new WebInspector.Layers3DView.Rectangle(null);var viewport=this._layerTree.viewportSize();var depth=(this._maxDepth+1)*WebInspector.Layers3DView.LayerSpacing;var vertices=[0,0,depth,viewport.width,0,depth,viewport.width,viewport.height,depth,0,viewport.height,depth];rect.vertices=vertices;rect.borderColor=[0,0,0,1];rect.lineWidth=3;this._rects.push(rect);},_calculateRects:function() {this._rects=[];this._layerTree.forEachLayer(this._calculateLayerRect.bind(this));if(this._showSlowScrollRectsSetting.get()) this._layerTree.forEachLayer(this._calculateLayerScrollRects.bind(this));if(this._showPaintsSetting.get()){if(this._layerTexture) this._layerTree.forEachLayer(this._calculateLayerImageRect.bind(this));else this._layerTree.forEachLayer(this._calculateLayerTileRects.bind(this));} if(this._layerTree.viewportSize()&&this._showViewportSetting.get()) this._calculateViewportRect();},_makeColorsArray:function(color) {var colors=[];var normalizedColor=[color[0]/255,color[1]/255,color[2]/255,color[3]];for(var i=0;i<4;i++){colors=colors.concat(normalizedColor);} return colors;},_setVertexAttribute:function(attribute,array,length) {var gl=this._gl;var buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(array),gl.STATIC_DRAW);gl.vertexAttribPointer(attribute,length,gl.FLOAT,false,0,0);},_drawRectangle:function(vertices,isBorder,color,texture) {var gl=this._gl;var glMode=isBorder?gl.LINE_LOOP:gl.TRIANGLE_FAN;var white=[255,255,255,1];this._setVertexAttribute(this._shaderProgram.vertexPositionAttribute,vertices,3);this._setVertexAttribute(this._shaderProgram.textureCoordAttribute,[0,1,1,1,1,0,0,0],2);if(texture){this._setVertexAttribute(this._shaderProgram.vertexColorAttribute,this._makeColorsArray(white),white.length);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture);gl.uniform1i(this._shaderProgram.samplerUniform,0);}else{this._setVertexAttribute(this._shaderProgram.vertexColorAttribute,this._makeColorsArray(color||white),color.length);gl.bindTexture(gl.TEXTURE_2D,this._whiteTexture);} var numberOfVertices=4;gl.drawArrays(glMode,0,numberOfVertices);},_drawViewRect:function(rect) {var vertices=rect.vertices;if(rect.texture) this._drawRectangle(vertices,false,undefined,rect.texture);else if(rect.fillColor) this._drawRectangle(vertices,false,rect.fillColor);this._gl.lineWidth(rect.lineWidth);if(rect.borderColor) this._drawRectangle(vertices,true,rect.borderColor);},_update:function() {if(!this.isShowing()){this._needsUpdate=true;return;} var contentRoot=this._layerTree&&this._layerTree.contentRoot();if(!contentRoot||!this._layerTree.root()){this._emptyView.show(this.element);return;} this._emptyView.detach();var gl=this._initGLIfNecessary();this._resizeCanvas();this._initProjectionMatrix();this._calculateDepths();this._textureManager.setScale(this._textureScale);gl.viewport(0,0,gl.viewportWidth,gl.viewportHeight);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);this._calculateRects();this._rects.forEach(this._drawViewRect.bind(this));},_activeObjectFromEventPoint:function(event) {if(!this._layerTree) return null;var closestIntersectionPoint=Infinity;var closestObject=null;var projectionMatrix=new WebKitCSSMatrix().scale(1,-1,-1).translate(-1,-1,0).multiply(this._calculateProjectionMatrix());var x0=(event.clientX-this._canvasElement.totalOffsetLeft())*window.devicePixelRatio;var y0=-(event.clientY-this._canvasElement.totalOffsetTop())*window.devicePixelRatio;function checkIntersection(rect) {if(!rect.relatedObject) return;var t=rect.intersectWithLine(projectionMatrix,x0,y0);if(t<closestIntersectionPoint){closestIntersectionPoint=t;closestObject=rect.relatedObject;}} this._rects.forEach(checkIntersection);return closestObject;},_createVisibilitySetting:function(caption,name,value,statusBarElement) {var checkbox=new WebInspector.StatusBarCheckbox(WebInspector.UIString(caption)) statusBarElement.appendChild(checkbox.element);var setting=WebInspector.settings.createSetting(name,value) WebInspector.SettingsUI.bindCheckbox(checkbox.inputElement,setting);setting.addChangeListener(this._update,this);return setting;},_initStatusBar:function() {this._panelStatusBarElement=this.element.createChild("div","panel-status-bar");this._showViewportSetting=this._createVisibilitySetting("Viewport","showViewport",true,this._panelStatusBarElement);this._showSlowScrollRectsSetting=this._createVisibilitySetting("Slow scroll rects","showSlowScrollRects",true,this._panelStatusBarElement);this._showPaintsSetting=this._createVisibilitySetting("Paints","showPaints",true,this._panelStatusBarElement);},_onContextMenu:function(event) {var activeObject=this._activeObjectFromEventPoint(event);var node=activeObject&&activeObject.layer&&activeObject.layer.nodeForSelfOrAncestor();var contextMenu=new WebInspector.ContextMenu(event);contextMenu.appendItem(WebInspector.UIString("Reset View"),this._transformController.resetAndNotify.bind(this._transformController),false);if(activeObject.type()===WebInspector.Layers3DView.ActiveObject.Type.Tile) contextMenu.appendItem(WebInspector.UIString("Jump to Paint Event"),this.dispatchEventToListeners.bind(this,WebInspector.Layers3DView.Events.JumpToPaintEventRequested,activeObject.traceEvent),false);if(node) contextMenu.appendApplicableItems(node);contextMenu.show();},_onMouseMove:function(event) {if(event.which) return;this.dispatchEventToListeners(WebInspector.Layers3DView.Events.ObjectHovered,this._activeObjectFromEventPoint(event));},_onMouseDown:function(event) {this._mouseDownX=event.clientX;this._mouseDownY=event.clientY;},_onMouseUp:function(event) {const maxDistanceInPixels=6;if(this._mouseDownX&&Math.abs(event.clientX-this._mouseDownX)<maxDistanceInPixels&&Math.abs(event.clientY-this._mouseDownY)<maxDistanceInPixels) this.dispatchEventToListeners(WebInspector.Layers3DView.Events.ObjectSelected,this._activeObjectFromEventPoint(event));delete this._mouseDownX;delete this._mouseDownY;},_onDoubleClick:function(event) {var object=this._activeObjectFromEventPoint(event);if(object){if(object.type()==WebInspector.Layers3DView.ActiveObject.Type.Tile) this.dispatchEventToListeners(WebInspector.Layers3DView.Events.JumpToPaintEventRequested,object.traceEvent);else if(object.layer) this.dispatchEventToListeners(WebInspector.Layers3DView.Events.LayerSnapshotRequested,object.layer);} event.stopPropagation();},__proto__:WebInspector.VBox.prototype} WebInspector.LayerTextureManager=function() {WebInspector.Object.call(this);this.reset();} WebInspector.LayerTextureManager.Events={TextureUpdated:"TextureUpated"} WebInspector.LayerTextureManager.prototype={reset:function() {this._tilesByLayerId={};this._scale=0;},setContext:function(glContext) {this._gl=glContext;if(this._scale) this._updateTextures();},setTiles:function(paintTiles) {this._tilesByLayerId={};if(!paintTiles) return;for(var i=0;i<paintTiles.length;++i){var layerId=paintTiles[i].layerId;var tilesForLayer=this._tilesByLayerId[layerId];if(!tilesForLayer){tilesForLayer=[];this._tilesByLayerId[layerId]=tilesForLayer;} var tile=new WebInspector.LayerTextureManager.Tile(paintTiles[i].snapshot,paintTiles[i].rect,paintTiles[i].traceEvent);tilesForLayer.push(tile);if(this._scale&&this._gl) this._updateTile(tile);}},setScale:function(scale) {if(this._scale&&this._scale>=scale) return;this._scale=scale;this._updateTextures();},tilesForLayer:function(layerId) {return this._tilesByLayerId[layerId]||[];},_updateTextures:function() {if(!this._gl) return;if(!this._scale) return;for(var layerId in this._tilesByLayerId){for(var i=0;i<this._tilesByLayerId[layerId].length;++i){var tile=this._tilesByLayerId[layerId][i];if(!tile.scale||tile.scale<this._scale) this._updateTile(tile);}}},_updateTile:function(tile) {console.assert(this._scale&&this._gl);tile.scale=this._scale;tile.snapshot.requestImage(null,null,tile.scale,onGotImage.bind(this));function onGotImage(imageURL) {this.createTexture(onTextureCreated.bind(this),imageURL);} function onTextureCreated(texture) {tile.texture=texture;this.dispatchEventToListeners(WebInspector.LayerTextureManager.Events.TextureUpdated);}},createTexture:function(textureCreatedCallback,imageURL) {var image=new Image();image.addEventListener("load",onImageLoaded.bind(this),false);image.src=imageURL;function onImageLoaded() {textureCreatedCallback(this._createTextureForImage(image));}},_createTextureForImage:function(image) {var texture=this._gl.createTexture();texture.image=image;this._gl.bindTexture(this._gl.TEXTURE_2D,texture);this._gl.pixelStorei(this._gl.UNPACK_FLIP_Y_WEBGL,true);this._gl.texImage2D(this._gl.TEXTURE_2D,0,this._gl.RGBA,this._gl.RGBA,this._gl.UNSIGNED_BYTE,texture.image);this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MIN_FILTER,this._gl.LINEAR);this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MAG_FILTER,this._gl.LINEAR);this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_WRAP_S,this._gl.CLAMP_TO_EDGE);this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_WRAP_T,this._gl.CLAMP_TO_EDGE);this._gl.bindTexture(this._gl.TEXTURE_2D,null);return texture;},__proto__:WebInspector.Object.prototype} WebInspector.Layers3DView.Rectangle=function(relatedObject) {this.relatedObject=relatedObject;this.lineWidth=1;this.borderColor=null;this.fillColor=null;this.texture=null;} WebInspector.Layers3DView.Rectangle.prototype={setVertices:function(quad,z) {this.vertices=[quad[0],quad[1],z,quad[2],quad[3],z,quad[4],quad[5],z,quad[6],quad[7],z];},_calculatePointOnQuad:function(quad,ratioX,ratioY) {var x0=quad[0];var y0=quad[1];var x1=quad[2];var y1=quad[3];var x2=quad[4];var y2=quad[5];var x3=quad[6];var y3=quad[7];var firstSidePointX=x0+ratioX*(x1-x0);var firstSidePointY=y0+ratioX*(y1-y0);var thirdSidePointX=x3+ratioX*(x2-x3);var thirdSidePointY=y3+ratioX*(y2-y3);var x=firstSidePointX+ratioY*(thirdSidePointX-firstSidePointX);var y=firstSidePointY+ratioY*(thirdSidePointY-firstSidePointY);return[x,y];},calculateVerticesFromRect:function(layer,rect,z) {var quad=layer.quad();var rx1=rect.x/layer.width();var rx2=(rect.x+rect.width)/layer.width();var ry1=rect.y/layer.height();var ry2=(rect.y+rect.height)/layer.height();var rectQuad=this._calculatePointOnQuad(quad,rx1,ry1).concat(this._calculatePointOnQuad(quad,rx2,ry1)).concat(this._calculatePointOnQuad(quad,rx2,ry2)).concat(this._calculatePointOnQuad(quad,rx1,ry2));this.setVertices(rectQuad,z);},intersectWithLine:function(matrix,x0,y0) {var epsilon=1e-8;var i;var points=[];for(i=0;i<4;++i) points[i]=WebInspector.Geometry.multiplyVectorByMatrixAndNormalize(new WebInspector.Geometry.Vector(this.vertices[i*3],this.vertices[i*3+1],this.vertices[i*3+2]),matrix);var normal=WebInspector.Geometry.crossProduct(WebInspector.Geometry.subtract(points[1],points[0]),WebInspector.Geometry.subtract(points[2],points[1]));var A=normal.x;var B=normal.y;var C=normal.z;var D=-(A*points[0].x+B*points[0].y+C*points[0].z);var t=-(D+A*x0+B*y0)/C;var pt=new WebInspector.Geometry.Vector(x0,y0,t);var tVects=points.map(WebInspector.Geometry.subtract.bind(null,pt));for(i=0;i<tVects.length;++i){var product=WebInspector.Geometry.scalarProduct(normal,WebInspector.Geometry.crossProduct(tVects[i],tVects[(i+1)%tVects.length]));if(product<0) return undefined;} return t;}} WebInspector.Layers3DView.ActiveObject=function() {} WebInspector.Layers3DView.ActiveObject.Type={Layer:"Layer",ScrollRect:"ScrollRect",Tile:"Tile",};WebInspector.Layers3DView.ActiveObject.createLayerActiveObject=function(layer) {var activeObject=new WebInspector.Layers3DView.ActiveObject();activeObject._type=WebInspector.Layers3DView.ActiveObject.Type.Layer;activeObject.layer=layer;return activeObject;} WebInspector.Layers3DView.ActiveObject.createScrollRectActiveObject=function(layer,scrollRectIndex) {var activeObject=new WebInspector.Layers3DView.ActiveObject();activeObject._type=WebInspector.Layers3DView.ActiveObject.Type.ScrollRect;activeObject.layer=layer;activeObject.scrollRectIndex=scrollRectIndex;return activeObject;} WebInspector.Layers3DView.ActiveObject.createTileActiveObject=function(layer,traceEvent) {var activeObject=new WebInspector.Layers3DView.ActiveObject();activeObject._type=WebInspector.Layers3DView.ActiveObject.Type.Tile;activeObject.layer=layer;activeObject.traceEvent=traceEvent;return activeObject;} WebInspector.Layers3DView.ActiveObject.prototype={type:function() {return this._type;}};WebInspector.LayerTextureManager.Tile=function(snapshot,rect,traceEvent) {this.snapshot=snapshot;this.rect=rect;this.traceEvent=traceEvent;this.scale=0;this.texture=null;};WebInspector.MemoryCountersGraph=function(delegate,model,uiUtils) {WebInspector.CountersGraph.call(this,WebInspector.UIString("MEMORY"),delegate,model);this._uiUtils=uiUtils;this._countersByName={};this._countersByName["jsHeapSizeUsed"]=this.createCounter(WebInspector.UIString("Used JS Heap"),WebInspector.UIString("JS Heap Size: %d"),"hsl(220, 90%, 43%)");this._countersByName["documents"]=this.createCounter(WebInspector.UIString("Documents"),WebInspector.UIString("Documents: %d"),"hsl(0, 90%, 43%)");this._countersByName["nodes"]=this.createCounter(WebInspector.UIString("Nodes"),WebInspector.UIString("Nodes: %d"),"hsl(120, 90%, 43%)");this._countersByName["jsEventListeners"]=this.createCounter(WebInspector.UIString("Listeners"),WebInspector.UIString("Listeners: %d"),"hsl(38, 90%, 43%)");if(WebInspector.experimentsSettings.gpuTimeline.isEnabled()){this._gpuMemoryCounter=this.createCounter(WebInspector.UIString("GPU Memory"),WebInspector.UIString("GPU Memory [KB]: %d"),"hsl(300, 90%, 43%)");this._countersByName["gpuMemoryUsedKB"]=this._gpuMemoryCounter;}} WebInspector.MemoryCountersGraph.prototype={timelineStarted:function() {},timelineStopped:function() {},addRecord:function(record) {function addStatistics(record) {var counters=this._uiUtils.countersForRecord(record);if(!counters) return;for(var name in counters){var counter=this._countersByName[name];if(counter) counter.appendSample(record.endTime()||record.startTime(),counters[name]);} var gpuMemoryLimitCounterName="gpuMemoryLimitKB";if(this._gpuMemoryCounter&&(gpuMemoryLimitCounterName in counters)) this._gpuMemoryCounter.setLimit(counters[gpuMemoryLimitCounterName]);} WebInspector.TimelineModel.forAllRecords([record],null,addStatistics.bind(this));this.scheduleRefresh();},refreshRecords:function() {this.reset();var records=this._model.records();for(var i=0;i<records.length;++i) this.addRecord(records[i]);},__proto__:WebInspector.CountersGraph.prototype};WebInspector.TimelineModel=function() {WebInspector.Object.call(this);this._filters=[];} WebInspector.TimelineModel.RecordType={Root:"Root",Program:"Program",EventDispatch:"EventDispatch",GPUTask:"GPUTask",RequestMainThreadFrame:"RequestMainThreadFrame",BeginFrame:"BeginFrame",ActivateLayerTree:"ActivateLayerTree",DrawFrame:"DrawFrame",ScheduleStyleRecalculation:"ScheduleStyleRecalculation",RecalculateStyles:"RecalculateStyles",InvalidateLayout:"InvalidateLayout",Layout:"Layout",UpdateLayerTree:"UpdateLayerTree",PaintSetup:"PaintSetup",Paint:"Paint",Rasterize:"Rasterize",ScrollLayer:"ScrollLayer",DecodeImage:"DecodeImage",ResizeImage:"ResizeImage",CompositeLayers:"CompositeLayers",ParseHTML:"ParseHTML",TimerInstall:"TimerInstall",TimerRemove:"TimerRemove",TimerFire:"TimerFire",XHRReadyStateChange:"XHRReadyStateChange",XHRLoad:"XHRLoad",EvaluateScript:"EvaluateScript",MarkLoad:"MarkLoad",MarkDOMContent:"MarkDOMContent",MarkFirstPaint:"MarkFirstPaint",TimeStamp:"TimeStamp",ConsoleTime:"ConsoleTime",ResourceSendRequest:"ResourceSendRequest",ResourceReceiveResponse:"ResourceReceiveResponse",ResourceReceivedData:"ResourceReceivedData",ResourceFinish:"ResourceFinish",FunctionCall:"FunctionCall",GCEvent:"GCEvent",JSFrame:"JSFrame",UpdateCounters:"UpdateCounters",RequestAnimationFrame:"RequestAnimationFrame",CancelAnimationFrame:"CancelAnimationFrame",FireAnimationFrame:"FireAnimationFrame",WebSocketCreate:"WebSocketCreate",WebSocketSendHandshakeRequest:"WebSocketSendHandshakeRequest",WebSocketReceiveHandshakeResponse:"WebSocketReceiveHandshakeResponse",WebSocketDestroy:"WebSocketDestroy",EmbedderCallback:"EmbedderCallback",} WebInspector.TimelineModel.Events={RecordAdded:"RecordAdded",RecordsCleared:"RecordsCleared",RecordingStarted:"RecordingStarted",RecordingStopped:"RecordingStopped",RecordingProgress:"RecordingProgress",RecordFilterChanged:"RecordFilterChanged"} WebInspector.TimelineModel.MainThreadName="main";WebInspector.TimelineModel.forAllRecords=function(recordsArray,preOrderCallback,postOrderCallback) {function processRecords(records,depth) {for(var i=0;i<records.length;++i){var record=records[i];if(preOrderCallback&&preOrderCallback(record,depth)) return true;if(processRecords(record.children(),depth+1)) return true;if(postOrderCallback&&postOrderCallback(record,depth)) return true;} return false;} return processRecords(recordsArray,0);} WebInspector.TimelineModel.prototype={startRecording:function(captureStacks,captureMemory,capturePictures) {},stopRecording:function() {},forAllRecords:function(preOrderCallback,postOrderCallback) {WebInspector.TimelineModel.forAllRecords(this._records,preOrderCallback,postOrderCallback);},addFilter:function(filter) {this._filters.push(filter);filter._model=this;},forAllFilteredRecords:function(callback) {function processRecord(record,depth) {var visible=this.isVisible(record);if(visible){if(callback(record,depth)) return true;} for(var i=0;i<record.children().length;++i){if(processRecord.call(this,record.children()[i],visible?depth+1:depth)) return true;} return false;} for(var i=0;i<this._records.length;++i) processRecord.call(this,this._records[i],0);},isVisible:function(record) {for(var i=0;i<this._filters.length;++i){if(!this._filters[i].accept(record)) return false;} return true;},_filterChanged:function() {this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordFilterChanged);},records:function() {return this._records;},loadFromFile:function(file,progress) {var delegate=new WebInspector.TimelineModelLoadFromFileDelegate(this,progress);var fileReader=this._createFileReader(file,delegate);var loader=this.createLoader(fileReader,progress);fileReader.start(loader);},createLoader:function(fileReader,progress) {throw new Error("Not implemented.");},_createFileReader:function(file,delegate) {return new WebInspector.ChunkedFileReader(file,WebInspector.TimelineModelImpl.TransferChunkLengthBytes,delegate);},_createFileWriter:function() {return new WebInspector.FileOutputStream();},saveToFile:function() {var now=new Date();var fileName="TimelineRawData-"+now.toISO8601Compact()+".json";var stream=this._createFileWriter();function callback(accepted) {if(!accepted) return;this.writeToStream(stream);} stream.open(fileName,callback.bind(this));},writeToStream:function(stream) {throw new Error("Not implemented.");},reset:function() {this._records=[];this._minimumRecordTime=0;this._maximumRecordTime=0;this._mainThreadTasks=[];this._gpuThreadTasks=[];this._eventDividerRecords=[];this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordsCleared);},minimumRecordTime:function() {return this._minimumRecordTime;},maximumRecordTime:function() {return this._maximumRecordTime;},isEmpty:function() {return this.minimumRecordTime()===0&&this.maximumRecordTime()===0;},_updateBoundaries:function(record) {var startTime=record.startTime();var endTime=record.endTime();if(!this._minimumRecordTime||startTime<this._minimumRecordTime) this._minimumRecordTime=startTime;if(endTime>this._maximumRecordTime) this._maximumRecordTime=endTime;},mainThreadTasks:function() {return this._mainThreadTasks;},gpuThreadTasks:function() {return this._gpuThreadTasks;},eventDividerRecords:function() {return this._eventDividerRecords;},__proto__:WebInspector.Object.prototype} WebInspector.TimelineModel.Record=function() {} WebInspector.TimelineModel.Record.prototype={callSiteStackTrace:function(){},initiator:function(){},target:function(){},selfTime:function(){},children:function(){},startTime:function(){},thread:function(){},endTime:function(){},setEndTime:function(endTime){},data:function(){},type:function(){},frameId:function(){},stackTrace:function(){},getUserObject:function(key){},setUserObject:function(key,value){},warnings:function(){}} WebInspector.TimelineModel.Filter=function() {this._model;} WebInspector.TimelineModel.Filter.prototype={accept:function(record) {return true;},notifyFilterChanged:function() {this._model._filterChanged();}} WebInspector.TimelineRecordTypeFilter=function(recordTypes) {WebInspector.TimelineModel.Filter.call(this);this._recordTypes=recordTypes.keySet();} WebInspector.TimelineRecordTypeFilter.prototype={__proto__:WebInspector.TimelineModel.Filter.prototype} WebInspector.TimelineRecordHiddenEmptyTypeFilter=function(recordTypes) {WebInspector.TimelineRecordTypeFilter.call(this,recordTypes);} WebInspector.TimelineRecordHiddenEmptyTypeFilter.prototype={accept:function(record) {return record.children().length!==0||!this._recordTypes[record.type()];},__proto__:WebInspector.TimelineRecordTypeFilter.prototype} WebInspector.TimelineRecordHiddenTypeFilter=function(recordTypes) {WebInspector.TimelineRecordTypeFilter.call(this,recordTypes);} WebInspector.TimelineRecordHiddenTypeFilter.prototype={accept:function(record) {return!this._recordTypes[record.type()];},__proto__:WebInspector.TimelineRecordTypeFilter.prototype} WebInspector.TimelineRecordVisibleTypeFilter=function(recordTypes) {WebInspector.TimelineRecordTypeFilter.call(this,recordTypes);} WebInspector.TimelineRecordVisibleTypeFilter.prototype={accept:function(record) {return!!this._recordTypes[record.type()];},__proto__:WebInspector.TimelineRecordTypeFilter.prototype} WebInspector.TimelineMergingRecordBuffer=function() {this._backgroundRecordsBuffer=[];} WebInspector.TimelineMergingRecordBuffer.prototype={process:function(thread,records) {if(thread!==WebInspector.TimelineModel.MainThreadName){this._backgroundRecordsBuffer=this._backgroundRecordsBuffer.concat(records);return[];} function recordTimestampComparator(a,b) {return a.startTime()<b.startTime()?-1:1;} var result=this._backgroundRecordsBuffer.mergeOrdered(records,recordTimestampComparator);this._backgroundRecordsBuffer=[];return result;}} WebInspector.TimelineModelLoadFromFileDelegate=function(model,progress) {this._model=model;this._progress=progress;} WebInspector.TimelineModelLoadFromFileDelegate.prototype={onTransferStarted:function() {this._progress.setTitle(WebInspector.UIString("Loading\u2026"));},onChunkTransferred:function(reader) {if(this._progress.isCanceled()){reader.cancel();this._progress.done();this._model.reset();return;} var totalSize=reader.fileSize();if(totalSize){this._progress.setTotalWork(totalSize);this._progress.setWorked(reader.loadedSize());}},onTransferFinished:function() {this._progress.done();},onError:function(reader,event) {this._progress.done();this._model.reset();switch(event.target.error.code){case FileError.NOT_FOUND_ERR:WebInspector.console.error(WebInspector.UIString("File \"%s\" not found.",reader.fileName()));break;case FileError.NOT_READABLE_ERR:WebInspector.console.error(WebInspector.UIString("File \"%s\" is not readable",reader.fileName()));break;case FileError.ABORT_ERR:break;default:WebInspector.console.error(WebInspector.UIString("An error occurred while reading the file \"%s\"",reader.fileName()));}}};WebInspector.TimelineModelImpl=function() {WebInspector.TimelineModel.call(this);this._currentTarget=null;this._filters=[];this._bindings=new WebInspector.TimelineModelImpl.InterRecordBindings();this.reset();WebInspector.targetManager.addModelListener(WebInspector.TimelineManager,WebInspector.TimelineManager.EventTypes.TimelineEventRecorded,this._onRecordAdded,this);WebInspector.targetManager.addModelListener(WebInspector.TimelineManager,WebInspector.TimelineManager.EventTypes.TimelineStarted,this._onStarted,this);WebInspector.targetManager.addModelListener(WebInspector.TimelineManager,WebInspector.TimelineManager.EventTypes.TimelineStopped,this._onStopped,this);WebInspector.targetManager.addModelListener(WebInspector.TimelineManager,WebInspector.TimelineManager.EventTypes.TimelineProgress,this._onProgress,this);WebInspector.targetManager.observeTargets(this);} WebInspector.TimelineModelImpl.TransferChunkLengthBytes=5000000;WebInspector.TimelineModelImpl.prototype={targetAdded:function(target){},targetRemoved:function(target) {if(this._currentTarget===target) this._currentTarget=null;},startRecording:function(captureStacks,captureMemory,capturePictures) {console.assert(!capturePictures,"Legacy timeline does not support capturing pictures");this.reset();this._currentTarget=WebInspector.context.flavor(WebInspector.Target);console.assert(this._currentTarget);this._clientInitiatedRecording=true;var maxStackFrames=captureStacks?30:0;var includeGPUEvents=WebInspector.experimentsSettings.gpuTimeline.isEnabled();var liveEvents=[WebInspector.TimelineModel.RecordType.BeginFrame,WebInspector.TimelineModel.RecordType.DrawFrame,WebInspector.TimelineModel.RecordType.RequestMainThreadFrame,WebInspector.TimelineModel.RecordType.ActivateLayerTree];this._currentTarget.timelineManager.start(maxStackFrames,liveEvents.join(","),captureMemory,includeGPUEvents,this._fireRecordingStarted.bind(this));},stopRecording:function() {if(!this._currentTarget) return;if(!this._clientInitiatedRecording){this._currentTarget.timelineManager.start(undefined,undefined,undefined,undefined,stopTimeline.bind(this));return;} function stopTimeline() {this._currentTarget.timelineManager.stop(this._fireRecordingStopped.bind(this));} this._clientInitiatedRecording=false;this._currentTarget.timelineManager.stop(this._fireRecordingStopped.bind(this));},records:function() {return this._records;},_onRecordAdded:function(event) {var timelineManager=(event.target);if(this._collectionEnabled&&timelineManager.target()===this._currentTarget) this._addRecord((event.data));},_onStarted:function(event) {if(!event.data||this._collectionEnabled) return;var timelineManager=(event.target);if(this._currentTarget!==timelineManager.target()){this.reset();this._currentTarget=timelineManager.target();} this._fireRecordingStarted();},_onStopped:function(event) {var timelineManager=(event.target);if(timelineManager.target()!==this._currentTarget) return;this.reset();this._currentTarget=timelineManager.target();var events=(event.data.events);for(var i=0;i<events.length;++i) this._addRecord(events[i]);if(event.data.consoleTimeline){this._fireRecordingStopped(null,null);} this._collectionEnabled=false;},_onProgress:function(event) {var timelineManager=(event.target);if(timelineManager.target()===this._currentTarget) this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordingProgress,event.data);},_fireRecordingStarted:function() {this._collectionEnabled=true;this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordingStarted);},_fireRecordingStopped:function(error,cpuProfile) {if(cpuProfile) WebInspector.TimelineJSProfileProcessor.mergeJSProfileIntoTimeline(this,cpuProfile);this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordingStopped);},_addRecord:function(payload) {this._internStrings(payload);this._payloads.push(payload);var record=this._innerAddRecord(payload,null);this._