mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
127 lines
3.3 KiB
TypeScript
127 lines
3.3 KiB
TypeScript
import { assert, assertEqual, assertFalse, assertTrue, assertThrows } from "../TKUnit";
|
|
import * as prof from "tns-core-modules/profiling";
|
|
import { isAndroid } from "tns-core-modules/platform";
|
|
|
|
prof.enable();
|
|
class TestClass {
|
|
@prof.profile("__func_decorator__")
|
|
doNothing() {
|
|
//noop
|
|
}
|
|
|
|
@prof.profile("__func_decorator_error__")
|
|
throwError() {
|
|
throw new Error("This error is expected");
|
|
}
|
|
}
|
|
prof.disable();
|
|
|
|
export function setUp() {
|
|
prof.enable();
|
|
}
|
|
|
|
export function tearDown() {
|
|
prof.disable();
|
|
}
|
|
|
|
export function test_time_throws_if_not_enabled() {
|
|
prof.disable();
|
|
assertThrows(prof.time);
|
|
};
|
|
|
|
export function test_time_returns_number_if_enabled() {
|
|
assertEqual(typeof prof.time(), "number");
|
|
};
|
|
|
|
export function test_isRunning() {
|
|
const name = "test_isRunning";
|
|
assertFalse(prof.isRunning(name), "isRunning should be false before start");
|
|
|
|
prof.start(name);
|
|
assertTrue(prof.isRunning(name), "isRunning should be true after start");
|
|
|
|
prof.pause(name);
|
|
assertFalse(prof.isRunning(name), "isRunning should be false after pause");
|
|
|
|
prof.start(name);
|
|
assertTrue(prof.isRunning(name), "isRunning should be true after second start");
|
|
|
|
prof.stop(name);
|
|
assertFalse(prof.isRunning(name), "isRunning should be false after stop");
|
|
}
|
|
|
|
export function test_start_stop() {
|
|
const name = "test_start_stop";
|
|
|
|
prof.start(name);
|
|
const res = prof.stop(name);
|
|
|
|
assertEqual(res.count, 1);
|
|
assert(res.totalTime <= 1);
|
|
};
|
|
|
|
export function test_start_pause_count() {
|
|
const name = "test_start_pause_count";
|
|
|
|
for (var i = 0; i < 10; i++) {
|
|
prof.start(name);
|
|
prof.pause(name);
|
|
}
|
|
|
|
const res = prof.stop(name);
|
|
assertEqual(res.count, 10);
|
|
};
|
|
|
|
export function test_profile_decorator_count() {
|
|
const test = new TestClass();
|
|
for (var i = 0; i < 10; i++) {
|
|
test.doNothing();
|
|
}
|
|
|
|
const res = prof.stop("__func_decorator__");
|
|
assertEqual(res.count, 10);
|
|
}
|
|
|
|
export function test_profile_decorator_handles_exceptions() {
|
|
const test = new TestClass();
|
|
|
|
assertThrows(() => test.throwError());
|
|
assertFalse(prof.isRunning("__func_decorator_error__"), "Timer should be stopped on exception.");
|
|
assertEqual(prof.stop("__func_decorator_error__").count, 1, "Timer should be called once");
|
|
}
|
|
|
|
export function test_start_pause_performance() {
|
|
if (isAndroid) {
|
|
// TODO: skip these test for android as they are unstable
|
|
return;
|
|
}
|
|
|
|
const count = 10000;
|
|
const name = "test_start_pause_performance";
|
|
|
|
for (var i = 0; i < count; i++) {
|
|
prof.start(name);
|
|
prof.pause(name);
|
|
}
|
|
|
|
const res = prof.stop(name);
|
|
assertEqual(res.count, count);
|
|
assert(res.totalTime <= 50, `Total time for ${count} timer operations is too much: ${res.totalTime}`);
|
|
};
|
|
|
|
export function test_profile_decorator_performance() {
|
|
if (isAndroid) {
|
|
// TODO: skip these test for android as they are unstable
|
|
return;
|
|
}
|
|
|
|
const count = 10000;
|
|
const test = new TestClass();
|
|
for (var i = 0; i < count; i++) {
|
|
test.doNothing();
|
|
}
|
|
|
|
const res = prof.stop("__func_decorator__");
|
|
assertEqual(res.count, count);
|
|
assert(res.totalTime <= 50, `Total time for ${count} timer operations is too much: ${res.totalTime}`);
|
|
} |