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
7base.require('tracing.trace_model.object_instance');
8base.require('cc.layer_impl');
9
10base.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) {
37      function visitLayer(layer, depth, isMask, isReplica) {
38        func(layer, depth, isMask, isReplica);
39        for (var i = 0; i < layer.children.length; i++)
40          visitLayer(layer.children[i], depth + 1);
41        if (layer.maskLayer)
42          visitLayer(layer, depth + 1, true, false);
43        if (layer.replicaLayer)
44          visitLayer(layer, depth + 1, false, true);
45      }
46      visitLayer(this.rootLayer, 0, false, false);
47    },
48    findLayerWithId: function(id) {
49      var foundLayer = undefined;
50      function visitLayer(layer) {
51        if (layer.layerId == id)
52          foundLayer = layer;
53      }
54      this.iterLayers(visitLayer);
55      return foundLayer;
56    }
57  };
58
59  ObjectSnapshot.register('cc::LayerTreeImpl', LayerTreeImplSnapshot);
60
61  return {
62    LayerTreeImplSnapshot: LayerTreeImplSnapshot
63  };
64});
65