diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index 34cb2a8d7..fb76ed2fa 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -131,6 +131,9 @@
+
+
+
@@ -618,6 +621,13 @@
+
+ Designer
+
+
+ Designer
+
+
diff --git a/apps/tests/pages/performance-test/start.ts b/apps/tests/pages/performance-test/start.ts
new file mode 100644
index 000000000..1dcbec2cb
--- /dev/null
+++ b/apps/tests/pages/performance-test/start.ts
@@ -0,0 +1,12 @@
+import frame = require("ui/frame");
+import observable = require("data/observable");
+
+declare function __startCPUProfiler(name: string);
+
+export function navigate(args: observable.EventData) {
+ var tag = "" + args.object.get("tag");
+ __startCPUProfiler("xml-performance-" + tag);
+ frame.topmost().navigate({
+ moduleName: tag,
+ });
+}
\ No newline at end of file
diff --git a/apps/tests/pages/performance-test/start.xml b/apps/tests/pages/performance-test/start.xml
new file mode 100644
index 000000000..c2facd58a
--- /dev/null
+++ b/apps/tests/pages/performance-test/start.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/pages/performance-test/test-big.ts b/apps/tests/pages/performance-test/test-big.ts
new file mode 100644
index 000000000..ebe3a152e
--- /dev/null
+++ b/apps/tests/pages/performance-test/test-big.ts
@@ -0,0 +1,7 @@
+import observable = require("data/observable");
+
+declare function __stopCPUProfiler(name: string);
+
+export function pageLoaded(args: observable.EventData) {
+ __stopCPUProfiler("xml-performance-test-big");
+}
diff --git a/apps/tests/pages/performance-test/test-big.xml b/apps/tests/pages/performance-test/test-big.xml
new file mode 100644
index 000000000..9f0b0baf3
--- /dev/null
+++ b/apps/tests/pages/performance-test/test-big.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/pages/performance-test/test-small.ts b/apps/tests/pages/performance-test/test-small.ts
new file mode 100644
index 000000000..5dcbb408e
--- /dev/null
+++ b/apps/tests/pages/performance-test/test-small.ts
@@ -0,0 +1,7 @@
+import observable = require("data/observable");
+
+declare function __stopCPUProfiler(name: string);
+
+export function pageLoaded(args: observable.EventData) {
+ __stopCPUProfiler("xml-performance-test-small");
+}
diff --git a/apps/tests/pages/performance-test/test-small.xml b/apps/tests/pages/performance-test/test-small.xml
new file mode 100644
index 000000000..7b58d0669
--- /dev/null
+++ b/apps/tests/pages/performance-test/test-small.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ui/core/dependency-observable.ts b/ui/core/dependency-observable.ts
index 71eac3778..22e50c72c 100644
--- a/ui/core/dependency-observable.ts
+++ b/ui/core/dependency-observable.ts
@@ -24,16 +24,16 @@ function validateRegisterParameters(name: string, ownerType: string) {
}
function getPropertyByNameAndType(name: string, owner: any): Property {
- var baseClasses = types.getBaseClasses(owner);
- var i;
var result;
var key;
- for (i = 0; i < baseClasses.length; i++) {
- key = generatePropertyKey(name, baseClasses[i]);
+ var classInfo = types.getClassInfo(owner);
+ while (classInfo) {
+ key = generatePropertyKey(name, classInfo.name);
result = propertyFromKey[key];
if (result) {
break;
}
+ classInfo = classInfo.baseClassInfo;
}
return result;
}
diff --git a/ui/styling/style.ts b/ui/styling/style.ts
index 13d6b4b9a..466d63b19 100644
--- a/ui/styling/style.ts
+++ b/ui/styling/style.ts
@@ -13,9 +13,11 @@ import imageSource = require("image-source");
import utils = require("utils/utils");
// key is the property id and value is Dictionary;
-var _registeredHandlers = {};
+var _registeredHandlers = Array