blob: e046e1763ef458d7e3ea98ca71f69975a4c8066d [file] [log] [blame]
// 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 Provides the LayerTreeHostImpl model-level objects.
*/
base.require('base.bbox2');
base.require('tracing.trace_model.object_instance');
base.require('cc.constants');
base.require('cc.layer_tree_impl');
base.require('cc.util');
base.exportTo('cc', function() {
var constants = cc.constants;
var ObjectSnapshot = tracing.trace_model.ObjectSnapshot;
var ObjectInstance = tracing.trace_model.ObjectInstance;
/**
* @constructor
*/
function LayerTreeHostImplSnapshot() {
ObjectSnapshot.apply(this, arguments);
}
LayerTreeHostImplSnapshot.prototype = {
__proto__: ObjectSnapshot.prototype,
preInitialize: function() {
cc.preInitializeObject(this);
},
initialize: function() {
cc.moveRequiredFieldsFromArgsToToplevel(
this, ['deviceViewportSize',
'activeTree']);
cc.moveOptionalFieldsFromArgsToToplevel(
this, ['pendingTree',
'tiles']);
this.activeTree.layerTreeHostImpl = this;
this.activeTree.whichTree = constants.ACTIVE_TREE;
if (this.pendingTree) {
this.pendingTree.layerTreeHostImpl = this;
this.pendingTree.whichTree = constants.PENDING_TREE;
}
},
getTree: function(whichTree) {
if (whichTree == constants.ACTIVE_TREE)
return this.activeTree;
if (whichTree == constants.PENDING_TREE)
return this.pendingTree;
throw new Exception('Unknown tree type + ' + whichTree);
}
};
ObjectSnapshot.register('cc::LayerTreeHostImpl', LayerTreeHostImplSnapshot);
/**
* @constructor
*/
function LayerTreeHostImplInstance() {
ObjectInstance.apply(this, arguments);
this.allLayersBBox_ = undefined;
}
LayerTreeHostImplInstance.prototype = {
__proto__: ObjectInstance.prototype,
get allContentsScales() {
if (this.allContentsScales_)
return this.allContentsScales_;
var scales = {};
for (var tileID in this.allTileHistories_) {
var tileHistory = this.allTileHistories_[tileID];
scales[tileHistory.contentsScale] = true;
}
this.allContentsScales_ = base.dictionaryKeys(scales);
return this.allContentsScales_;
},
get allLayersBBox() {
if (this.allLayersBBox_)
return this.allLayersBBox_;
var bbox = new base.BBox2();
function handleTree(tree) {
tree.renderSurfaceLayerList.forEach(function(layer) {
bbox.addQuad(layer.layerQuad);
});
}
this.snapshots.forEach(function(lthi) {
handleTree(lthi.activeTree);
if (lthi.pendingTree)
handleTree(lthi.pendingTree);
});
this.allLayersBBox_ = bbox;
return this.allLayersBBox_;
}
};
ObjectInstance.register('cc::LayerTreeHostImpl', LayerTreeHostImplInstance);
return {
LayerTreeHostImplSnapshot: LayerTreeHostImplSnapshot,
LayerTreeHostImplInstance: LayerTreeHostImplInstance
};
});