void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false)
        {
            var reference = Guid.NewGuid().ToString();

            Performance.Start(reference);

            if (CompressedLayout.GetIsHeadless(view))
            {
                var packager = new VisualElementPackager(_renderer, view);
                if (_childPackagers == null)
                {
                    _childPackagers = new Dictionary <BindableObject, VisualElementPackager>();
                }
                view.IsPlatformEnabled = true;
                packager.Load();

                _childPackagers[view] = packager;
            }
            else
            {
                if (_childViews == null)
                {
                    _childViews = new List <IVisualElementRenderer>();
                }

                IVisualElementRenderer renderer = oldRenderer;
                if (pool != null)
                {
                    renderer = pool.GetFreeRenderer(view);
                }
                if (renderer == null)
                {
                    Performance.Start(reference, "New renderer");
                    renderer = Platform.CreateRenderer(view, _renderer.View.Context);
                    Performance.Stop(reference, "New renderer");
                }

                if (renderer == oldRenderer)
                {
                    Platform.SetRenderer(renderer.Element, null);
                    renderer.SetElement(view);
                }

                Performance.Start(reference, "Set renderer");
                Platform.SetRenderer(view, renderer);
                Performance.Stop(reference, "Set renderer");

                Performance.Start(reference, "Add view");
                if (!sameChildren)
                {
                    (_renderer.View as ViewGroup)?.AddView(renderer.View);
                    _childViews.Add(renderer);
                }
                Performance.Stop(reference, "Add view");

                Performance.Stop(reference);
            }
        }
Exemple #2
0
        void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false)
        {
            Performance.Start();

            if (CompressedLayout.GetIsHeadless(view))
            {
                var packager = new VisualElementPackager(_renderer, view);
                view.IsPlatformEnabled = true;
                packager.Load();
            }
            else
            {
                if (_childViews == null)
                {
                    _childViews = new List <IVisualElementRenderer>();
                }

                IVisualElementRenderer renderer = oldRenderer;
                if (pool != null)
                {
                    renderer = pool.GetFreeRenderer(view);
                }
                if (renderer == null)
                {
                    Performance.Start("New renderer");
                    renderer = Platform.CreateRenderer(view);
                    Performance.Stop("New renderer");
                }

                if (renderer == oldRenderer)
                {
                    Platform.SetRenderer(renderer.Element, null);
                    renderer.SetElement(view);
                }

                Performance.Start("Set renderer");
                Platform.SetRenderer(view, renderer);
                Performance.Stop("Set renderer");

                Performance.Start("Add view");
                if (!sameChildren)
                {
                    (_renderer.View as ViewGroup)?.AddView(renderer.View);
                    _childViews.Add(renderer);
                }
                Performance.Stop("Add view");
            }
            Performance.Stop();
        }
        void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false)
        {
            Performance.Start();

            if (_childViews == null)
            {
                _childViews = new List <IVisualElementRenderer>();
            }

            IVisualElementRenderer renderer = oldRenderer;

            if (pool != null)
            {
                renderer = pool.GetFreeRenderer(view);
            }
            if (renderer == null)
            {
                Performance.Start("New renderer");
                renderer = Platform.CreateRenderer(view);
                Performance.Stop("New renderer");
            }

            if (renderer == oldRenderer)
            {
                Platform.SetRenderer(renderer.Element, null);
                renderer.SetElement(view);
            }

            Performance.Start("Set renderer");
            Platform.SetRenderer(view, renderer);
            Performance.Stop("Set renderer");

            Performance.Start("Add view");
            if (!sameChildren)
            {
                _renderer.ViewGroup.AddView(renderer.ViewGroup);
                _childViews.Add(renderer);
            }
            Performance.Stop("Add view");

            Performance.Stop();
        }
		void AddChild(VisualElement view, IVisualElementRenderer oldRenderer = null, RendererPool pool = null, bool sameChildren = false)
		{
			Performance.Start();

			if (_childViews == null)
				_childViews = new List<IVisualElementRenderer>();

			IVisualElementRenderer renderer = oldRenderer;
			if (pool != null)
				renderer = pool.GetFreeRenderer(view);
			if (renderer == null)
			{
				Performance.Start("New renderer");
				renderer = Platform.CreateRenderer(view);
				Performance.Stop("New renderer");
			}

			if (renderer == oldRenderer)
			{
				Platform.SetRenderer(renderer.Element, null);
				renderer.SetElement(view);
			}

			Performance.Start("Set renderer");
			Platform.SetRenderer(view, renderer);
			Performance.Stop("Set renderer");

			Performance.Start("Add view");
			if (!sameChildren)
			{
				_renderer.ViewGroup.AddView(renderer.ViewGroup);
				_childViews.Add(renderer);
			}
			Performance.Stop("Add view");

			Performance.Stop();
		}