Skip to content

Commit 3d2e7d4

Browse files
slimbuckDonovan Hutchence
andauthored
Engine mini stats (playcanvas#2049)
* added mini stats * worked on it some more * created separate playcanvas-extras module for distribution * updated examples to use mini stats Co-authored-by: Donovan Hutchence <dhutchence@snapchat.com>
1 parent 52263c6 commit 3d2e7d4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+978
-48
lines changed

build/build.js

Lines changed: 71 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ try {
3636
process.exit(1);
3737
}
3838

39-
var DEFAULT_OUTPUT = "output/playcanvas.js";
4039
var DEFAULT_TEMP = "_tmp";
41-
var DEFAULT_SOURCE = "../src";
4240
var SRC_DIR = "../";
4341

4442
var COMPILER_LEVEL = [
@@ -47,38 +45,56 @@ var COMPILER_LEVEL = [
4745
'ADVANCED'
4846
];
4947

48+
// configs for the builds we support
49+
var targets = {
50+
engine: {
51+
defaultOutputPath: "output/playcanvas.js",
52+
defaultSourcePath: "../src",
53+
depsFile: './dependencies.txt',
54+
desc: "Playcanvas Engine"
55+
},
56+
extras: { // or ministats
57+
defaultOutputPath: "output/playcanvas-extras.js",
58+
defaultSourcePath: "../extras",
59+
depsFile: './extras_dependencies.txt',
60+
desc: "Playcanvas Extras"
61+
}
62+
};
63+
5064
var debug = false;
5165
var profiler = false;
5266
var sourceMap = false;
53-
var outputPath = DEFAULT_OUTPUT;
54-
var sourcePath = DEFAULT_SOURCE;
67+
var outputPath;
68+
var sourcePath;
5569
var tempPath = DEFAULT_TEMP;
5670
var compilerLevel = COMPILER_LEVEL[0];
57-
var formattingLevel = undefined;
71+
72+
// by default build the engine
73+
var target = targets.engine;
5874

5975
// LIB FUNCTIONS
6076
if (!String.prototype.endsWith) {
61-
String.prototype.endsWith = function(searchString, position) {
62-
var subjectString = this.toString();
63-
if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
64-
position = subjectString.length;
65-
}
66-
position -= searchString.length;
67-
var lastIndex = subjectString.indexOf(searchString, position);
68-
return lastIndex !== -1 && lastIndex === position;
69-
};
77+
String.prototype.endsWith = function (searchString, position) {
78+
var subjectString = this.toString();
79+
if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
80+
position = subjectString.length;
81+
}
82+
position -= searchString.length;
83+
var lastIndex = subjectString.indexOf(searchString, position);
84+
return lastIndex !== -1 && lastIndex === position;
85+
};
7086
}
7187

7288
function directoryExists(path) {
73-
try {
74-
return fs.statSync(path).isDirectory();
75-
}
76-
catch (err) {
77-
return false;
78-
}
89+
try {
90+
return fs.statSync(path).isDirectory();
91+
}
92+
catch (err) {
93+
return false;
94+
}
7995
}
8096

81-
var replaceAll = function(target, search, replacement) {
97+
var replaceAll = function (target, search, replacement) {
8298
return target.replace(new RegExp(search, 'g'), replacement);
8399
};
84100
// END LIB FUNCTIONS
@@ -168,7 +184,8 @@ var preprocess = function (dependencies) {
168184
else
169185
src = pp.process({
170186
PROFILER: profiler || debug,
171-
DEBUG: debug
187+
DEBUG: debug,
188+
RELEASE: compilerLevel != COMPILER_LEVEL[0]
172189
});
173190
var dir = path.dirname(_out);
174191
fse.ensureDirSync(dir);
@@ -192,7 +209,7 @@ var getCopyrightNotice = function (ver, rev) {
192209
}
193210
return [
194211
"/*",
195-
" * PlayCanvas Engine v" + ver + " revision " + rev + buildOptions,
212+
" * " + target.desc + " v" + ver + " revision " + rev + buildOptions,
196213
" * Copyright 2011-" + new Date().getFullYear() + " PlayCanvas Ltd. All rights reserved.",
197214
" */",
198215
""
@@ -241,34 +258,34 @@ var run = function () {
241258

242259
// build shader file
243260
concatentateShaders(function (err) {
244-
loadDependencies("./dependencies.txt", function (lines) {
261+
loadDependencies(target.depsFile, function (lines) {
245262
// preprocess and get new dependency list
246263
var files = preprocess(lines);
247264

248265
// set compiler options
249266
var options = {
250-
js: files,
251-
compilation_level: compilerLevel,
252-
language_in: "ECMASCRIPT5",
253-
js_output_file: outputPath,
254-
output_wrapper_file: "./umd-wrapper.js",
255-
manage_closure_dependencies: true,
256-
jscomp_off: [
257-
"nonStandardJsDocs", // docs warnings
258-
"checkTypes", // array types and other missing types
259-
"misplacedTypeAnnotation", // temp: hide docs using @type on defineProperty
260-
"globalThis", // temp: remove this again
261-
"suspiciousCode" // temp: remove this again
262-
],
263-
externs: "externs.js",
264-
warning_level: "VERBOSE"
267+
js: files,
268+
compilation_level: compilerLevel,
269+
language_in: "ECMASCRIPT5",
270+
js_output_file: outputPath,
271+
output_wrapper_file: "./umd-wrapper.js",
272+
manage_closure_dependencies: true,
273+
jscomp_off: [
274+
"nonStandardJsDocs", // docs warnings
275+
"checkTypes", // array types and other missing types
276+
"misplacedTypeAnnotation", // temp: hide docs using @type on defineProperty
277+
"globalThis", // temp: remove this again
278+
"suspiciousCode" // temp: remove this again
279+
],
280+
externs: "externs.js",
281+
warning_level: "VERBOSE"
265282
};
266283

267284
if (compilerLevel === "WHITESPACE_ONLY") {
268285
options.formatting = "pretty_print";
269286
}
270287

271-
if(sourceMap) {
288+
if (sourceMap) {
272289
var outputfilename = path.basename(outputPath);
273290

274291
var wrapperContent = fs.readFileSync("./umd-wrapper.js");
@@ -289,7 +306,7 @@ var run = function () {
289306
var closureCompiler = new ClosureCompiler(options);
290307

291308
// compile
292-
var compilerProcess = closureCompiler.run(function(exitCode, stdOut, stdErr) {
309+
var compilerProcess = closureCompiler.run(function (exitCode, stdOut, stdErr) {
293310

294311
if (exitCode) {
295312
console.error(stdErr);
@@ -338,6 +355,7 @@ var arguments = function () {
338355
console.log("-d: build debug engine configuration");
339356
console.log("-p: build profiler engine configuration");
340357
console.log("-m SOURCE_PATH: build engine and generate source map next to output file. [../src]");
358+
console.log("-t target to build, either engine or extas. default is engine");
341359
process.exit();
342360
}
343361

@@ -369,8 +387,20 @@ var arguments = function () {
369387
if (_last === '-m' && !arg.startsWith('-')) {
370388
sourcePath = arg;
371389
}
390+
391+
if (_last === '-t') {
392+
if (!targets.hasOwnProperty(arg)) {
393+
console.error("Invalid target should be: engine or extras");
394+
process.exit(1);
395+
}
396+
target = targets[arg];
397+
}
398+
372399
_last = arg;
373400
});
401+
402+
outputPath = outputPath || target.defaultOutputPath;
403+
sourcePath = sourcePath || target.defaultSourcePath;
374404
};
375405

376406
// only run from build directory

build/externs.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@ var WebAssembly = {};
1616
var XRWebGLLayer = {};
1717
var XRRay = {};
1818
var DOMPoint = {};
19+
20+
// extras requires this
21+
var pc = {};

build/extras_dependencies.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
../extras/mini-stats/cpu-timer.js
2+
../extras/mini-stats/gpu-timer.js
3+
../extras/mini-stats/mini-stats.js

examples/animation/blend.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -33,6 +34,8 @@
3334
app.resizeCanvas(canvas.width, canvas.height);
3435
});
3536

37+
var miniStats = new pc.MiniStats(app);
38+
3639
var entity;
3740

3841
// Create an Entity with a camera component

examples/camera/first-person.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<script src="../wasm-loader.js"></script>
1011
<style>
1112
body {
@@ -45,6 +46,8 @@
4546
app.resizeCanvas(canvas.width, canvas.height);
4647
});
4748

49+
var miniStats = new pc.MiniStats(app);
50+
4851
// A list of assets that need to be loaded
4952
var assetManifest = [
5053
{

examples/camera/fly.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -39,6 +40,8 @@
3940

4041
app.scene.ambientLight = new pc.Color(0.2, 0.2, 0.2);
4142

43+
var miniStats = new pc.MiniStats(app);
44+
4245
app.start();
4346

4447
// *********** Helper functions *******************

examples/camera/orbit.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -36,6 +37,8 @@
3637
app.resizeCanvas(canvas.width, canvas.height);
3738
});
3839

40+
var miniStats = new pc.MiniStats(app);
41+
3942
// A list of assets that need to be loaded
4043
var assetManifest = [
4144
{

examples/graphics/batching-dynamic.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -34,6 +35,8 @@
3435
app.resizeCanvas(canvas.width, canvas.height);
3536
});
3637

38+
var miniStats = new pc.MiniStats(app);
39+
3740
// create two material
3841
var material1 = new pc.StandardMaterial();
3942
material1.diffuse = new pc.Color(1, 1, 0);

examples/graphics/hardware-instancing.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -34,6 +35,8 @@
3435
app.resizeCanvas(canvas.width, canvas.height);
3536
});
3637

38+
var miniStats = new pc.MiniStats(app);
39+
3740
app.scene.ambientLight = new pc.Color(0.1, 0.1, 0.1);
3841

3942
// Create an Entity with a point light component, which is casting shadows (using rendering to cubemap)

examples/graphics/layers.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -34,6 +35,8 @@
3435
app.resizeCanvas(canvas.width, canvas.height);
3536
});
3637

38+
var miniStats = new pc.MiniStats(app);
39+
3740
app.scene.ambientLight = new pc.Color(0.2, 0.2, 0.2);
3841

3942
var entity, light, camera;

examples/graphics/lights-baked.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -34,6 +35,8 @@
3435
app.resizeCanvas(canvas.width, canvas.height);
3536
});
3637

38+
var miniStats = new pc.MiniStats(app);
39+
3740
// All model component primitive shape types
3841
var shapes = [ "box", "plane", "cone", "cylinder", "sphere", "capsule" ];
3942
var x = -1, z = -1;

examples/graphics/lights.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<style>
1011
body {
1112
margin: 0;
@@ -18,7 +19,6 @@
1819
<!-- The canvas element -->
1920
<canvas id="application-canvas"></canvas>
2021

21-
2222
<script>
2323
function createMaterial(colors) {
2424
var material = new pc.StandardMaterial();
@@ -30,7 +30,6 @@
3030
}
3131
</script>
3232

33-
3433
<!-- The script -->
3534
<script>
3635
var canvas = document.getElementById("application-canvas");
@@ -47,6 +46,8 @@
4746
app.resizeCanvas(canvas.width, canvas.height);
4847
});
4948

49+
var miniStats = new pc.MiniStats(app);
50+
5051
app.scene.ambientLight = new pc.Color(0.4, 0.4, 0.4);
5152

5253
var entity, light, camera;

examples/graphics/loader-obj.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<link rel="icon" type="image/png" href="../playcanvas-favicon.png" />
88
<script src="../../build/output/playcanvas.js"></script>
9+
<script src="../../build/output/playcanvas-extras.js"></script>
910
<!-- obj parser is not included in default engine, load the extra file -->
1011
<script src="../assets/scripts/loaders/obj-model.js"></script>
1112
<style>
@@ -35,6 +36,8 @@
3536
app.resizeCanvas(canvas.width, canvas.height);
3637
});
3738

39+
var miniStats = new pc.MiniStats(app);
40+
3841
app.scene.ambientLight = new pc.Color(0.2, 0.2, 0.2);
3942

4043
// OBJ Parser is not enabled by default in engine. Add the parser to the model resource handler

0 commit comments

Comments
 (0)