Profiler v11; No man init (#6087)
authorkingces95 <kingces95@users.noreply.github.com>
Tue, 7 May 2019 20:12:00 +0000 (10:12 -1000)
committerGitHub <noreply@github.com>
Tue, 7 May 2019 20:12:00 +0000 (10:12 -1000)
.Xamarin.Forms.Android.nuget.sln
.create-nuget.bat
.create-stubs.bat [new file with mode: 0644]
Xamarin.Forms.Core/Profiler.cs [new file with mode: 0644]
Xamarin.Forms.Core/Registrar.cs
Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs
Xamarin.Forms.Platform.Android/Forms.cs
Xamarin.Forms.Platform.Android/Platform.cs
Xamarin.Forms.Platform.Android/PlatformRenderer.cs
Xamarin.Forms.Platform.Android/Renderers/OpenGLViewRenderer.cs

index 0b6c06c..75c77c2 100644 (file)
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.27130.2027
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28726.283
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xamarin.Forms", "Xamarin.Forms", "{9AD757F5-E57A-459D-A0A7-E0675E045B84}"
 EndProject
@@ -80,8 +80,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xamarin.Flex", "Xamarin.Fle
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Core.Design", "Xamarin.Forms.Core.Design\Xamarin.Forms.Core.Design.csproj", "{98637471-8E5C-4DDE-89CA-2EAA664FB0EF}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Maps.Design", "Xamarin.Forms.Maps.Design\Xamarin.Forms.Maps.Design.csproj", "{C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Xaml.Design", "Xamarin.Forms.Xaml.Design\Xamarin.Forms.Xaml.Design.csproj", "{65BC4888-CC59-428A-9B75-540CF1C09480}"
 EndProject
 Global
@@ -463,30 +461,6 @@ Global
                {98637471-8E5C-4DDE-89CA-2EAA664FB0EF}.Release|x64.Build.0 = Release|Any CPU
                {98637471-8E5C-4DDE-89CA-2EAA664FB0EF}.Release|x86.ActiveCfg = Release|Any CPU
                {98637471-8E5C-4DDE-89CA-2EAA664FB0EF}.Release|x86.Build.0 = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|ARM.ActiveCfg = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|ARM.Build.0 = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|iPhone.Build.0 = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|x64.Build.0 = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Debug|x86.Build.0 = Debug|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|Any CPU.Build.0 = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|ARM.ActiveCfg = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|ARM.Build.0 = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|iPhone.ActiveCfg = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|iPhone.Build.0 = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|x64.ActiveCfg = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|x64.Build.0 = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|x86.ActiveCfg = Release|Any CPU
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87}.Release|x86.Build.0 = Release|Any CPU
                {65BC4888-CC59-428A-9B75-540CF1C09480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {65BC4888-CC59-428A-9B75-540CF1C09480}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {65BC4888-CC59-428A-9B75-540CF1C09480}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -533,7 +507,6 @@ Global
                {C9696465-7657-4843-872E-3C01891C4A9B} = {9AD757F5-E57A-459D-A0A7-E0675E045B84}
                {D31A6537-ED9C-4EBD-B231-A8D4FE44126A} = {29AC50BF-B4FB-450B-9386-0C5AD4B84226}
                {98637471-8E5C-4DDE-89CA-2EAA664FB0EF} = {9AD757F5-E57A-459D-A0A7-E0675E045B84}
-               {C4340D4E-BDDB-4053-BFBC-CF4F043FAE87} = {132FB9A4-613F-44CE-95D5-758D32D231DD}
                {65BC4888-CC59-428A-9B75-540CF1C09480} = {32F608E2-6406-4DCF-9105-E2A7CB7085CF}
        EndGlobalSection
        GlobalSection(ExtensibilityGlobals) = postSolution
index f9a276f..2d8d4ab 100644 (file)
@@ -7,147 +7,46 @@ rem This is not ideal, but it's better than nothing, and it usually works fine.
 rem stub uncommon targets
 set NUGET_EXE=%NUGET_DIR%NuGet.exe
 
-mkdir Xamarin.Forms.Platform.MacOS\bin\debug\
-mkdir Xamarin.Forms.Platform.Tizen\bin\debug\tizen40\
-mkdir Xamarin.Forms.Maps.Tizen\bin\debug\Tizen40
-mkdir Xamarin.Forms.Maps.MacOS\bin\debug
-mkdir Xamarin.Forms.Platform.UAP\bin\debug\
-mkdir Xamarin.Forms.Platform.ios\bin\debug\
-mkdir Stubs\Xamarin.Forms.Platform.iOS\bin\iPhone\debug\
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\ar
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\ca
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\cs
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\da
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\de
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\el
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\es
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\fi
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\fr
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\he
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\hi
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\hr
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\hu
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\id
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\it
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\ja
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\ko
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\ms
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\nb
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\nl
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\pl
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\pt-BR
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\pt
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\ro
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\ru
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\sk
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\sv
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\th
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\tr
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\uk
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\vi
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\zh-Hans
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\zh-Hant
-mkdir Xamarin.Forms.Platform.iOS\bin\debug\zh-HK
-
-mkdir Xamarin.Forms.Platform.Android\bin\debug
-echo foo > Xamarin.Forms.Platform.Android\bin\debug\Xamarin.Forms.Platform.Android.dll
-
-mkdir Xamarin.Forms.Platform.Android.FormsViewGroup\bin\debug
-echo foo > Xamarin.Forms.Platform.Android.FormsViewGroup\bin\debug\FormsViewGroup.dll
-
-mkdir Stubs\Xamarin.Forms.Platform.Android\bin\debug
-echo foo > Stubs\Xamarin.Forms.Platform.Android\bin\debug\Xamarin.Forms.Platform.dll
-
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\ar\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\ca\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\cs\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\da\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\de\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\el\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\es\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\fi\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\fr\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\he\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\hi\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\hr\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\hu\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\id\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\it\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\ja\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\ko\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\ms\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\nb\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\nl\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\pl\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\pt-BR\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\pt\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\ro\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\ru\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\sk\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\sv\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\th\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\tr\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\uk\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\vi\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\zh-Hans\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\zh-Hant\Xamarin.Forms.Platform.iOS.resources.dll
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\zh-HK\Xamarin.Forms.Platform.iOS.resources.dll
-
-echo foo > Xamarin.Forms.Platform.iOS\bin\debug\Xamarin.Forms.Platform.iOS.dll
-echo foo > Stubs\Xamarin.Forms.Platform.iOS\bin\iPhone\debug\Xamarin.Forms.Platform.dll
-
-echo foo > Xamarin.Forms.Platform.MacOS\bin\debug\Xamarin.forms.Platform.macOS.dll
-echo foo > Xamarin.Forms.Platform.MacOS\bin\debug\Xamarin.forms.Platform.dll
-echo foo > Xamarin.Forms.Maps.MacOS\bin\debug\Xamarin.Forms.Maps.macOS.dll
-
-mkdir Stubs\Xamarin.Forms.Platform.Tizen\bin\debug\tizen40
-echo foo > Stubs\Xamarin.Forms.Platform.Tizen\bin\debug\tizen40\Xamarin.Forms.Platform.dll
-echo foo > Xamarin.Forms.Maps.Tizen\bin\debug\Tizen40\Xamarin.Forms.Maps.Tizen.dll
-
-mkdir Xamarin.Forms.Platform.Tizen\bin\debug\tizen40
-echo foo > Xamarin.Forms.Platform.Tizen\bin\debug\tizen40\Xamarin.forms.Platform.tizen.dll
-echo foo > Xamarin.Forms.Platform.Tizen\bin\debug\tizen40\Xamarin.forms.Platform.dll
-
-mkdir Xamarin.Forms.Platform.UAP\bin\debug\
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\Xamarin.Forms.Platform.UAP.dll
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\Xamarin.Forms.Platform.UAP.pri
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\Xamarin.Forms.Platform.UAP.xr.xml
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\FormsProgressBarStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\FormsFlyout.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\FormsCommandBarStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\Resources.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\FormsTextBoxStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\AutoSuggestStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\SliderStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\MasterDetailControlStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\PageControlStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\TabbedPageStyle.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\FormsEmbeddedPageWrapper.xbf
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\StepperControl.xbf
-
-mkdir Xamarin.Forms.Platform.UAP\bin\debug\Items
-echo foo > Xamarin.Forms.Platform.UAP\bin\debug\Items\ItemsViewStyles.xbf
-            
 if "%1" == "droid" (
+   set CONFIG=debug
+   call .create-stubs.bat
    %NUGET_EXE% restore .xamarin.forms.android.nuget.sln
    msbuild /v:m /p:platform="any cpu" /p:WarningLevel=0 /p:CreateAllAndroidTargets=true .xamarin.forms.android.nuget.sln
 )
+if "%1" == "rdroid" (
+   set CONFIG=release
+   call .create-stubs.bat
+   %NUGET_EXE% restore .xamarin.forms.android.nuget.sln
+   msbuild /v:m /p:configuration=release /p:platform="any cpu" /p:WarningLevel=0 /p:CreateAllAndroidTargets=true .xamarin.forms.android.nuget.sln
+)
+if "%1" == "pdroid" (
+   set CONFIG=release
+   msbuild /v:m /p:configuration=release /p:platform="anyCpu" /p:WarningLevel=0 /p:CreateAllAndroidTargets=true Xamarin.Forms.Platform.Android\Xamarin.Forms.Platform.Android.csproj
+)
 if "%1" == "ios" (
+   set CONFIG=debug
+   call .create-stubs.bat
    %NUGET_EXE% restore .xamarin.forms.ios.nuget.sln
    msbuild /v:m /p:platform="any cpu" .xamarin.forms.ios.nuget.sln
 )
 if "%1" == "droidios" (
+   set CONFIG=debug
+   call .create-stubs.bat
    %NUGET_EXE% restore .xamarin.forms.android.nuget.sln
    %NUGET_EXE% restore .xamarin.forms.ios.nuget.sln
    msbuild /v:m /p:platform="any cpu" /p:WarningLevel=0 .xamarin.forms.android.nuget.sln
    msbuild /v:m /p:platform="any cpu" .xamarin.forms.ios.nuget.sln
 )
 if "%1" == "uap" (
+   set CONFIG=debug
+   call .create-stubs.bat
    %NUGET_EXE% restore .xamarin.forms.uap.nuget.sln
    msbuild /v:m /p:platform="any cpu" .xamarin.forms.uap.nuget.sln /t:restore
    msbuild /v:m /p:platform="any cpu" .xamarin.forms.uap.nuget.sln
 )
 if "%1" == "all" (
+   set CONFIG=debug
+   call .create-stubs.bat
    %NUGET_EXE% restore .xamarin.forms.sln
    msbuild /v:m /p:platform="any cpu" .xamarin.forms.uap.nuget.sln /t:restore
    msbuild /v:m /p:platform="any cpu" /p:WarningLevel=0 /p:CreateAllAndroidTargets=true .xamarin.forms.nuget.sln
@@ -156,9 +55,9 @@ if "%1" == "all" (
 if "%DEBUG_VERSION%"=="" set DEBUG_VERSION=0
 set /a DEBUG_VERSION=%DEBUG_VERSION%+1
 pushd .nuspec
-%NUGET_EXE% pack Xamarin.Forms.nuspec -properties configuration=debug;platform=anycpu -Version 9.9.%DEBUG_VERSION%
+%NUGET_EXE% pack Xamarin.Forms.nuspec -properties configuration=%CONFIG%;platform=anycpu -Version 9.9.%DEBUG_VERSION%
 if "%CREATE_MAP_NUGET%" NEQ "" (
 REM Requires building x86, x64, AMD
-       %NUGET_EXE% pack Xamarin.Forms.Maps.nuspec -properties configuration=debug;platform=anycpu -Version 9.9.%DEBUG_VERSION%
+       %NUGET_EXE% pack Xamarin.Forms.Maps.nuspec -properties configuration=%CONFIG%;platform=anycpu -Version 9.9.%DEBUG_VERSION%
 )
 popd
diff --git a/.create-stubs.bat b/.create-stubs.bat
new file mode 100644 (file)
index 0000000..438d6e4
--- /dev/null
@@ -0,0 +1,126 @@
+rem This is not our official nuget build script.
+rem This is used as a quick and dirty way create nuget packages used to test user issue reproductions.
+rem This is updated as XF developers use it to test reproductions. As such, it may not always work.
+rem This is not ideal, but it's better than nothing, and it usually works fine.
+
+mkdir Xamarin.Forms.Platform.MacOS\bin\%CONFIG%\
+mkdir Xamarin.Forms.Platform.Tizen\bin\%CONFIG%\tizen40\
+mkdir Xamarin.Forms.Maps.Tizen\bin\%CONFIG%\Tizen40
+mkdir Xamarin.Forms.Maps.MacOS\bin\%CONFIG%
+mkdir Xamarin.Forms.Platform.UAP\bin\%CONFIG%\
+mkdir Xamarin.Forms.Platform.ios\bin\%CONFIG%\
+mkdir Stubs\Xamarin.Forms.Platform.iOS\bin\iPhone\%CONFIG%\
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ar
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ca
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\cs
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\da
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\de
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\el
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\es
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\fi
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\fr
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\he
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\hi
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\hr
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\hu
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\id
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\it
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ja
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ko
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ms
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\nb
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\nl
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\pl
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\pt-BR
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\pt
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ro
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ru
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\sk
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\sv
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\th
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\tr
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\uk
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\vi
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\zh-Hans
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\zh-Hant
+mkdir Xamarin.Forms.Platform.iOS\bin\%CONFIG%\zh-HK
+
+mkdir Xamarin.Forms.Platform.Android\bin\%CONFIG%
+echo foo > Xamarin.Forms.Platform.Android\bin\%CONFIG%\Xamarin.Forms.Platform.Android.dll
+
+mkdir Xamarin.Forms.Platform.Android.FormsViewGroup\bin\%CONFIG%
+echo foo > Xamarin.Forms.Platform.Android.FormsViewGroup\bin\%CONFIG%\FormsViewGroup.dll
+
+mkdir Stubs\Xamarin.Forms.Platform.Android\bin\%CONFIG%
+echo foo > Stubs\Xamarin.Forms.Platform.Android\bin\%CONFIG%\Xamarin.Forms.Platform.dll
+
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ar\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ca\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\cs\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\da\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\de\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\el\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\es\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\fi\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\fr\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\he\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\hi\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\hr\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\hu\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\id\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\it\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ja\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ko\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ms\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\nb\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\nl\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\pl\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\pt-BR\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\pt\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ro\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\ru\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\sk\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\sv\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\th\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\tr\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\uk\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\vi\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\zh-Hans\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\zh-Hant\Xamarin.Forms.Platform.iOS.resources.dll
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\zh-HK\Xamarin.Forms.Platform.iOS.resources.dll
+
+echo foo > Xamarin.Forms.Platform.iOS\bin\%CONFIG%\Xamarin.Forms.Platform.iOS.dll
+echo foo > Stubs\Xamarin.Forms.Platform.iOS\bin\iPhone\%CONFIG%\Xamarin.Forms.Platform.dll
+
+echo foo > Xamarin.Forms.Platform.MacOS\bin\%CONFIG%\Xamarin.forms.Platform.macOS.dll
+echo foo > Xamarin.Forms.Platform.MacOS\bin\%CONFIG%\Xamarin.forms.Platform.dll
+echo foo > Xamarin.Forms.Maps.MacOS\bin\%CONFIG%\Xamarin.Forms.Maps.macOS.dll
+
+mkdir Stubs\Xamarin.Forms.Platform.Tizen\bin\%CONFIG%\tizen40
+echo foo > Stubs\Xamarin.Forms.Platform.Tizen\bin\%CONFIG%\tizen40\Xamarin.Forms.Platform.dll
+echo foo > Xamarin.Forms.Maps.Tizen\bin\%CONFIG%\Tizen40\Xamarin.Forms.Maps.Tizen.dll
+
+mkdir Xamarin.Forms.Platform.Tizen\bin\%CONFIG%\tizen40
+echo foo > Xamarin.Forms.Platform.Tizen\bin\%CONFIG%\tizen40\Xamarin.forms.Platform.tizen.dll
+echo foo > Xamarin.Forms.Platform.Tizen\bin\%CONFIG%\tizen40\Xamarin.forms.Platform.dll
+
+mkdir Xamarin.Forms.Platform.UAP\bin\%CONFIG%\
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\Xamarin.Forms.Platform.UAP.dll
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\Xamarin.Forms.Platform.UAP.pri
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\Xamarin.Forms.Platform.UAP.xr.xml
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\FormsProgressBarStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\FormsFlyout.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\FormsCommandBarStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\Resources.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\FormsTextBoxStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\AutoSuggestStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\SliderStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\MasterDetailControlStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\PageControlStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\TabbedPageStyle.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\FormsEmbeddedPageWrapper.xbf
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\StepperControl.xbf
+
+mkdir Xamarin.Forms.Platform.UAP\bin\%CONFIG%\Items
+echo foo > Xamarin.Forms.Platform.UAP\bin\%CONFIG%\Items\ItemsViewStyles.xbf
+            
\ No newline at end of file
diff --git a/Xamarin.Forms.Core/Profiler.cs b/Xamarin.Forms.Core/Profiler.cs
new file mode 100644 (file)
index 0000000..4d12242
--- /dev/null
@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Threading;
+using System.Threading.Tasks;
+using Xamarin.Forms.Internals;
+
+namespace Xamarin.Forms.Internals
+{
+       [EditorBrowsable(EditorBrowsableState.Never)]
+       public struct Profile : IDisposable
+       {
+               const int Capacity = 1000;
+
+               [DebuggerDisplay("{Name,nq} {Id} {Ticks}")]
+               public struct Datum
+               {
+                       public string Name;
+                       public string Id;
+                       public long Ticks;
+                       public int Depth;
+                       public int Line;
+               }
+               public static List<Datum> Data = new List<Datum>(Capacity);
+
+               static Stack<Profile> Stack = new Stack<Profile>(Capacity);
+               static int Depth = 0;
+               static bool Running = false;
+               static Stopwatch Stopwatch = new Stopwatch();
+
+               readonly long _start;
+               readonly string _name;
+               readonly int _slot;
+
+               public static void Start() 
+               {
+                       Running = true;
+               }
+
+               public static void Stop()
+               {
+                       // unwind stack
+                       Running = false;
+                       while (Stack.Count > 0)
+                               Stack.Pop();
+               }
+
+               public static void FrameBegin(
+                       [CallerMemberName] string name = "",
+                       string id = null,
+                       [CallerLineNumber] int line = 0)
+               {
+                       if (!Running)
+                               return;
+
+                       FrameBeginBody(name, id, line);
+               }
+
+               public static void FrameEnd()
+               {
+                       if (!Running)
+                               return;
+
+                       FrameEndBody();
+               }
+
+               public static void FramePartition(
+                       string id,
+                       [CallerLineNumber] int line = 0)
+               {
+                       if (!Running)
+                               return;
+
+                       FramePartitionBody(id, line);
+               }
+
+               static void FrameBeginBody(
+                       string name,
+                       string id,
+                       int line)
+               {
+                       if (!Stopwatch.IsRunning)
+                               Stopwatch.Start();
+
+                       Stack.Push(new Profile(name, id, line));
+               }
+
+               static void FrameEndBody()
+               {
+                       var profile = Stack.Pop();
+                       profile.Dispose();
+               }
+
+               static void FramePartitionBody(
+                       string id, 
+                       int line)
+               {
+                       var profile = Stack.Pop();
+                       var name = profile._name;
+                       profile.Dispose();
+
+                       FrameBegin(name, id, line);
+               }
+
+               Profile(
+                       string name,
+                       string id,
+                       int line)
+               {
+                       this = default(Profile);
+                       _start = Stopwatch.ElapsedTicks;
+
+                       _name = name;
+
+                       _slot = Data.Count;
+                       Data.Add(new Datum()
+                       {
+                               Depth = Depth,
+                               Name = name,
+                               Id = id,
+                               Ticks = -1,
+                               Line = line
+                       });
+
+                       Depth++;
+               }
+
+               public void Dispose()
+               {
+                       if (Running && _start == 0)
+                               return;
+
+                       var ticks = Stopwatch.ElapsedTicks - _start;
+                       --Depth;
+
+                       var datum = Data[_slot];
+                       datum.Ticks = ticks;
+                       Data[_slot] = datum;
+               }
+       }
+}
index da5183d..aa97c0a 100644 (file)
@@ -3,9 +3,17 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
 using System.Reflection;
+using Xamarin.Forms.Internals;
 
 namespace Xamarin.Forms
 {
+       [Flags]
+       public enum ActivationFlags
+       {
+               NoCss = 1 << 0,
+       }
+
+
        // Previewer uses reflection to bind to this method; Removal or modification of visibility will break previewer.
        internal static class Registrar
        {
@@ -241,9 +249,60 @@ namespace Xamarin.Forms.Internals
 
                public static Registrar<IRegisterable> Registered { get; internal set; }
 
+               //typeof(ExportRendererAttribute);
+               //typeof(ExportCellAttribute);
+               //typeof(ExportImageSourceHandlerAttribute);
+               public static void RegisterRenderers(HandlerAttribute[] attributes)
+               {
+                       var length = attributes.Length;
+                       for (var i = 0; i < length; i++)
+                       {
+                               var attribute = attributes[i];
+                               if (attribute.ShouldRegister())
+                                       Registered.Register(attribute.HandlerType, attribute.TargetType, attribute.SupportedVisuals);
+                       }
+               }
+
+               public static void RegisterStylesheets()
+               {
+                       var assembly = typeof(StyleSheets.StylePropertyAttribute).GetTypeInfo().Assembly;
+
+#if NETSTANDARD2_0
+                       object[] styleAttributes = assembly.GetCustomAttributes(typeof(StyleSheets.StylePropertyAttribute), true);
+#else
+                       object[] styleAttributes = assembly.GetCustomAttributes(typeof(StyleSheets.StylePropertyAttribute)).ToArray();
+#endif
+                       var stylePropertiesLength = styleAttributes.Length;
+                       for (var i = 0; i < stylePropertiesLength; i++)
+                       {
+                               var attribute = (StyleSheets.StylePropertyAttribute)styleAttributes[i];
+                               if (StyleProperties.TryGetValue(attribute.CssPropertyName, out var attrList))
+                                       attrList.Add(attribute);
+                               else
+                                       StyleProperties[attribute.CssPropertyName] = new List<StyleSheets.StylePropertyAttribute> { attribute };
+                       }
+               }
+
+               public static void RegisterEffects(string resolutionName, ExportEffectAttribute[] effectAttributes)
+               {
+                       var exportEffectsLength = effectAttributes.Length;
+                       for (var i = 0; i < exportEffectsLength; i++)
+                       {
+                               var effect = effectAttributes[i];
+                               Effects[resolutionName + "." + effect.Id] = effect.Type;
+                       }
+               }
+
                public static void RegisterAll(Type[] attrTypes)
                {
+                       RegisterAll(attrTypes, default(ActivationFlags));
+               }
+               public static void RegisterAll(Type[] attrTypes, ActivationFlags flags)
+               {
+                       Profile.FrameBegin();
+
                        Assembly[] assemblies = Device.GetAssemblies();
+
                        if (ExtraAssemblies != null)
                                assemblies = assemblies.Union(ExtraAssemblies).ToArray();
 
@@ -258,8 +317,11 @@ namespace Xamarin.Forms.Internals
 
                        // Don't use LINQ for performance reasons
                        // Naive implementation can easily take over a second to run
+                       Profile.FramePartition("Reflect");
                        foreach (Assembly assembly in assemblies)
                        {
+                               Profile.FrameBegin(assembly.GetName().Name);
+
                                foreach (Type attrType in attrTypes)
                                {
                                        object[] attributes;
@@ -277,6 +339,7 @@ namespace Xamarin.Forms.Internals
                                                Log.Warning(nameof(Registrar), "Could not load assembly: {0} for Attibute {1} | Some renderers may not be loaded", assembly.FullName, attrType.FullName);
                                                continue;
                                        }
+
                                        var length = attributes.Length;
                                        for (var i = 0; i < length; i++)
                                        {
@@ -302,7 +365,7 @@ namespace Xamarin.Forms.Internals
                                        var effect = (ExportEffectAttribute)effectAttributes[i];
                                        Effects[resolutionName + "." + effect.Id] = effect.Type;
                                }
-
+                               Profile.FrameEnd();
 #if NETSTANDARD2_0
                                object[] styleAttributes = assembly.GetCustomAttributes(typeof(StyleSheets.StylePropertyAttribute), true);
 #else
@@ -319,7 +382,10 @@ namespace Xamarin.Forms.Internals
                                }
                        }
 
+                       Profile.FramePartition("DependencyService.Initialize");
                        DependencyService.Initialize(assemblies);
+
+                       Profile.FrameEnd();
                }
        }
 }
index ab14d77..042936f 100644 (file)
@@ -116,6 +116,7 @@ namespace Xamarin.Forms.Platform.Android
 
                protected void LoadApplication(Application application)
                {
+                       Profile.FrameBegin();
                        if (!_activityCreated)
                        {
                                throw new InvalidOperationException("Activity OnCreate was not called prior to loading the application. Did you forget a base.OnCreate call?");
@@ -141,7 +142,11 @@ namespace Xamarin.Forms.Platform.Android
 
                        application.PropertyChanged += AppOnPropertyChanged;
 
+                       Profile.FramePartition(nameof(SetMainPage));
+
                        SetMainPage();
+
+                       Profile.FrameEnd();
                }
 
                protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
index f38db47..2e5d00e 100644 (file)
@@ -25,8 +25,32 @@ using System.ComponentModel;
 
 namespace Xamarin.Forms
 {
+       public struct ActivationOptions
+       {
+               public struct EffectScope
+               {
+                       public string Name;
+                       public ExportEffectAttribute[] Effects;
+               }
+
+               public ActivationOptions(Context activity, Bundle bundle, Assembly resourceAssembly)
+               {
+                       this = default(ActivationOptions);
+                       this.Activity = activity;
+                       this.Bundle = bundle;
+                       this.ResourceAssembly = resourceAssembly;
+               }
+               public Context Activity;
+               public Bundle Bundle;
+               public Assembly ResourceAssembly;
+               public HandlerAttribute[] Handlers;
+               public EffectScope[] EffectScopes;
+               public ActivationFlags Flags;
+       }
+
        public static class Forms
        {
+
                const int TabletCrossover = 600;
 
                static bool? s_isLollipopOrNewer;
@@ -100,13 +124,33 @@ namespace Xamarin.Forms
                // Why is bundle a param if never used?
                public static void Init(Context activity, Bundle bundle)
                {
-                       Assembly resourceAssembly = Assembly.GetCallingAssembly();
-                       SetupInit(activity, resourceAssembly);
+                       Assembly resourceAssembly;
+
+                       Profile.FrameBegin("Assembly.GetCallingAssembly");
+                       resourceAssembly = Assembly.GetCallingAssembly();
+                       Profile.FrameEnd();
+
+                       Profile.FrameBegin();
+                       SetupInit(activity, resourceAssembly, null);
+                       Profile.FrameEnd();
                }
 
                public static void Init(Context activity, Bundle bundle, Assembly resourceAssembly)
                {
-                       SetupInit(activity, resourceAssembly);
+                       Profile.FrameBegin();
+                       SetupInit(activity, resourceAssembly, null);
+                       Profile.FrameEnd();
+               }
+
+               public static void Initialize(ActivationOptions activation)
+               {
+                       Profile.FrameBegin();
+                       SetupInit(
+                               activation.Activity,
+                               activation.ResourceAssembly,
+                               activation
+                       );
+                       Profile.FrameEnd();
                }
 
                /// <summary>
@@ -156,8 +200,13 @@ namespace Xamarin.Forms
                                viewInitialized(self, new ViewInitializedEventArgs { View = self, NativeView = nativeView });
                }
 
-               static void SetupInit(Context activity, Assembly resourceAssembly)
+               static void SetupInit(
+                       Context activity,
+                       Assembly resourceAssembly,
+                       ActivationOptions? maybeOptions = null
+               )
                {
+                       Profile.FrameBegin();
                        if (!IsInitialized)
                        {
                                // Only need to get this once; it won't change
@@ -171,9 +220,11 @@ namespace Xamarin.Forms
                        if (!IsInitialized)
                        {
                                // Only need to do this once
+                               Profile.FramePartition("ResourceManager.Init");
                                ResourceManager.Init(resourceAssembly);
                        }
 
+                       Profile.FramePartition("Color.SetAccent()");
                        // We want this to be updated when we have a new activity (e.g. on a configuration change)
                        // This could change if the UI mode changes (e.g., if night mode is enabled)
                        Color.SetAccent(GetAccentColor(activity));
@@ -182,11 +233,13 @@ namespace Xamarin.Forms
                        if (!IsInitialized)
                        {
                                // Only need to do this once
+                               Profile.FramePartition("Log.Listeners");
                                Internals.Log.Listeners.Add(new DelegateLogListener((c, m) => Trace.WriteLine(m, c)));
                        }
 
                        // We want this to be updated when we have a new activity (e.g. on a configuration change)
                        // because AndroidPlatformServices needs a current activity to launch URIs from
+                       Profile.FramePartition("Device.PlatformServices");
                        Device.PlatformServices = new AndroidPlatformServices(activity);
 
                        // use field and not property to avoid exception in getter
@@ -198,20 +251,58 @@ namespace Xamarin.Forms
 
                        // We want this to be updated when we have a new activity (e.g. on a configuration change)
                        // because Device.Info watches for orientation changes and we need a current activity for that
+                       Profile.FramePartition("new AndroidDeviceInfo(activity)");
                        Device.Info = new AndroidDeviceInfo(activity);
                        Device.SetFlags(s_flags);
 
+                       Profile.FramePartition("AndroidTicker");
+
                        var ticker = Ticker.Default as AndroidTicker;
                        if (ticker != null)
                                ticker.Dispose();
                        Ticker.SetDefault(new AndroidTicker());
 
+                       Profile.FramePartition("RegisterAll");
+
                        if (!IsInitialized)
                        {
-                               // Only need to do this once
-                               Registrar.RegisterAll(new[] { typeof(ExportRendererAttribute), typeof(ExportCellAttribute), typeof(ExportImageSourceHandlerAttribute) });
+                               if (maybeOptions.HasValue)
+                               {
+                                       var options = maybeOptions.Value;
+                                       var handlers = options.Handlers;
+                                       var flags = options.Flags;
+                                       var effectScopes = options.EffectScopes;
+
+                                       // renderers
+                                       Registrar.RegisterRenderers(handlers);
+
+                                       // effects
+                                       if (effectScopes != null)
+                                       {
+                                               for (var i = 0; i < effectScopes.Length; i++)
+                                               {
+                                                       var effectScope = effectScopes[0];
+                                                       Registrar.RegisterEffects(effectScope.Name, effectScope.Effects);
+                                               }
+                                       }
+
+                                       // css
+                                       var noCss = (flags & ActivationFlags.NoCss) != 0;
+                                       if (!noCss)
+                                               Registrar.RegisterStylesheets();
+                               }
+                               else
+                               {
+                                       // Only need to do this once
+                                       Registrar.RegisterAll(new[] {
+                                               typeof(ExportRendererAttribute),
+                                               typeof(ExportCellAttribute),
+                                               typeof(ExportImageSourceHandlerAttribute)
+                                       });
+                               }
                        }
 
+                       Profile.FramePartition("Epilog");
                        // This could change as a result of a config change, so we need to check it every time
                        int minWidthDp = activity.Resources.Configuration.SmallestScreenWidthDp;
                        Device.SetIdiom(minWidthDp >= TabletCrossover ? TargetIdiom.Tablet : TargetIdiom.Phone);
@@ -223,6 +314,7 @@ namespace Xamarin.Forms
                                ExpressionSearch.Default = new AndroidExpressionSearch();
 
                        IsInitialized = true;
+                       Profile.FrameEnd();
                }
 
                static IReadOnlyList<string> s_flags;
index 85635d0..0dbb354 100644 (file)
@@ -336,9 +336,12 @@ namespace Xamarin.Forms.Platform.Android
 
                internal static IVisualElementRenderer CreateRenderer(VisualElement element, Context context)
                {
+                       Profile.FrameBegin(nameof(CreateRenderer));
                        IVisualElementRenderer renderer = Registrar.Registered.GetHandlerForObject<IVisualElementRenderer>(element, context)
                                ?? new DefaultRenderer(context);
+                       Profile.FramePartition(element.GetType().Name);
                        renderer.SetElement(element);
+                       Profile.FrameEnd();
 
                        return renderer;
                }
index 59b0a47..f823c4f 100644 (file)
@@ -3,6 +3,7 @@ using Android.App;
 using Android.Content;
 using Android.Views;
 using Android.Widget;
+using Xamarin.Forms.Internals;
 
 namespace Xamarin.Forms.Platform.Android
 {
@@ -69,8 +70,10 @@ namespace Xamarin.Forms.Platform.Android
 
                protected override void OnLayout(bool changed, int l, int t, int r, int b)
                {
+                       Profile.FrameBegin();
                        SetMeasuredDimension(r - l, b - t);
                        _canvas?.OnLayout(changed, l, t, r, b);
+                       Profile.FrameEnd();
                }
 
                protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec)
index ddf05cc..c1d45e3 100644 (file)
@@ -8,6 +8,7 @@ using Object = Java.Lang.Object;
 
 namespace Xamarin.Forms.Platform.Android
 {
+       //public class OpenGLViewRenderer : ViewRenderer<OpenGLView, GLSurfaceView>
        internal class OpenGLViewRenderer : ViewRenderer<OpenGLView, GLSurfaceView>
        {
                bool _disposed;