Create more threads to synchronize pcd data for FrameworkModules in a platform.
authorjlin16 <jlin16@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 20 Mar 2007 06:02:06 +0000 (06:02 +0000)
committerjlin16 <jlin16@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 20 Mar 2007 06:02:06 +0000 (06:02 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2489 6f19259b-4bc3-4df7-8a09-765794883524

Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java
Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java

index 4bca7fe..c5f854a 100644 (file)
@@ -494,7 +494,7 @@ public class FpdFileContents {
         return dataModified;\r
     }\r
     \r
-    private void maintainDynPcdMap(String pcdKey, String moduleInfo) {\r
+    private synchronized void maintainDynPcdMap(String pcdKey, String moduleInfo) {\r
         \r
         ArrayList<String> al = dynPcdMap.get(pcdKey);\r
         if (al == null) {\r
@@ -1318,7 +1318,7 @@ public class FpdFileContents {
         return choosedType;\r
     }\r
     \r
-    private void genPcdData (String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal, \r
+    private synchronized void genPcdData (String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal, \r
                              ModuleSADocument.ModuleSA moduleSa, PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd) \r
     throws PcdItemTypeConflictException, PcdValueMalFormed{\r
         if (moduleSa.getPcdBuildDefinition() == null){\r
index 902c12a..b8eb8c6 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