]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
Create more threads to synchronize pcd data for FrameworkModules in a platform.
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
index 902c12a17ceb54275e57009ce69a6527c760e18b..b8eb8c682b7b2df3a0cd0e01407e67ac34ecaf80 100644 (file)
@@ -59,6 +59,8 @@ public class FpdFrameworkModules extends IInternalFrame {
     \r
     private static final int timeToWait = 2000;\r
     \r
+    private static final int pcdSyncThreadNumber = 10;\r
+    \r
     private long savedMs = 0;\r
     \r
     String searchField = "";\r
@@ -838,9 +840,11 @@ public class FpdFrameworkModules extends IInternalFrame {
 \r
     private class PcdSyncTask extends Thread {\r
         \r
+        boolean pcdSynced = false;\r
         public void run () {\r
             Vector<String> vExceptions = new Vector<String>();\r
-            if (pcdSync(vExceptions)) {\r
+            pcdSync(vExceptions);\r
+            if (pcdSynced) {\r
                 JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), "PCD in this platform are synchronized with those in MSA files.");    \r
                 docConsole.setSaved(false);\r
             }\r
@@ -852,6 +856,70 @@ public class FpdFrameworkModules extends IInternalFrame {
                 JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), "Error occurred during synchronization:\n" + errorMsg);\r
             }\r
         }\r
+        \r
+        private void pcdSync(Vector<String> v) {\r
+            \r
+            Vector<PcdSyncSubTask> vThreads = new Vector<PcdSyncSubTask> ();\r
+            int moduleCount = jTableFpdModules.getRowCount();\r
+            int start = 0;\r
+            for (int i = 0; i < FpdFrameworkModules.pcdSyncThreadNumber; ++i) {\r
+                int end = start + moduleCount/FpdFrameworkModules.pcdSyncThreadNumber;\r
+                if (end > moduleCount) {\r
+                    end = moduleCount;\r
+                }\r
+                vThreads.add(new PcdSyncSubTask (start, end, v));\r
+                start = end;\r
+            }\r
+            \r
+            for (int i = 0; i < FpdFrameworkModules.pcdSyncThreadNumber; ++i) {\r
+                vThreads.get(i).start();\r
+            }\r
+            \r
+            try {\r
+                for (int i = 0; i < FpdFrameworkModules.pcdSyncThreadNumber; ++i) {\r
+                    vThreads.get(i).join();\r
+                }\r
+            }\r
+            catch (InterruptedException e) {\r
+                \r
+            }\r
+            \r
+        }\r
+        \r
+        private class PcdSyncSubTask extends Thread {\r
+            \r
+            private int startModule = 0;\r
+            private int endModulePlusOne = 1;\r
+            private Vector<String> v = null;\r
+\r
+            PcdSyncSubTask (int start, int endPlusOne, Vector<String> vErr) {\r
+                startModule = start;\r
+                endModulePlusOne = endPlusOne;\r
+                v = vErr;\r
+            }\r
+            \r
+            public void run () {\r
+                String[] sa = new String[5];\r
+                for (int i = startModule; i < endModulePlusOne; ++i) {\r
+                    try {\r
+                        ffc.getFrameworkModuleInfo(i, sa);\r
+                        String mg = sa[ffcModGuid];\r
+                        String mv = sa[ffcModVer];\r
+                        String pg = sa[ffcPkgGuid];\r
+                        String pv = sa[ffcPkgVer];\r
+                        String arch = sa[ffcModArch];\r
+                        String key = mg + " " + mv + " " + pg + " " + pv + " " + arch;\r
+                        if (ffc.adjustPcd(key, v)) {\r
+                            pcdSynced = true;\r
+                        }\r
+                    }\r
+                    catch (Exception exp) {\r
+//                        JOptionPane.showMessageDialog(frame, exp.getMessage());\r
+                        continue;\r
+                    }\r
+                }\r
+            }\r
+        }\r
     }\r
 \r
     /**\r
@@ -937,31 +1005,6 @@ public class FpdFrameworkModules extends IInternalFrame {
         \r
     }\r
 \r
-    private boolean pcdSync(Vector<String> v) {\r
-        boolean synced = false;\r
-        String[] sa = new String[5];\r
-        for (int i = 0; i < jTableFpdModules.getRowCount(); ++i) {\r
-            try {\r
-                ffc.getFrameworkModuleInfo(i, sa);\r
-                String mg = sa[ffcModGuid];\r
-                String mv = sa[ffcModVer];\r
-                String pg = sa[ffcPkgGuid];\r
-                String pv = sa[ffcPkgVer];\r
-                String arch = sa[ffcModArch];\r
-                String key = mg + " " + mv + " " + pg + " " + pv + " " + arch;\r
-                if (ffc.adjustPcd(key, v)) {\r
-                    synced = true;\r
-                }\r
-            }\r
-            catch (Exception exp) {\r
-//                JOptionPane.showMessageDialog(frame, exp.getMessage());\r
-                continue;\r
-            }\r
-        }\r
-        return synced;\r
-        \r
-    }\r
-    \r
     private void showAllModules() {\r
 \r
         if (miList == null) {\r