1c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/*
2c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved.
3c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) *
4c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
5c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * modification, are permitted provided that the following conditions are
6c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * met:
7c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) *
8c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) *     * Redistributions of source code must retain the above copyright
9c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * notice, this list of conditions and the following disclaimer.
10c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) *     * Redistributions in binary form must reproduce the above
11c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
12c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * in the documentation and/or other materials provided with the
13c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * distribution.
14c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
15c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * contributors may be used to endorse or promote products derived from
16c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * this software without specific prior written permission.
17c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) *
18c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */
30c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
31c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/**
32c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * @constructor
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox}
34c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */
35d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebInspector.LayerDetailsView = function()
36c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){
37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.VBox.call(this);
38c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    this.element.classList.add("layer-details-view");
39c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    this._emptyView = new WebInspector.EmptyView(WebInspector.UIString("Select a layer to see its details"));
40c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    this._createTable();
41c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
42c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
43c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/**
4410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch * @enum {string}
4510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch */
4610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebInspector.LayerDetailsView.Events = {
4710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    ObjectSelected: "ObjectSelected"
4810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch}
4910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
5010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch/**
51a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @type {!Object.<string, string>}
52c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */
53c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.LayerDetailsView.CompositingReasonDetail = {
54c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "transform3D": WebInspector.UIString("Composition due to association with an element with a CSS 3D transform."),
55c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "video": WebInspector.UIString("Composition due to association with a <video> element."),
56c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "canvas": WebInspector.UIString("Composition due to the element being a <canvas> element."),
57c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "plugin": WebInspector.UIString("Composition due to association with a plugin."),
58c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "iFrame": WebInspector.UIString("Composition due to association with an <iframe> element."),
59c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "backfaceVisibilityHidden": WebInspector.UIString("Composition due to association with an element with a \"backface-visibility: hidden\" style."),
60c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "animation": WebInspector.UIString("Composition due to association with an animated element."),
61c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "filters": WebInspector.UIString("Composition due to association with an element with CSS filters applied."),
62c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "positionFixed": WebInspector.UIString("Composition due to association with an element with a \"position: fixed\" style."),
63c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "positionSticky": WebInspector.UIString("Composition due to association with an element with a \"position: sticky\" style."),
64c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "overflowScrollingTouch": WebInspector.UIString("Composition due to association with an element with a \"overflow-scrolling: touch\" style."),
65c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "blending": WebInspector.UIString("Composition due to association with an element that has blend mode other than \"normal\"."),
66c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "assumedOverlap": WebInspector.UIString("Composition due to association with an element that may overlap other composited elements."),
67c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "overlap": WebInspector.UIString("Composition due to association with an element overlapping other composited elements."),
68c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "negativeZIndexChildren": WebInspector.UIString("Composition due to association with an element with descendants that have a negative z-index."),
69c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "transformWithCompositedDescendants": WebInspector.UIString("Composition due to association with an element with composited descendants."),
70c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "opacityWithCompositedDescendants": WebInspector.UIString("Composition due to association with an element with opacity applied and composited descendants."),
71c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "maskWithCompositedDescendants": WebInspector.UIString("Composition due to association with a masked element and composited descendants."),
72c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "reflectionWithCompositedDescendants": WebInspector.UIString("Composition due to association with an element with a reflection and composited descendants."),
73c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "filterWithCompositedDescendants": WebInspector.UIString("Composition due to association with an element with CSS filters applied and composited descendants."),
74c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "blendingWithCompositedDescendants": WebInspector.UIString("Composition due to association with an element with CSS blending applied and composited descendants."),
75c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "clipsCompositingDescendants": WebInspector.UIString("Composition due to association with an element clipping compositing descendants."),
76c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "perspective": WebInspector.UIString("Composition due to association with an element with perspective applied."),
77c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "preserve3D": WebInspector.UIString("Composition due to association with an element with a \"transform-style: preserve-3d\" style."),
78c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "root": WebInspector.UIString("Root layer."),
79c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "layerForClip": WebInspector.UIString("Layer for clip."),
80c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "layerForScrollbar": WebInspector.UIString("Layer for scrollbar."),
81c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "layerForScrollingContainer": WebInspector.UIString("Layer for scrolling container."),
82c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "layerForForeground": WebInspector.UIString("Layer for foreground."),
83c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "layerForBackground": WebInspector.UIString("Layer for background."),
84c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "layerForMask": WebInspector.UIString("Layer for mask."),
85c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    "layerForVideoOverlay": WebInspector.UIString("Layer for video overlay.")
86c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)};
87c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
88c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.LayerDetailsView.prototype = {
89c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
90d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)     * @param {!WebInspector.Layers3DView.ActiveObject} activeObject
91c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
9210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    setObject: function(activeObject)
93c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
9410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        this._layer = activeObject ? activeObject.layer : null;
9510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        this._scrollRectIndex = activeObject ? activeObject.scrollRectIndex : null;
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (this.isShowing())
97d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            this.update();
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    wasShown: function()
10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        WebInspector.View.prototype.wasShown.call(this);
103d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        this.update();
10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
10610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    /**
10710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @param {number} index
10810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @param {?Event} event
10910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     */
11010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    _onScrollRectClicked: function(index, event)
11110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    {
11210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        if (event.which !== 1)
11310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch            return;
11410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        this.dispatchEventToListeners(WebInspector.LayerDetailsView.Events.ObjectSelected, {layer: this._layer, scrollRectIndex: index});
11510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    },
11610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
11710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    /**
11810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @param {!LayerTreeAgent.ScrollRect} scrollRect
11910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @param {number} index
12010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     */
12110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    _createScrollRectElement: function(scrollRect, index)
12210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    {
12310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        if (index)
12410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch            this._scrollRectsCell.createTextChild(", ");
12510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        var element = this._scrollRectsCell.createChild("span");
12610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        element.className = index === this._scrollRectIndex ? "scroll-rect active" : "scroll-rect";
12710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        element.textContent = WebInspector.LayerTreeModel.ScrollRectType[scrollRect.type].description + " (" + scrollRect.rect.x + ", " + scrollRect.rect.y +
12810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch            ", " + scrollRect.rect.width + ", " + scrollRect.rect.height + ")";
12910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        element.addEventListener("click", this._onScrollRectClicked.bind(this, index), false);
13010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    },
13110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
132d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    update: function()
13309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
13409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (!this._layer) {
135c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            this._tableElement.remove();
136c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            this._emptyView.show(this.element);
137c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            return;
138c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        }
139c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._emptyView.detach();
140c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this.element.appendChild(this._tableElement);
14109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._positionCell.textContent = WebInspector.UIString("%d,%d", this._layer.offsetX(), this._layer.offsetY());
14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._sizeCell.textContent = WebInspector.UIString("%d × %d", this._layer.width(), this._layer.height());
14309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._paintCountCell.textContent = this._layer.paintCount();
144c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        const bytesPerPixel = 4;
14509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._memoryEstimateCell.textContent = Number.bytesToString(this._layer.invisible() ? 0 : this._layer.width() * this._layer.height() * bytesPerPixel);
14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._layer.requestCompositingReasons(this._updateCompositingReasons.bind(this));
14710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        this._scrollRectsCell.removeChildren();
14810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        this._layer.scrollRects().forEach(this._createScrollRectElement.bind(this));
149c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
150c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
151c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    _createTable: function()
152c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
153c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._tableElement = this.element.createChild("table");
154c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._tbodyElement = this._tableElement.createChild("tbody");
155c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._positionCell = this._createRow(WebInspector.UIString("Position in parent:"));
156c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._sizeCell = this._createRow(WebInspector.UIString("Size:"));
157c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._compositingReasonsCell = this._createRow(WebInspector.UIString("Compositing Reasons:"));
158c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._memoryEstimateCell = this._createRow(WebInspector.UIString("Memory estimate:"));
159c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._paintCountCell = this._createRow(WebInspector.UIString("Paint count:"));
16010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        this._scrollRectsCell = this._createRow(WebInspector.UIString("Slow scroll regions:"));
161c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
162c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
163c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
164c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     * @param {string} title
165c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
166c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    _createRow: function(title)
167c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
168c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        var tr = this._tbodyElement.createChild("tr");
169c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        var titleCell = tr.createChild("td");
170c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        titleCell.textContent = title;
171c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        return tr.createChild("td");
172c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
173c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
174c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
175a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<string>} compositingReasons
176c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
177c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    _updateCompositingReasons: function(compositingReasons)
178c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
179c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        if (!compositingReasons || !compositingReasons.length) {
180c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            this._compositingReasonsCell.textContent = "n/a";
181c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            return;
182c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        }
183c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        var fragment = document.createDocumentFragment();
184c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        for (var i = 0; i < compositingReasons.length; ++i) {
185c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            if (i)
186c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)                fragment.appendChild(document.createTextNode(","));
187c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            var span = document.createElement("span");
188c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            span.title = WebInspector.LayerDetailsView.CompositingReasonDetail[compositingReasons[i]] || "";
189c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            span.textContent = compositingReasons[i];
190c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            fragment.appendChild(span);
191c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        }
192c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._compositingReasonsCell.removeChildren();
193c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._compositingReasonsCell.appendChild(fragment);
194c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
195c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.VBox.prototype
197c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
198