81030273ab894db0af894a8e4c764a99d9451573
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / src / cc / layer_tree_impl.js
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 'use strict';
6
7 tvcm.require('tracing.trace_model.object_instance');
8 tvcm.require('cc.layer_impl');
9
10 tvcm.exportTo('cc', function() {
11   var ObjectSnapshot = tracing.trace_model.ObjectSnapshot;
12
13   /**
14    * @constructor
15    */
16   function LayerTreeImplSnapshot() {
17     ObjectSnapshot.apply(this, arguments);
18   }
19
20   LayerTreeImplSnapshot.prototype = {
21     __proto__: ObjectSnapshot.prototype,
22
23     preInitialize: function() {
24       cc.preInitializeObject(this);
25       this.layerTreeHostImpl = undefined;
26       this.whichTree = undefined;
27     },
28
29     initialize: function() {
30       cc.moveRequiredFieldsFromArgsToToplevel(
31           this, ['rootLayer',
32             'renderSurfaceLayerList']);
33       this.rootLayer.layerTreeImpl = this;
34     },
35
36     iterLayers: function(func, thisArg) {
37       var visitedLayers = {};
38       function visitLayer(layer, depth, isMask, isReplica) {
39         if (visitedLayers[layer.layerId])
40           return;
41         visitedLayers[layer.layerId] = true;
42         func.call(thisArg, layer, depth, isMask, isReplica);
43         for (var i = 0; i < layer.children.length; i++)
44           visitLayer(layer.children[i], depth + 1);
45         if (layer.maskLayer)
46           visitLayer(layer.maskLayer, depth + 1, true, false);
47         if (layer.replicaLayer)
48           visitLayer(layer.replicaLayer, depth + 1, false, true);
49       }
50       visitLayer(this.rootLayer, 0, false, false);
51     },
52     findLayerWithId: function(id) {
53       var foundLayer = undefined;
54       function visitLayer(layer) {
55         if (layer.layerId == id)
56           foundLayer = layer;
57       }
58       this.iterLayers(visitLayer);
59       return foundLayer;
60     }
61   };
62
63   ObjectSnapshot.register('cc::LayerTreeImpl', LayerTreeImplSnapshot);
64
65   return {
66     LayerTreeImplSnapshot: LayerTreeImplSnapshot
67   };
68 });