mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 03:24:00 +02:00
Merge pull request #6846 from howard-stearns/static-edits
edit-test script
This commit is contained in:
commit
2d628001c9
1 changed files with 97 additions and 0 deletions
97
examples/tests/performance/staticEdits.js
Normal file
97
examples/tests/performance/staticEdits.js
Normal file
|
@ -0,0 +1,97 @@
|
|||
"use strict";
|
||||
/*jslint nomen: true, plusplus: true, vars: true*/
|
||||
var Entities, Script, print, Vec3, MyAvatar;
|
||||
//
|
||||
// Created by Howard Stearns
|
||||
// Copyright 2016 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
// Creates a rectangular matrix of objects overhed, and edits them at EDIT_FREQUENCY_TARGET.
|
||||
// Reports ms since last edit, ms to edit all the created entities, and average ms to edit one entity,
|
||||
// so that you can measure how many edits can be made.
|
||||
//
|
||||
var LIFETIME = 15;
|
||||
var EDIT_FREQUENCY_TARGET = 60; // hertz
|
||||
var ROWS_X = 10;
|
||||
var ROWS_Y = 1;
|
||||
var ROWS_Z = 10;
|
||||
var SEPARATION = 10.0;
|
||||
var SIZE = 1.0;
|
||||
// Note that when creating things quickly, the entity server will ignore data if we send updates too quickly.
|
||||
// like Internet MTU, these rates are set by th domain operator, so in this script there is a RATE_PER_SECOND
|
||||
// variable letting you set this speed. If entities are missing from the grid after a relog, this number
|
||||
// being too high may be the reason.
|
||||
var RATE_PER_SECOND = 600; // The entity server will drop data if we create things too fast.
|
||||
var SCRIPT_INTERVAL = 100;
|
||||
|
||||
var x = 0;
|
||||
var y = 0;
|
||||
var z = 0;
|
||||
var o = Vec3.sum(MyAvatar.position, {x: ROWS_X * SEPARATION / -2, y: SEPARATION, z: ROWS_Z * SEPARATION / -2});
|
||||
var totalCreated = 0;
|
||||
var startTime = new Date();
|
||||
var totalToCreate = ROWS_X * ROWS_Y * ROWS_Z;
|
||||
print("Creating " + totalToCreate + " entities starting at " + startTime);
|
||||
|
||||
var ids = [], colors = [], flasher, lastService = Date.now();
|
||||
function doFlash() { // One could call this in an interval timer, an update, or even a separate entity script.
|
||||
var i, oldColor, newColor;
|
||||
var start = Date.now();
|
||||
for (i = 0; i < ids.length; i++) {
|
||||
oldColor = colors[i];
|
||||
newColor = {red: oldColor.green, green: oldColor.blue, blue: oldColor.red};
|
||||
colors[i] = newColor;
|
||||
Entities.editEntity(ids[i], {color: newColor});
|
||||
}
|
||||
var elapsed = Date.now() - start, serviceTime = start - lastService;
|
||||
lastService = start;
|
||||
print(serviceTime, elapsed, elapsed / totalCreated); // ms since last flash, ms to edit all entities, average ms to edit one entity
|
||||
}
|
||||
function stopFlash() {
|
||||
Script.clearTimeout(flasher);
|
||||
Script.stop();
|
||||
}
|
||||
var creator = Script.setInterval(function () {
|
||||
if (!Entities.serversExist() || !Entities.canRez()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var numToCreate = Math.min(RATE_PER_SECOND * (SCRIPT_INTERVAL / 1000.0), totalToCreate - totalCreated);
|
||||
var i, properties;
|
||||
for (i = 0; i < numToCreate; i++) {
|
||||
properties = {
|
||||
position: { x: o.x + SIZE + (x * SEPARATION), y: o.y + SIZE + (y * SEPARATION), z: o.z + SIZE + (z * SEPARATION) },
|
||||
name: "gridTest",
|
||||
type: 'Box',
|
||||
dimensions: {x: SIZE, y: SIZE, z: SIZE},
|
||||
ignoreCollisions: true,
|
||||
collisionsWillMove: false,
|
||||
lifetime: LIFETIME,
|
||||
color: {red: x / ROWS_X * 255, green: y / ROWS_Y * 255, blue: z / ROWS_Z * 255}
|
||||
};
|
||||
colors.push(properties.color);
|
||||
ids.push(Entities.addEntity(properties));
|
||||
totalCreated++;
|
||||
|
||||
x++;
|
||||
if (x === ROWS_X) {
|
||||
x = 0;
|
||||
y++;
|
||||
if (y === ROWS_Y) {
|
||||
y = 0;
|
||||
z++;
|
||||
print("Created: " + totalCreated);
|
||||
}
|
||||
}
|
||||
if (z === ROWS_Z) {
|
||||
print("Total: " + totalCreated + " entities in " + ((new Date() - startTime) / 1000.0) + " seconds.");
|
||||
Script.clearTimeout(creator);
|
||||
flasher = Script.setInterval(doFlash, Math.ceil((1 / EDIT_FREQUENCY_TARGET) * 1000));
|
||||
Script.setTimeout(stopFlash, LIFETIME * 1000);
|
||||
}
|
||||
}
|
||||
}, SCRIPT_INTERVAL);
|
||||
Script.scriptEnding.connect(function () { Script.clearTimeout(flasher); });
|
||||
|
Loading…
Reference in a new issue