| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- import defined from "../Core/defined.js";
- import Model3DTileContent from "./Model/Model3DTileContent.js";
-
- /**
- * @private
- */
- function Cesium3DTilesetStatistics() {
- // Rendering statistics
- this.selected = 0;
- this.visited = 0;
- // Loading statistics
- this.numberOfCommands = 0;
- this.numberOfAttemptedRequests = 0;
- this.numberOfPendingRequests = 0;
- this.numberOfTilesProcessing = 0;
- this.numberOfTilesWithContentReady = 0; // Number of tiles with content loaded, does not include empty tiles
- this.numberOfTilesTotal = 0; // Number of tiles in tileset JSON (and other tileset JSON files as they are loaded)
- this.numberOfLoadedTilesTotal = 0; // Running total of loaded tiles for the lifetime of the session
- // Features statistics
- this.numberOfFeaturesSelected = 0; // Number of features rendered
- this.numberOfFeaturesLoaded = 0; // Number of features in memory
- this.numberOfPointsSelected = 0;
- this.numberOfPointsLoaded = 0;
- this.numberOfTrianglesSelected = 0;
- // Styling statistics
- this.numberOfTilesStyled = 0;
- this.numberOfFeaturesStyled = 0;
- // Optimization statistics
- this.numberOfTilesCulledWithChildrenUnion = 0;
- // Memory statistics
- this.geometryByteLength = 0;
- this.texturesByteLength = 0;
- this.texturesReferenceCounterById = {};
- this.batchTableByteLength = 0; // batch textures and any binary metadata properties not otherwise accounted for
- }
-
- Cesium3DTilesetStatistics.prototype.clear = function () {
- this.selected = 0;
- this.visited = 0;
- this.numberOfCommands = 0;
- this.numberOfAttemptedRequests = 0;
- this.numberOfFeaturesSelected = 0;
- this.numberOfPointsSelected = 0;
- this.numberOfTrianglesSelected = 0;
- this.numberOfTilesStyled = 0;
- this.numberOfFeaturesStyled = 0;
- this.numberOfTilesCulledWithChildrenUnion = 0;
- };
-
- /**
- * Increment the counters for the points, triangles, and features
- * that are currently selected for rendering.
- *
- * This will be called recursively for the given content and
- * all its inner contents
- *
- * @param {Cesium3DTileContent} content
- */
- Cesium3DTilesetStatistics.prototype.incrementSelectionCounts = function (
- content,
- ) {
- this.numberOfFeaturesSelected += content.featuresLength;
- this.numberOfPointsSelected += content.pointsLength;
- this.numberOfTrianglesSelected += content.trianglesLength;
-
- // Recursive calls on all inner contents
- const contents = content.innerContents;
- if (defined(contents)) {
- const length = contents.length;
- for (let i = 0; i < length; ++i) {
- this.incrementSelectionCounts(contents[i]);
- }
- }
- };
-
- /**
- * Increment the counters for the number of features and points that
- * are currently loaded, and the lengths (size in bytes) of the
- * occupied memory.
- *
- * This will be called recursively for the given content and
- * all its inner contents
- *
- * @param {Cesium3DTileContent} content
- */
- Cesium3DTilesetStatistics.prototype.incrementLoadCounts = function (content) {
- this.numberOfFeaturesLoaded += content.featuresLength;
- this.numberOfPointsLoaded += content.pointsLength;
- this.geometryByteLength += content.geometryByteLength;
- this.batchTableByteLength += content.batchTableByteLength;
-
- // When the content is not a `Model3DTileContent`, then its
- // textures byte length is added directly
- if (!(content instanceof Model3DTileContent)) {
- this.texturesByteLength += content.texturesByteLength;
- } else {
- // When the content is a `Model3DTileContent`, then increment the
- // reference counter for all its textures. The byte length of any
- // newly tracked texture to the total textures byte length
- const textureIds = content.getTextureIds();
- for (const textureId of textureIds) {
- const referenceCounter =
- this.texturesReferenceCounterById[textureId] ?? 0;
- if (referenceCounter === 0) {
- const textureByteLength = content.getTextureByteLengthById(textureId);
- this.texturesByteLength += textureByteLength;
- }
- this.texturesReferenceCounterById[textureId] = referenceCounter + 1;
- }
- }
-
- // Recursive calls on all inner contents
- const contents = content.innerContents;
- if (defined(contents)) {
- const length = contents.length;
- for (let i = 0; i < length; ++i) {
- this.incrementLoadCounts(contents[i]);
- }
- }
- };
-
- /**
- * Decrement the counters for the number of features and points that
- * are currently loaded, and the lengths (size in bytes) of the
- * occupied memory.
- *
- * This will be called recursively for the given content and
- * all its inner contents
- *
- * @param {Cesium3DTileContent} content
- */
- Cesium3DTilesetStatistics.prototype.decrementLoadCounts = function (content) {
- this.numberOfFeaturesLoaded -= content.featuresLength;
- this.numberOfPointsLoaded -= content.pointsLength;
- this.geometryByteLength -= content.geometryByteLength;
- this.batchTableByteLength -= content.batchTableByteLength;
-
- // When the content is not a `Model3DTileContent`, then its
- // textures byte length is subtracted directly
- if (!(content instanceof Model3DTileContent)) {
- this.texturesByteLength -= content.texturesByteLength;
- } else {
- // When the content is a `Model3DTileContent`, then decrement the
- // reference counter for all its textures. The byte length of any
- // texture that is no longer references is subtracted from the
- // total textures byte length
- const textureIds = content.getTextureIds();
- for (const textureId of textureIds) {
- const referenceCounter = this.texturesReferenceCounterById[textureId];
- if (referenceCounter === 1) {
- delete this.texturesReferenceCounterById[textureId];
- const textureByteLength = content.getTextureByteLengthById(textureId);
- this.texturesByteLength -= textureByteLength;
- } else {
- this.texturesReferenceCounterById[textureId] = referenceCounter - 1;
- }
- }
- }
- // Recursive calls on all inner contents
- const contents = content.innerContents;
- if (defined(contents)) {
- const length = contents.length;
- for (let i = 0; i < length; ++i) {
- this.decrementLoadCounts(contents[i]);
- }
- }
- };
-
- Cesium3DTilesetStatistics.clone = function (statistics, result) {
- result.selected = statistics.selected;
- result.visited = statistics.visited;
- result.numberOfCommands = statistics.numberOfCommands;
- result.numberOfAttemptedRequests = statistics.numberOfAttemptedRequests;
- result.numberOfPendingRequests = statistics.numberOfPendingRequests;
- result.numberOfTilesProcessing = statistics.numberOfTilesProcessing;
- result.numberOfTilesWithContentReady =
- statistics.numberOfTilesWithContentReady;
- result.numberOfTilesTotal = statistics.numberOfTilesTotal;
- result.numberOfFeaturesSelected = statistics.numberOfFeaturesSelected;
- result.numberOfFeaturesLoaded = statistics.numberOfFeaturesLoaded;
- result.numberOfPointsSelected = statistics.numberOfPointsSelected;
- result.numberOfPointsLoaded = statistics.numberOfPointsLoaded;
- result.numberOfTrianglesSelected = statistics.numberOfTrianglesSelected;
- result.numberOfTilesStyled = statistics.numberOfTilesStyled;
- result.numberOfFeaturesStyled = statistics.numberOfFeaturesStyled;
- result.numberOfTilesCulledWithChildrenUnion =
- statistics.numberOfTilesCulledWithChildrenUnion;
- result.geometryByteLength = statistics.geometryByteLength;
- result.texturesByteLength = statistics.texturesByteLength;
- result.texturesReferenceCounterById = {
- ...statistics.texturesReferenceCounterById,
- };
- result.batchTableByteLength = statistics.batchTableByteLength;
- };
- export default Cesium3DTilesetStatistics;
|