166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict';
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.trace_model.object_instance');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('cc.layer_impl');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('cc', function() {
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var ObjectSnapshot = tracing.trace_model.ObjectSnapshot;
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  /**
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis   * @constructor
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis   */
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  function LayerTreeImplSnapshot() {
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    ObjectSnapshot.apply(this, arguments);
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  LayerTreeImplSnapshot.prototype = {
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    __proto__: ObjectSnapshot.prototype,
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    preInitialize: function() {
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      cc.preInitializeObject(this);
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.layerTreeHostImpl = undefined;
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.whichTree = undefined;
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    initialize: function() {
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      cc.moveRequiredFieldsFromArgsToToplevel(
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis          this, ['rootLayer',
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis            'renderSurfaceLayerList']);
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.rootLayer.layerTreeImpl = this;
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    iterLayers: function(func) {
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      function visitLayer(layer, depth, isMask, isReplica) {
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        func(layer, depth, isMask, isReplica);
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        for (var i = 0; i < layer.children.length; i++)
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis          visitLayer(layer.children[i], depth + 1);
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        if (layer.maskLayer)
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis          visitLayer(layer, depth + 1, true, false);
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        if (layer.replicaLayer)
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis          visitLayer(layer, depth + 1, false, true);
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      }
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      visitLayer(this.rootLayer, 0, false, false);
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    findLayerWithId: function(id) {
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      var foundLayer = undefined;
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      function visitLayer(layer) {
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        if (layer.layerId == id)
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis          foundLayer = layer;
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      }
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.iterLayers(visitLayer);
5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      return foundLayer;
5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    }
5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  ObjectSnapshot.register('cc::LayerTreeImpl', LayerTreeImplSnapshot);
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  return {
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    LayerTreeImplSnapshot: LayerTreeImplSnapshot
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
65