示例#1
0
        public async Task Stress_Vm_FromStrategy(int childrenCount, int rank, IJavascriptObjectBuilderStrategyFactory strategyFactory)
        {
            var root = new SimpleFatherTestViewModel();
            var test = new TestInContextAsync()
            {
                Bind = (win) => HtmlBinding.Bind(win, root, JavascriptBindingMode.TwoWay, strategyFactory),
                Test = async(mb) =>
                {
                    var bigVm = SimpleReadOnlyTestViewModel.BuildBigVm(childrenCount, rank);
                    var js    = mb.JsRootObject;

                    var stopWatch = new Stopwatch();
                    stopWatch.Start();

                    await DoSafeAsyncUI(() => root.Other = bigVm);

                    await Task.Delay(DelayForTimeOut);

                    var other = await _WebView.EvaluateAsync(() => GetAttribute(js, "Other"));

                    stopWatch.Stop();
                    var ts = stopWatch.ElapsedMilliseconds - DelayForTimeOut;
                    _Logger.Info($"Perf: {((double)(ts)) / 1000} sec");

                    other.IsObject.Should().BeTrue();
                }
            };

            await RunAsync(test);
        }
示例#2
0
        public async Task Stress_Big_Vm(int childrenCount)
        {
            var root = new SimpleFatherTestViewModel();
            var test = new TestInContextAsync()
            {
                Bind = (win) => HtmlBinding.Bind(win, root, JavascriptBindingMode.TwoWay),
                Test = async mb => await StressVm(root, mb, SimpleReadOnlyTestViewModel.BuildBigVm(childrenCount))
            };

            await RunAsync(test);
        }
示例#3
0
        public void Map_performance_test()
        {
            var converter = GetCSharpToJavascriptConverterForPerformance();
            var vm        = SimpleReadOnlyTestViewModel.BuildBigVm();

            using (GetPerformanceCounter("ToJson large Vm"))
            {
                var res = JsonConvert.SerializeObject(vm);
            }

            using (GetPerformanceCounter("Map large Vm"))
            {
                var res = converter.Map(vm);
            }
        }
示例#4
0
        private async Task StressVm(SimpleFatherTestViewModel root, IHtmlBinding mb, SimpleReadOnlyTestViewModel bigVm)
        {
            var js = mb.JsRootObject;
            IJavascriptObject other;

            using (var perf = GetPerformanceCounter("Perf to bind Vm"))
            {
                await DoSafeAsyncUI(() => root.Other = bigVm);

                await WaitAnotherUiCycleAsync();

                await Task.Delay(DelayForTimeOut);

                perf.DiscountTime = DelayForTimeOut;

                other = await _WebView.EvaluateAsync(() => GetAttribute(js, "Other"));
            }

            other.IsObject.Should().BeTrue();
            var rootJs = mb.JsBrideRootObject;
            ISet <IJsCsGlue> allChildren = new HashSet <IJsCsGlue>();

            using (GetPerformanceCounter("Perf to VisitAllChildren"))
            {
                await DoSafeAsyncUI(() => rootJs.VisitDescendantsSafe(glue => true));
            }

            using (GetPerformanceCounter("Perf to VisitAllChildren Collect"))
            {
                await DoSafeAsyncUI(() => rootJs.VisitDescendantsSafe(glue => allChildren.Add(glue)));
            }

            _TestOutputHelper.WriteLine($"Objects created {allChildren.Count}");

            using (GetPerformanceCounter("Perf Foreach GetAllChildren"))
            {
                await DoSafeAsyncUI(() => allChildren.ForEach(_ => { }));
            }

            List <object> basics = null;

            using (GetPerformanceCounter("Perf Collecting basics"))
            {
                basics = allChildren.Where(g => g.Type == JsCsGlueType.Basic && g.CValue != null).Select(g => g.CValue).ToList();
            }

            string string1, string2, string3, string4;

            using (GetPerformanceCounter("Creating string"))
            {
                string1 = $"[{string.Join(",", basics.Select(JavascriptNamer.GetCreateExpression))}]";
            }

            using (GetPerformanceCounter("Creating string parralel"))
            {
                var builder = new StringBuilder("[");
                var first   = true;
                Parallel.ForEach(basics, () => new Builder(), (basic, _, sb) =>
                {
                    if (!sb.First)
                    {
                        sb.String.Append(",");
                    }
                    sb.String.Append(basic);
                    sb.First = false;
                    return(sb);
                },
                                 (sb) =>
                {
                    lock (builder)
                    {
                        if (!first)
                        {
                            builder.Append(",");
                        }
                        first = false;
                        builder.Append(sb.String);
                    }
                });
                builder.Append("]");

                string2 = builder.ToString();
            }

            var array = basics.ToArray();

            using (GetPerformanceCounter("Creating JSON string"))
            {
                string3 = JsonConvert.SerializeObject(array);
            }

            using (GetPerformanceCounter("Creating JSON string bigVm"))
            {
                string4 = JsonConvert.SerializeObject(bigVm);
            }
        }