diff options
Diffstat (limited to 'chromium/third_party/trace-viewer/src/cc/layer_tree_quad_stack_view.js')
-rw-r--r-- | chromium/third_party/trace-viewer/src/cc/layer_tree_quad_stack_view.js | 852 |
1 files changed, 0 insertions, 852 deletions
diff --git a/chromium/third_party/trace-viewer/src/cc/layer_tree_quad_stack_view.js b/chromium/third_party/trace-viewer/src/cc/layer_tree_quad_stack_view.js deleted file mode 100644 index 17cf9fd35b0..00000000000 --- a/chromium/third_party/trace-viewer/src/cc/layer_tree_quad_stack_view.js +++ /dev/null @@ -1,852 +0,0 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -'use strict'; - -/** - * @fileoverview Graphical view of LayerTreeImpl, with controls for - * type of layer content shown and info bar for content-loading warnings. - */ - -base.requireStylesheet('cc.layer_tree_quad_stack_view'); - -base.require('base.color'); -base.require('base.properties'); -base.require('base.raf'); -base.require('base.quad'); -base.require('base.range'); -base.require('cc.picture'); -base.require('cc.render_pass'); -base.require('cc.tile'); -base.require('cc.debug_colors'); -base.require('ui.quad_stack_view'); -base.require('ui.info_bar'); - - -base.exportTo('cc', function() { - - var TILE_HEATMAP_TYPE = {}; - TILE_HEATMAP_TYPE.NONE = 0; - TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY = 1; - TILE_HEATMAP_TYPE.DISTANCE_TO_VISIBLE = 2; - TILE_HEATMAP_TYPE.TIME_TO_VISIBLE = 3; - TILE_HEATMAP_TYPE.USING_GPU_MEMORY = 4; - - function createTileRectsSelectorBaseOptions() { - return [{label: 'None', value: 'none'}, - {label: 'Coverage Rects', value: 'coverage'}]; - } - - /** - * @constructor - */ - var LayerTreeQuadStackView = ui.define('layer-tree-quad-stack-view'); - - LayerTreeQuadStackView.prototype = { - __proto__: HTMLDivElement.prototype, - - decorate: function() { - this.isRenderPassQuads_ = false; - this.pictureAsImageData_ = {}; // Maps picture.guid to PictureAsImageData. - this.messages_ = []; - this.controls_ = document.createElement('top-controls'); - this.infoBar_ = new ui.InfoBar(); - this.quadStackView_ = new ui.QuadStackView(); - this.quadStackView_.addEventListener( - 'selectionchange', this.onQuadStackViewSelectionChange_.bind(this)); - - var m = ui.MOUSE_SELECTOR_MODE; - var mms = this.quadStackView_.mouseModeSelector; - mms.settingsKey = 'cc.layerTreeQuadStackView.mouseModeSelector'; - mms.setKeyCodeForMode(m.SELECTION, 'Z'.charCodeAt(0)); - mms.setKeyCodeForMode(m.PANSCAN, 'X'.charCodeAt(0)); - mms.setKeyCodeForMode(m.ZOOM, 'C'.charCodeAt(0)); - mms.setKeyCodeForMode(m.ROTATE, 'V'.charCodeAt(0)); - - this.appendChild(this.controls_); - this.appendChild(this.infoBar_); - this.appendChild(this.quadStackView_); - - this.tileRectsSelector_ = ui.createSelector( - this, 'howToShowTiles', - 'layerView.howToShowTiles', 'none', - createTileRectsSelectorBaseOptions()); - this.controls_.appendChild(this.tileRectsSelector_); - - var tileHeatmapText = ui.createSpan({ - textContent: 'Tile heatmap:' - }); - this.controls_.appendChild(tileHeatmapText); - - var tileHeatmapSelector = ui.createSelector( - this, 'tileHeatmapType', - 'layerView.tileHeatmapType', TILE_HEATMAP_TYPE.NONE, - [{label: 'None', - value: TILE_HEATMAP_TYPE.NONE}, - {label: 'Scheduled Priority', - value: TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY}, - {label: 'Distance to Visible', - value: TILE_HEATMAP_TYPE.DISTANCE_TO_VISIBLE}, - {label: 'Time to Visible', - value: TILE_HEATMAP_TYPE.TIME_TO_VISIBLE}, - {label: 'Is using GPU memory', - value: TILE_HEATMAP_TYPE.USING_GPU_MEMORY} - ]); - this.controls_.appendChild(tileHeatmapSelector); - - var showOtherLayersCheckbox = ui.createCheckBox( - this, 'showOtherLayers', - 'layerView.showOtherLayers', true, - 'Other layers/passes'); - showOtherLayersCheckbox.title = - 'When checked, show all layers, selected or not.'; - this.controls_.appendChild(showOtherLayersCheckbox); - - var showInvalidationsCheckbox = ui.createCheckBox( - this, 'showInvalidations', - 'layerView.showInvalidations', true, - 'Invalidations'); - showInvalidationsCheckbox.title = - 'When checked, compositing invalidations are highlighted in red'; - this.controls_.appendChild(showInvalidationsCheckbox); - - var showUnrecordedRegionCheckbox = ui.createCheckBox( - this, 'showUnrecordedRegion', - 'layerView.showUnrecordedRegion', true, - 'Unrecorded area'); - showUnrecordedRegionCheckbox.title = - 'When checked, unrecorded areas are highlighted in yellow'; - this.controls_.appendChild(showUnrecordedRegionCheckbox); - - var showBottlenecksCheckbox = ui.createCheckBox( - this, 'showBottlenecks', - 'layerView.showBottlenecks', true, - 'Bottlenecks'); - showBottlenecksCheckbox.title = - 'When checked, scroll bottlenecks are highlighted'; - this.controls_.appendChild(showBottlenecksCheckbox); - - var showLayoutRectsCheckbox = ui.createCheckBox( - this, 'showLayoutRects', - 'layerView.showLayoutRects', false, - 'Layout rects'); - showLayoutRectsCheckbox.title = - 'When checked, shows rects for regions where layout happened'; - this.controls_.appendChild(showLayoutRectsCheckbox); - - var showContentsCheckbox = ui.createCheckBox( - this, 'showContents', - 'layerView.showContents', true, - 'Contents'); - showContentsCheckbox.title = - 'When checked, show the rendered contents inside the layer outlines'; - this.controls_.appendChild(showContentsCheckbox); - }, - - get layerTreeImpl() { - return this.layerTreeImpl_; - }, - - set whichTree(whichTree) { - this.whichTree_ = whichTree; - }, - - set isRenderPassQuads(newValue) { - this.isRenderPassQuads_ = newValue; - }, - - set layerTreeImpl(layerTreeImpl) { - // FIXME(pdr): We may want to clear pictureAsImageData_ here to save - // memory at the cost of performance. Note that - // pictureAsImageData_ will be cleared when this is - // destructed, but this view might live for several - // layerTreeImpls. - this.layerTreeImpl_ = layerTreeImpl; - this.selection = undefined; - }, - - get showOtherLayers() { - return this.showOtherLayers_; - }, - - set showOtherLayers(show) { - this.showOtherLayers_ = show; - this.updateContents_(); - }, - - get showContents() { - return this.showContents_; - }, - - set showContents(show) { - this.showContents_ = show; - this.updateContents_(); - }, - - get showInvalidations() { - return this.showInvalidations_; - }, - - set showInvalidations(show) { - this.showInvalidations_ = show; - this.updateContents_(); - }, - - get showUnrecordedRegion() { - return this.showUnrecordedRegion_; - }, - - set showUnrecordedRegion(show) { - this.showUnrecordedRegion_ = show; - this.updateContents_(); - }, - - get showBottlenecks() { - return this.showBottlenecks_; - }, - - set showBottlenecks(show) { - this.showBottlenecks_ = show; - this.updateContents_(); - }, - - get showLayoutRects() { - return this.showLayoutRects_; - }, - - set showLayoutRects(show) { - this.showLayoutRects_ = show; - this.updateContents_(); - }, - - get howToShowTiles() { - return this.howToShowTiles_; - }, - - set howToShowTiles(val) { - // Make sure val is something we expect. - console.assert( - (val === 'none') || - (val === 'coverage') || - !isNaN(parseFloat(val))); - - this.howToShowTiles_ = val; - this.updateContents_(); - }, - - get tileHeatmapType() { - return this.tileHeatmapType_; - }, - - set tileHeatmapType(val) { - this.tileHeatmapType_ = val; - this.updateContents_(); - }, - - get selection() { - return this.selection_; - }, - - set selection(selection) { - base.setPropertyAndDispatchChange(this, 'selection', selection); - this.updateContents_(); - }, - - regenerateContent: function() { - this.updateTilesSelector_(); - this.updateContents_(); - }, - - onQuadStackViewSelectionChange_: function(e) { - var selectableQuads = e.quads.filter(function(q) { - return q.selectionToSetIfClicked !== undefined; - }); - if (selectableQuads.length == 0) { - this.selection = undefined; - return; - } - - // Sort the quads low to high on stackingGroupId. - selectableQuads.sort(function(x, y) { - var z = x.stackingGroupId - y.stackingGroupId; - if (z != 0) - return z; - return x.selectionToSetIfClicked.specicifity - - y.selectionToSetIfClicked.specicifity; - }); - - // TODO(nduca): Support selecting N things at once. - var quadToSelect = selectableQuads[selectableQuads.length - 1]; - this.selection = quadToSelect.selectionToSetIfClicked; - }, - - scheduleUpdateContents_: function() { - if (this.updateContentsPending_) - return; - this.updateContentsPending_ = true; - base.requestAnimationFrameInThisFrameIfPossible( - this.updateContents_, this); - }, - - updateContents_: function() { - if (!this.layerTreeImpl_) - return; - - - var status = this.computePictureLoadingStatus_(); - if (!status.picturesComplete) - return; - - var lthi = this.layerTreeImpl_.layerTreeHostImpl; - var lthiInstance = lthi.objectInstance; - var worldViewportRect = base.Rect.fromXYWH( - 0, 0, - lthi.deviceViewportSize.width, lthi.deviceViewportSize.height); - this.quadStackView_.deviceRect = worldViewportRect; - if (this.isRenderPassQuads_) - this.quadStackView_.quads = this.generateRenderPassQuads(); - else - this.quadStackView_.quads = this.generateLayerQuads(); - - this.updateInfoBar_(status.messages); - }, - - updateTilesSelector_: function() { - var data = createTileRectsSelectorBaseOptions(); - - if (this.layerTreeImpl_) { - // First get all of the scales information from LTHI. - var lthi = this.layerTreeImpl_.layerTreeHostImpl; - var scaleNames = lthi.getContentsScaleNames(); - for (var scale in scaleNames) { - data.push({ - label: 'Scale ' + scale + ' (' + scaleNames[scale] + ')', - value: scale - }); - } - } - - // Then create a new selector and replace the old one. - var new_selector = ui.createSelector( - this, 'howToShowTiles', - 'layerView.howToShowTiles', 'none', - data); - this.controls_.replaceChild(new_selector, this.tileRectsSelector_); - this.tileRectsSelector_ = new_selector; - }, - - computePictureLoadingStatus_: function() { - // Figure out if we can draw the quads yet. While we're at it, figure out - // if we have any warnings we need to show. - var layers = this.layers; - var status = { - messages: [], - picturesComplete: true - }; - if (this.showContents) { - var hasPendingRasterizeImage = false; - var firstPictureError = undefined; - var hasMissingLayerRect = false; - var hasUnresolvedPictureRef = false; - for (var i = 0; i < layers.length; i++) { - var layer = layers[i]; - for (var ir = 0; ir < layer.pictures.length; ++ir) { - var picture = layer.pictures[ir]; - - if (picture.idRef) { - hasUnresolvedPictureRef = true; - continue; - } - if (!picture.layerRect) { - hasMissingLayerRect = true; - continue; - } - - var pictureAsImageData = this.pictureAsImageData_[picture.guid]; - if (!pictureAsImageData) { - hasPendingRasterizeImage = true; - this.pictureAsImageData_[picture.guid] = - cc.PictureAsImageData.Pending(this); - picture.rasterize( - {stopIndex: undefined}, - function(pictureImageData) { - var picture_ = pictureImageData.picture; - this.pictureAsImageData_[picture_.guid] = pictureImageData; - this.scheduleUpdateContents_(); - }.bind(this)); - continue; - } - if (pictureAsImageData.isPending()) { - hasPendingRasterizeImage = true; - continue; - } - if (pictureAsImageData.error) { - if (!firstPictureError) - firstPictureError = pictureAsImageData.error; - break; - } - } - } - if (hasPendingRasterizeImage) { - status.picturesComplete = false; - } else { - if (hasUnresolvedPictureRef) { - status.messages.push({ - header: 'Missing picture', - details: 'Your trace didnt have pictures for every layer. ' + - 'Old chrome versions had this problem'}); - } - if (hasMissingLayerRect) { - status.messages.push({ - header: 'Missing layer rect', - details: 'Your trace may be corrupt or from a very old ' + - 'Chrome revision.'}); - } - if (firstPictureError) { - status.messages.push({ - header: 'Cannot rasterize', - details: firstPictureError}); - } - } - } - return status; - }, - - get selectedRenderPass() { - if (this.selection) - return this.selection.renderPass_; - }, - - get selectedLayer() { - if (this.selection) { - var selectedLayerId = this.selection.associatedLayerId; - return this.layerTreeImpl_.findLayerWithId(selectedLayerId); - } - }, - - get renderPasses() { - var renderPasses = - this.layerTreeImpl.layerTreeHostImpl.args.frame.renderPasses; - if (!this.showOtherLayers) { - var selectedRenderPass = this.selectedRenderPass; - if (selectedRenderPass) - renderPasses = [selectedRenderPass]; - } - return renderPasses; - }, - - get layers() { - var layers = this.layerTreeImpl.renderSurfaceLayerList; - if (!this.showOtherLayers) { - var selectedLayer = this.selectedLayer; - if (selectedLayer) - layers = [selectedLayer]; - } - return layers; - }, - - appendImageQuads_: function(quads, layer, layerQuad) { - // Generate image quads for the layer - for (var ir = 0; ir < layer.pictures.length; ++ir) { - var picture = layer.pictures[ir]; - if (!picture.layerRect) - continue; - - var unitRect = picture.layerRect.asUVRectInside(layer.bounds); - var iq = layerQuad.projectUnitRect(unitRect); - - var pictureData = this.pictureAsImageData_[picture.guid]; - if (this.showContents && pictureData && pictureData.imageData) { - iq.imageData = pictureData.imageData; - iq.borderColor = 'rgba(0,0,0,0)'; - } else { - iq.imageData = undefined; - } - - iq.stackingGroupId = layerQuad.stackingGroupId; - quads.push(iq); - } - }, - - appendInvalidationQuads_: function(quads, layer, layerQuad) { - // Generate the invalidation rect quads. - for (var ir = 0; ir < layer.invalidation.rects.length; ir++) { - var rect = layer.invalidation.rects[ir]; - var unitRect = rect.asUVRectInside(layer.bounds); - var iq = layerQuad.projectUnitRect(unitRect); - iq.backgroundColor = 'rgba(255, 0, 0, 0.1)'; - iq.borderColor = 'rgba(255, 0, 0, 1)'; - iq.stackingGroupId = layerQuad.stackingGroupId; - iq.selectionToSetIfClicked = new cc.LayerRectSelection( - layer, 'Invalidation rect', rect, rect); - quads.push(iq); - } - }, - - appendUnrecordedRegionQuads_: function(quads, layer, layerQuad) { - // Generate the unrecorded region quads. - for (var ir = 0; ir < layer.unrecordedRegion.rects.length; ir++) { - var rect = layer.unrecordedRegion.rects[ir]; - var unitRect = rect.asUVRectInside(layer.bounds); - var iq = layerQuad.projectUnitRect(unitRect); - iq.backgroundColor = 'rgba(240, 230, 140, 0.3)'; - iq.borderColor = 'rgba(240, 230, 140, 1)'; - iq.stackingGroupId = layerQuad.stackingGroupId; - iq.selectionToSetIfClicked = new cc.LayerRectSelection( - layer, 'Unrecorded area', rect, rect); - quads.push(iq); - } - }, - - appendBottleneckQuads_: function(quads, layer, layerQuad, stackingGroupId) { - function processRegion(region, label, borderColor) { - var backgroundColor = borderColor.clone(); - backgroundColor.a = 0.4 * (borderColor.a || 1.0); - - for (var ir = 0; ir < region.rects.length; ir++) { - var rect = region.rects[ir]; - var unitRect = rect.asUVRectInside(layer.bounds); - var iq = layerQuad.projectUnitRect(unitRect); - iq.backgroundColor = backgroundColor.toString(); - iq.borderColor = borderColor.toString(); - iq.borderWidth = 4.0; - iq.stackingGroupId = stackingGroupId; - iq.selectionToSetIfClicked = new cc.LayerRectSelection( - layer, label, rect, rect); - quads.push(iq); - } - } - - processRegion(layer.touchEventHandlerRegion, 'Touch listener', - base.Color.fromString('rgb(228, 226, 27)')); - processRegion(layer.wheelEventHandlerRegion, 'Wheel listener', - base.Color.fromString('rgb(176, 205, 29)')); - processRegion(layer.nonFastScrollableRegion, 'Repaints on scroll', - base.Color.fromString('rgb(213, 134, 32)')); - }, - - appendTileCoverageRectQuads_: function( - quads, layer, layerQuad, heatmapType) { - if (!layer.tileCoverageRects) - return; - - var tiles = []; - for (var ct = 0; ct < layer.tileCoverageRects.length; ++ct) { - var tile = layer.tileCoverageRects[ct].tile; - if (tile !== undefined) - tiles.push(tile); - } - - var lthi = this.layerTreeImpl_.layerTreeHostImpl; - var minMax = - this.getMinMaxForHeatmap_(lthi.tiles, heatmapType); - var heatmapColors = - this.computeHeatmapColors_(tiles, minMax, heatmapType); - var heatIndex = 0; - - for (var ct = 0; ct < layer.tileCoverageRects.length; ++ct) { - var rect = layer.tileCoverageRects[ct].geometryRect; - rect = rect.scale(1.0 / layer.geometryContentsScale); - - var tile = layer.tileCoverageRects[ct].tile; - - var unitRect = rect.asUVRectInside(layer.bounds); - var quad = layerQuad.projectUnitRect(unitRect); - - quad.backgroundColor = 'rgba(0, 0, 0, 0)'; - quad.stackingGroupId = layerQuad.stackingGroupId; - var type = cc.tileTypes.missing; - if (tile) { - type = tile.getTypeForLayer(layer); - quad.backgroundColor = heatmapColors[heatIndex]; - ++heatIndex; - } - - quad.borderColor = cc.tileBorder[type].color; - quad.borderWidth = cc.tileBorder[type].width; - var label; - if (tile) - label = 'coverageRect'; - else - label = 'checkerboard coverageRect'; - quad.selectionToSetIfClicked = new cc.LayerRectSelection( - layer, label, rect, layer.tileCoverageRects[ct]); - - quads.push(quad); - } - }, - - appendLayoutRectQuads_: function(quads, layer, layerQuad) { - if (!layer.layoutRects) { - return; - } - - for (var ct = 0; ct < layer.layoutRects.length; ++ct) { - var rect = layer.layoutRects[ct].geometryRect; - rect = rect.scale(1.0 / layer.geometryContentsScale); - - var unitRect = rect.asUVRectInside(layer.bounds); - var quad = layerQuad.projectUnitRect(unitRect); - - quad.backgroundColor = 'rgba(0, 0, 0, 0)'; - quad.stackingGroupId = layerQuad.stackingGroupId; - - quad.borderColor = 'rgba(0, 0, 200, 0.7)'; - quad.borderWidth = 2; - var label; - label = 'Layout rect'; - quad.selectionToSetIfClicked = new cc.LayerRectSelection( - layer, label, rect); - - quads.push(quad); - } - }, - - getValueForHeatmap_: function(tile, heatmapType) { - if (heatmapType == TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY) { - return tile.scheduledPriority == 0 ? - undefined : - tile.scheduledPriority; - } else if (heatmapType == TILE_HEATMAP_TYPE.DISTANCE_TO_VISIBLE) { - return tile.distanceToVisible; - } else if (heatmapType == TILE_HEATMAP_TYPE.TIME_TO_VISIBLE) { - return Math.min(5, tile.timeToVisible); - } else if (heatmapType == TILE_HEATMAP_TYPE.USING_GPU_MEMORY) { - if (tile.isSolidColor) - return 0.5; - return tile.isUsingGpuMemory ? 0 : 1; - } - }, - - getMinMaxForHeatmap_: function(tiles, heatmapType) { - var range = new base.Range(); - if (heatmapType == TILE_HEATMAP_TYPE.USING_GPU_MEMORY) { - range.addValue(0); - range.addValue(1); - return range; - } - - for (var i = 0; i < tiles.length; ++i) { - var value = this.getValueForHeatmap_(tiles[i], heatmapType); - if (value == undefined) - continue; - range.addValue(value); - } - if (range.range == 0) - range.addValue(1); - return range; - }, - - computeHeatmapColors_: function(tiles, minMax, heatmapType) { - var min = minMax.min; - var max = minMax.max; - - var color = function(value) { - var hue = 120 * (1 - (value - min) / (max - min)); - if (hue < 0) - hue = 0; - return 'hsla(' + hue + ', 100%, 50%, 0.5)'; - }; - - var values = []; - for (var i = 0; i < tiles.length; ++i) { - var tile = tiles[i]; - var value = this.getValueForHeatmap_(tile, heatmapType); - if (value !== undefined) - values.push(color(value)); - else - values.push(undefined); - } - - return values; - }, - - appendTilesWithScaleQuads_: function( - quads, layer, layerQuad, scale, heatmapType) { - var lthi = this.layerTreeImpl_.layerTreeHostImpl; - - var tiles = []; - for (var i = 0; i < lthi.tiles.length; ++i) { - var tile = lthi.tiles[i]; - - if (Math.abs(tile.contentsScale - scale) > 1e-6) - continue; - - // TODO(vmpstr): Make the stiching of tiles and layers a part of - // tile construction (issue 346) - if (layer.layerId != tile.layerId) - continue; - - tiles.push(tile); - } - - var minMax = - this.getMinMaxForHeatmap_(lthi.tiles, heatmapType); - var heatmapColors = - this.computeHeatmapColors_(tiles, minMax, heatmapType); - - for (var i = 0; i < tiles.length; ++i) { - var tile = tiles[i]; - var rect = tile.layerRect; - if (!tile.layerRect) - continue; - var unitRect = rect.asUVRectInside(layer.bounds); - var quad = layerQuad.projectUnitRect(unitRect); - - quad.backgroundColor = 'rgba(0, 0, 0, 0)'; - quad.stackingGroupId = layerQuad.stackingGroupId; - - var type = tile.getTypeForLayer(layer); - quad.borderColor = cc.tileBorder[type].color; - quad.borderWidth = cc.tileBorder[type].width; - - quad.backgroundColor = heatmapColors[i]; - quad.selectionToSetIfClicked = new cc.TileSelection(tile); - quads.push(quad); - } - }, - - appendSelectionQuads_: function(quads, layer, layerQuad) { - var selection = this.selection; - var rect = selection.layerRect; - if (!rect) - return []; - - var unitRect = rect.asUVRectInside(layer.bounds); - var quad = layerQuad.projectUnitRect(unitRect); - - var colorId = tracing.getStringColorId(selection.title); - colorId += tracing.getColorPaletteHighlightIdBoost(); - - var color = base.Color.fromString(tracing.getColorPalette()[colorId]); - - var quadForDrawing = quad.clone(); - quadForDrawing.backgroundColor = color.withAlpha(0.5).toString(); - quadForDrawing.borderColor = color.withAlpha(1.0).darken().toString(); - quadForDrawing.stackingGroupId = layerQuad.stackingGroupId; - quads.push(quadForDrawing); - }, - - generateRenderPassQuads: function() { - if (!this.layerTreeImpl.layerTreeHostImpl.args.frame) - return []; - var renderPasses = this.renderPasses; - if (!renderPasses) - return []; - - var quads = []; - for (var i = 0; i < renderPasses.length; ++i) { - var quadList = renderPasses[i].quadList; - for (var j = 0; j < quadList.length; ++j) { - var drawQuad = quadList[j]; - var quad = drawQuad.rectAsTargetSpaceQuad.clone(); - quad.borderColor = 'rgb(170, 204, 238)'; - quad.borderWidth = 2; - quad.stackingGroupId = i; - quads.push(quad); - } - } - return quads; - }, - - generateLayerQuads: function() { - this.updateContentsPending_ = false; - - // Generate the quads for the view. - var layers = this.layers; - var quads = []; - var nextStackingGroupId = 0; - var alreadyVisitedLayerIds = {}; - - for (var i = 1; i <= layers.length; i++) { - // Generate quads back-to-front. - var layer = layers[layers.length - i]; - alreadyVisitedLayerIds[layer.layerId] = true; - if (layer.objectInstance.name == 'cc::NinePatchLayerImpl') - continue; - - var layerQuad = layer.layerQuad.clone(); - layerQuad.borderColor = 'rgba(0,0,0,0.75)'; - layerQuad.stackingGroupId = nextStackingGroupId++; - layerQuad.selectionToSetIfClicked = new cc.LayerSelection(layer); - layerQuad.layer = layer; - if (this.showOtherLayers && this.selectedLayer == layer) - layerQuad.upperBorderColor = 'rgb(156,189,45)'; - - this.appendImageQuads_(quads, layer, layerQuad); - quads.push(layerQuad); - - - if (this.showInvalidations) - this.appendInvalidationQuads_(quads, layer, layerQuad); - if (this.showUnrecordedRegion) - this.appendUnrecordedRegionQuads_(quads, layer, layerQuad); - if (this.showBottlenecks) - this.appendBottleneckQuads_(quads, layer, layerQuad, - layerQuad.stackingGroupId); - if (this.showLayoutRects) - this.appendLayoutRectQuads_(quads, layer, layerQuad); - - if (this.howToShowTiles === 'coverage') { - this.appendTileCoverageRectQuads_( - quads, layer, layerQuad, this.tileHeatmapType); - } else if (this.howToShowTiles !== 'none') { - this.appendTilesWithScaleQuads_( - quads, layer, layerQuad, - this.howToShowTiles, this.tileHeatmapType); - } - - if (this.selectedLayer === layer) - this.appendSelectionQuads_(quads, layer, layerQuad); - } - - this.layerTreeImpl.iterLayers(function(layer, depth, isMask, isReplica) { - if (!this.showOtherLayers && this.selectedLayer != layer) - return; - if (alreadyVisitedLayerIds[layer.layerId]) - return; - var layerQuad = layer.layerQuad; - var stackingGroupId = nextStackingGroupId++; - if (this.showBottlenecks) - this.appendBottleneckQuads_(quads, layer, layerQuad, stackingGroupId); - }, this); - - return quads; - }, - - updateInfoBar_: function(infoBarMessages) { - if (infoBarMessages.length) { - this.infoBar_.removeAllButtons(); - this.infoBar_.message = 'Some problems were encountered...'; - this.infoBar_.addButton('More info...', function(e) { - var overlay = new ui.Overlay(); - overlay.textContent = ''; - infoBarMessages.forEach(function(message) { - var title = document.createElement('h3'); - title.textContent = message.header; - - var details = document.createElement('div'); - details.textContent = message.details; - - overlay.appendChild(title); - overlay.appendChild(details); - }); - overlay.visible = true; - - e.stopPropagation(); - return false; - }); - this.infoBar_.visible = true; - } else { - this.infoBar_.removeAllButtons(); - this.infoBar_.message = ''; - this.infoBar_.visible = false; - } - } - }; - - return { - LayerTreeQuadStackView: LayerTreeQuadStackView - }; -}); |