Improve startup performance && remove svace fix. 89/282589/3 accepted/tizen/unified/20221007.050539
authorErnest Borowski <e.borowski@samsung.com>
Thu, 6 Oct 2022 08:50:02 +0000 (10:50 +0200)
committerErnest Borowski <e.borowski@samsung.com>
Thu, 6 Oct 2022 09:00:06 +0000 (11:00 +0200)
Startup performaance has been improved by lazy loading certificates
metadata.
Removing Dispose() invocation because it caused some errors during qa.

Change-Id: Iaa07652708ff487697987f425659ef6354e82e73
Signed-off-by: Ernest Borowski <e.borowski@samsung.com>
SettingCertificates/SettingCertificates/WidgetSettingCertificates.cs
SettingCertificates/SettingCertificates/api/Interop/Interop.CertSvc.cs
packaging/org.tizen.cssetting-certificates-1.0.0.tpk

index 3457d5a0f0155779b446476f3110b5f89ada5642..348f13af13962e6484d2c2475efb10e91af7478b 100644 (file)
@@ -51,7 +51,6 @@ namespace SettingCertificates
             window.GetDefaultLayer().Add(_rootView);
             _navigator = window.GetDefaultNavigator();
             _navigator.Push(CreateFirstPage());
-
         }
         private ContentPage CreateFirstPage()
         {
@@ -89,8 +88,7 @@ namespace SettingCertificates
             ContentPage firstPage = CreateContentPage(Resources.IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB/*"Manage certificates"*/, content);
             firstPage.AppBar.AutoNavigationContent = false;
 
-            ViewStyle style = ThemeManager.GetStyle("Tizen.NUI.Components.AppBar");
-            var navigationContent = new Button(((AppBarStyle)style).BackButton);
+            var navigationContent = new Button(((AppBarStyle)ThemeManager.GetStyle("Tizen.NUI.Components.AppBar")).BackButton);
             navigationContent.Clicked += (o, e) =>
             {
                 Bundle bundle = new Bundle();
@@ -98,7 +96,6 @@ namespace SettingCertificates
                 SetContentInfo(bundle.Encode());
             };
             firstPage.AppBar.NavigationContent = navigationContent;
-            style.Dispose();
 
             return firstPage;
         }
@@ -128,6 +125,7 @@ namespace SettingCertificates
         }
         private ContentPage CreateCertDetails(certificateMetadata cert)
         {
+            cert.GetMetadata();
             ScrollableBase content = CreateScrollableBase();
             content.BackgroundColor = new Color("#EFEFEF");
             const float fieldTitleFontScale = 1.2F;
index ff8775b958080feb0bfceeafd10f1a3451311d08..c7add412a802d1c3fb1a0eb58f3fefdddd800547 100644 (file)
@@ -129,6 +129,7 @@ internal static partial class Interop
             internal DateTime before;
             internal DateTime after;
             internal int rootCa;
+            private bool gotMetadata = false;
             public certificateMetadata()
             {
                 fields = new string[Enum.GetNames(typeof(CertificateField)).Length];
@@ -165,8 +166,71 @@ internal static partial class Interop
                 }
                 return GetCertFieldDescription(field);
             }
-        }
+            public void GetMetadata()
+            {
+                if (gotMetadata == true)
+                {
+                    return;
+                }
+                InstanceNew(out IntPtr instance);
+                if (instance == null)
+                {
+                    Tizen.Log.Debug(LogTag, "Unable to create new instance");
+                    return;
+                }
+                ErrorCode err = (ErrorCode)GetPKCS12CertificateFromStore(instance, storeType, gname, out Certificate cout);
+                if (err != ErrorCode.CERTSVC_SUCCESS)
+                {
+                    Tizen.Log.Debug(LogTag, "Unable to GetPKCS12CertificateFromStore, err: " + err + ", instance: "
+                        + instance + " gname: " + gname + " store_type: " + storeType);
+                    InstanceFree(instance);
+                    return;
+                }
+
+                err = (ErrorCode)GetCertificateNotAfter(cout, out long time);
+                if (err != ErrorCode.CERTSVC_SUCCESS)
+                {
+                    Tizen.Log.Debug(LogTag, "Unable to GetCertificateNotAfter, , err: " + err + ", instance: "
+                    + instance + " gname: " + gname + " store_type: " + storeType);
+                    InstanceFree(instance);
+                    return;
+                }
+                after = new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time);
+                err = (ErrorCode)GetCertificateNotBefore(cout, out time);
+                if (err != ErrorCode.CERTSVC_SUCCESS)
+                {
+                    Tizen.Log.Debug(LogTag, "Unable to GetCertificateNotBefore, , err: " + err + ", instance: "
+                    + instance + " gname: " + gname + " store_type: " + storeType);
+                    InstanceFree(instance);
+                    return;
+                }
+                before = new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time);
+                err = (ErrorCode)GetCertificateIsRootCa(cout, out int isRootCa);
+                if (err != ErrorCode.CERTSVC_SUCCESS)
+                {
+                    Tizen.Log.Debug(LogTag, "Unable to GetCertificateIsRootCa, , err: " + err + ", instance: "
+                    + instance + " gname: " + gname + " store_type: " + storeType);
+                    InstanceFree(instance);
+                    return;
+                }
+                rootCa = isRootCa;
+                foreach (CertificateField certificateField in Enum.GetValues(typeof(CertificateField)))
+                {
+                    err = (ErrorCode)GetCertificateStringField(cout, certificateField, out CertSvcString certSvcString);
+                    if (err != ErrorCode.CERTSVC_SUCCESS)
+                    {
+                        Tizen.Log.Debug(LogTag, "Unable to GetCertificateStringField, , err: " + err + ", instance: "
+                        + instance + " gname: " + gname + " store_type: " + storeType);
+                        continue;
+                    }
+                    string stringField = Marshal.PtrToStringUTF8(certSvcString.privateHandler);
+                    fields[(int)certificateField] = stringField;
+                }
+                gotMetadata = true;
+                InstanceFree(instance);
+            }
 
+        }
         internal struct StoreCertHandle
         {
             string name;
@@ -215,72 +279,16 @@ internal static partial class Interop
         {
             IntPtr cur = certList;
             var list = new List<certificateMetadata>();
-
             while (cur != IntPtr.Zero)
             {
                 StoreCertList item = Marshal.PtrToStructure<Interop.CertSvc.StoreCertList>(cur);
-                certificateMetadata cert = new certificateMetadata
+                certificateMetadata cert = new certificateMetadata()
                 {
                     status = item.status,
                     gname = Marshal.PtrToStringUTF8(item.gname),
                     title = Marshal.PtrToStringUTF8(item.title),
                     storeType = item.storeType
                 };
-                ErrorCode err = (ErrorCode)GetPKCS12CertificateFromStore(instance, item.storeType, item.gname, out Certificate cout);
-                if (err != ErrorCode.CERTSVC_SUCCESS)
-                {
-                    Tizen.Log.Debug(LogTag, "Unable to GetPKCS12CertificateFromStore, err: " + err + ", instance: "
-                        + instance + " gname: " + item.gname + " store_type: " + item.storeType);
-                    cur = item.next;
-                    continue;
-                }
-
-                err = (ErrorCode)GetCertificateNotAfter(cout, out long time);
-                if (err != ErrorCode.CERTSVC_SUCCESS)
-                {
-                    Tizen.Log.Debug(LogTag, "Unable to GetCertificateNotAfter, , err: " + err + ", instance: "
-                    + instance + " gname: " + item.gname + " store_type: " + item.storeType);
-                    cur = item.next;
-                    continue;
-                }
-                cert.after = new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time);
-                err = (ErrorCode)GetCertificateNotBefore(cout, out time);
-                if (err != ErrorCode.CERTSVC_SUCCESS)
-                {
-                    Tizen.Log.Debug(LogTag, "Unable to GetCertificateNotBefore, , err: " + err + ", instance: "
-                    + instance + " gname: " + item.gname + " store_type: " + item.storeType);
-                    cur = item.next;
-                    continue;
-                }
-                cert.before = new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time);
-                err = (ErrorCode)GetCertificateIsRootCa(cout, out int isRootCa);
-                if (err != ErrorCode.CERTSVC_SUCCESS)
-                {
-                    Tizen.Log.Debug(LogTag, "Unable to GetCertificateIsRootCa, , err: " + err + ", instance: "
-                    + instance + " gname: " + item.gname + " store_type: " + item.storeType);
-                    cur = item.next;
-                    continue;
-                }
-                cert.rootCa = isRootCa;
-                bool gotError = false;
-                foreach (CertificateField certificateField in Enum.GetValues(typeof(CertificateField)))
-                {
-                    err = (ErrorCode)GetCertificateStringField(cout, certificateField, out CertSvcString certSvcString);
-                    if (err != ErrorCode.CERTSVC_SUCCESS)
-                    {
-                        Tizen.Log.Debug(LogTag, "Unable to GetCertificateStringField, , err: " + err + ", instance: "
-                        + instance + " gname: " + item.gname + " store_type: " + item.storeType);
-                        cur = item.next;
-                        gotError = true;
-                        break;
-                    }
-                    string stringField = Marshal.PtrToStringUTF8(certSvcString.privateHandler);
-                    cert.fields[(int)certificateField] = stringField;
-                }
-                if (gotError == true)
-                {
-                    continue;
-                }
                 cur = item.next;
                 list.Add(cert);
             }
@@ -303,6 +311,9 @@ internal static partial class Interop
         // int certsvc_pkcs12_get_certificate_from_store(CertSvcInstance instance, CertStoreType storeType, const char* gname, CertSvcCertificate *certificate);
         [DllImport(Libraries.CertSvc, EntryPoint = "certsvc_pkcs12_get_certificate_from_store")]
         internal static extern int GetPKCS12CertificateFromStore(IntPtr instance, CertStoreType storeType, IntPtr gname, out Certificate certificate);
+        // int certsvc_pkcs12_get_certificate_from_store(CertSvcInstance instance, CertStoreType storeType, const char* gname, CertSvcCertificate *certificate);
+        [DllImport(Libraries.CertSvc, EntryPoint = "certsvc_pkcs12_get_certificate_from_store")]
+        internal static extern int GetPKCS12CertificateFromStore(IntPtr instance, CertStoreType storeType, [MarshalAs(UnmanagedType.LPStr)] string gname, out Certificate certificate);
 
         // int certsvc_certificate_get_string_field(CertSvcCertificate certificate, CertSvcCertificateField field, CertSvcString *buffer);
         [DllImport(Libraries.CertSvc, EntryPoint = "certsvc_certificate_get_string_field")]
index a6ddc179b3253c9f54048fee6790c277c657ab36..9634adfb2e32566f867d3144ab37309ebfac8274 100644 (file)
Binary files a/packaging/org.tizen.cssetting-certificates-1.0.0.tpk and b/packaging/org.tizen.cssetting-certificates-1.0.0.tpk differ