Files
NativeScript/tests/app/profiling/profiling-tests.ts
2017-05-15 23:25:05 +03:00

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}`);
}