]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils.thread/src/org/simantics/utils/threads/logger/ThreadLogVisualizer.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.utils.thread / src / org / simantics / utils / threads / logger / ThreadLogVisualizer.java
index 04c7732e80f7e3df878bd7889605f9da36b7717e..53d1a029d439617258d0d93c2265542325d8a14f 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.utils.threads.logger;\r
-\r
-import java.io.DataInput;\r
-import java.io.DataInputStream;\r
-import java.io.EOFException;\r
-import java.io.FileInputStream;\r
-import java.io.FileNotFoundException;\r
-import java.io.IOException;\r
-import java.io.PrintStream;\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.Locale;\r
-import java.util.Map;\r
-\r
-public class ThreadLogVisualizer {\r
-       \r
-    // Do not show tasks shorter than 5ms\r
-    final public static long DISCARD_LIMIT = 0;\r
-    // 1s columns\r
-    final public static long COLUMN_WIDTH = 1000000000;\r
-    \r
-       class Task implements Comparable<Task> {\r
-               String name;\r
-               long beginTime;\r
-               long endTime;\r
-               long threadId;\r
-               \r
-               public Task(String name, long threadId, long beginTime, long endTime) {\r
-                       this.name = name;\r
-                       this.threadId = threadId;\r
-                       this.beginTime = beginTime;\r
-                       this.endTime = endTime;\r
-               }\r
-\r
-               @Override\r
-               // Differences will not fit into int\r
-               public int compareTo(Task o) {\r
-            if(beginTime > o.beginTime) return 1;\r
-            else if(beginTime == o.beginTime) return -1;\r
-                   else return -1;\r
-               }               \r
-       }\r
-       \r
-       ArrayList<Task> tasks = new ArrayList<Task>();\r
-       \r
-       public void read(DataInput input) {\r
-               try {\r
-                       while(true) {\r
-                               try {\r
-                    String taskName = input.readUTF();\r
-                                       long threadId = input.readLong();\r
-                                       long beginTime = input.readLong();\r
-                                       long endTime = input.readLong();\r
-                                       if((endTime-beginTime) > DISCARD_LIMIT)\r
-                                           tasks.add(new Task(taskName, threadId, beginTime, endTime));\r
-                               } catch(EOFException e) {       \r
-                                       break;\r
-                               }\r
-                       }               \r
-               } catch(IOException e) {                        \r
-               }\r
-               \r
-               Collections.sort(tasks);\r
-       }\r
-       \r
-       class Lane {\r
-               ArrayList<Task> tasks = new ArrayList<Task>();\r
-               long nextTime = 0;\r
-       }\r
-       \r
-    public void visualize3(PrintStream s) {\r
-        \r
-        long minTime = Long.MAX_VALUE;\r
-        long maxTime = Long.MIN_VALUE;\r
-        \r
-        ArrayList<Lane> lanes = new ArrayList<Lane>();\r
-        \r
-        int laneId = 0;\r
-        for(Task task : tasks) {\r
-\r
-            Lane lane;\r
-            \r
-            minTime = Math.min(minTime, task.beginTime);\r
-            maxTime = Math.max(maxTime, task.endTime);\r
-            \r
-            for(int seek = laneId-1; seek >= 0; --seek) {\r
-                if(lanes.get(seek).nextTime < task.beginTime) {\r
-                    laneId = seek;\r
-                } else {\r
-                    break;\r
-                }\r
-            }\r
-\r
-            if(laneId < lanes.size())\r
-                lane = lanes.get(laneId);\r
-            else {\r
-                lane = new Lane();\r
-                lanes.add(lane);\r
-            }\r
-            \r
-            lane.tasks.add(task);\r
-            lane.nextTime = Math.max(task.endTime, task.beginTime+COLUMN_WIDTH);\r
-            System.out.println(task.name + " -> " + laneId + "[" + task.beginTime + "-" + task.endTime + "]");\r
-            \r
-            laneId++;\r
-            \r
-        }\r
-        \r
-        double timeScale = 1e-6;\r
-        double rowHeight = 30.0;\r
-        Locale locale = Locale.US;\r
-        int row = lanes.size();\r
-        \r
-        s.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");\r
-        s.println("<svg xmlns=\"http://www.w3.org/2000/svg\" overflow=\"visible\" version=\"1.1\">");\r
-        for(long time = minTime ; time < maxTime ; time += 1000000000) {\r
-            s.printf(locale,\r
-                    "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"grey\"/>\n",\r
-                    (time-minTime)*timeScale,\r
-                    0.0,\r
-                    (time-minTime)*timeScale,\r
-                    row*rowHeight);\r
-        }       \r
-        for(int r = 0;r<lanes.size();++r) {\r
-            Lane lane = lanes.get(r);\r
-            for(Task task : lane.tasks) {\r
-                s.printf(locale,\r
-                        "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\"/>\n",\r
-                        (task.beginTime-minTime)*timeScale,\r
-                        r*rowHeight,\r
-                        (task.beginTime-minTime)*timeScale,\r
-                        (r+1)*rowHeight);\r
-                s.printf(locale,\r
-                        "<rect x=\"%f\" y=\"%f\" width=\"%f\" height=\"%f\" fill=\"green\"/>\n",\r
-                        (task.beginTime-minTime)*timeScale,\r
-                        r*rowHeight,\r
-                        (task.endTime-task.beginTime)*timeScale,\r
-                        rowHeight);\r
-            }\r
-            for(Task task : lane.tasks) {\r
-                s.printf(locale,\r
-                        "<text x=\"%f\" y=\"%f\">%s</text>\n",\r
-                        (task.endTime-minTime)*timeScale,\r
-                        (r+0.8)*rowHeight,\r
-                        task.name);\r
-            }\r
-        }   \r
-        s.println("</svg>");\r
-    }\r
-\r
-       public void visualize2(PrintStream s) {\r
-               long minTime = Long.MAX_VALUE;\r
-               long maxTime = Long.MIN_VALUE;\r
-               ArrayList<Lane> lanes = new ArrayList<Lane>();\r
-               \r
-               for(Task task : tasks) {\r
-                       minTime = Math.min(minTime, task.beginTime);\r
-                       maxTime = Math.max(maxTime, task.endTime);\r
-                       int laneId;\r
-                       for(laneId=0;laneId<lanes.size();++laneId)\r
-                               if(lanes.get(laneId).nextTime < task.beginTime) \r
-                                       break;\r
-                       Lane lane;\r
-                       if(laneId < lanes.size())\r
-                               lane = lanes.get(laneId);\r
-                       else {\r
-                               lane = new Lane();\r
-                               lanes.add(lane);\r
-                       }\r
-                       lane.tasks.add(task);\r
-                       lane.nextTime = Math.max(task.endTime, task.beginTime+COLUMN_WIDTH);\r
-                       System.out.println(task.name + " -> " + laneId + "[" + task.beginTime + "-" + task.endTime + "]");\r
-               }\r
-               \r
-               double timeScale = 1e-7*5;\r
-               double rowHeight = 30.0;\r
-               Locale locale = Locale.US;\r
-               int row = lanes.size();\r
-               \r
-               s.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");\r
-               s.println("<svg xmlns=\"http://www.w3.org/2000/svg\" overflow=\"visible\" version=\"1.1\">");\r
-               for(long time = minTime ; time < maxTime ; time += 1000000000) {\r
-                       s.printf(locale,\r
-                                       "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"grey\"/>\n",\r
-                                       (time-minTime)*timeScale,\r
-                                       0.0,\r
-                                       (time-minTime)*timeScale,\r
-                                       row*rowHeight);\r
-               }               \r
-               for(int r = 0;r<lanes.size();++r) {\r
-                       Lane lane = lanes.get(r);\r
-                       for(Task task : lane.tasks) {\r
-                               s.printf(locale,\r
-                                               "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\"/>\n",\r
-                                               (task.beginTime-minTime)*timeScale,\r
-                                               r*rowHeight,\r
-                                               (task.beginTime-minTime)*timeScale,\r
-                                               (r+1)*rowHeight);\r
-                               s.printf(locale,\r
-                                               "<rect x=\"%f\" y=\"%f\" width=\"%f\" height=\"%f\" fill=\"green\"/>\n",\r
-                                               (task.beginTime-minTime)*timeScale,\r
-                                               r*rowHeight,\r
-                                               (task.endTime-task.beginTime)*timeScale,\r
-                                               rowHeight);\r
-                       }\r
-                       for(Task task : lane.tasks) {\r
-                               s.printf(locale,\r
-                                               "<text x=\"%f\" y=\"%f\">%s</text>\n",\r
-                                               (task.endTime-minTime)*timeScale,\r
-                                               (r+0.8)*rowHeight,\r
-                                               task.name);\r
-                       }\r
-               }       \r
-               s.println("</svg>");\r
-       }\r
-       \r
-       public void visualize(PrintStream s) {\r
-               long minTime = Long.MAX_VALUE;\r
-               long maxTime = Long.MIN_VALUE;\r
-               Map<Long, Integer> threads = new HashMap<Long, Integer>();              \r
-               int row = 0;\r
-               \r
-               for(Task task : tasks) {\r
-                       minTime = Math.min(minTime, task.beginTime);\r
-                       maxTime = Math.max(maxTime, task.endTime);\r
-                       if(!threads.containsKey(task.threadId))\r
-                               threads.put(task.threadId, row++);\r
-               }\r
-               \r
-               double timeScale = 1e-7*0.8;\r
-               double rowHeight = 60.0;\r
-               Locale locale = Locale.US;\r
-               int textPos[] = new int[row];\r
-               \r
-               s.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");\r
-               s.println("<svg xmlns=\"http://www.w3.org/2000/svg\" overflow=\"visible\" version=\"1.1\">");\r
-               for(long time = minTime ; time < maxTime ; time += 1000000000) {\r
-                       s.printf(locale,\r
-                                       "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"grey\"/>\n",\r
-                                       (time-minTime)*timeScale,\r
-                                       0.0,\r
-                                       (time-minTime)*timeScale,\r
-                                       row*rowHeight);\r
-               }               \r
-               for(Task task : tasks) {\r
-                       int r = threads.get(task.threadId);\r
-                       s.printf(locale,\r
-                                       "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\"/>\n",\r
-                                       (task.beginTime-minTime)*timeScale,\r
-                                       r*rowHeight,\r
-                                       (task.beginTime-minTime)*timeScale,\r
-                                       (r+1)*rowHeight);\r
-                       s.printf(locale,\r
-                                       "<rect x=\"%f\" y=\"%f\" width=\"%f\" height=\"%f\" fill=\"green\"/>\n",\r
-                                       (task.beginTime-minTime)*timeScale,\r
-                                       r*rowHeight,\r
-                                       (task.endTime-task.beginTime)*timeScale,\r
-                                       rowHeight);\r
-               }\r
-               for(Task task : tasks) {\r
-                       int r = threads.get(task.threadId);\r
-                       s.printf(locale,\r
-                                       "<text x=\"%f\" y=\"%f\">%s</text>\n",\r
-                                       (task.endTime-minTime)*timeScale,\r
-                                       (r*3+(textPos[r]++)%2+0.5)*rowHeight/3,\r
-                                       task.name);\r
-               }\r
-               s.println("</svg>");\r
-       }\r
-       \r
-       public static void main(String[] args) {\r
-               try {\r
-                       ThreadLogVisualizer visualizer = new ThreadLogVisualizer();\r
-                       visualizer.read(new DataInputStream(new FileInputStream(ThreadLogger.LOG_FILE)));\r
-                       visualizer.visualize3(new PrintStream(ThreadLogger.LOG_FILE + ".svg"));\r
-               } catch (FileNotFoundException e) {\r
-                       // TODO Auto-generated catch block\r
-                       e.printStackTrace();\r
-               }\r
-       }\r
-       \r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.utils.threads.logger;
+
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+public class ThreadLogVisualizer {
+       
+    // Do not show tasks shorter than 5ms
+    final public static long DISCARD_LIMIT = 0;
+    // 1s columns
+    final public static long COLUMN_WIDTH = 1000000000;
+    
+       class Task implements Comparable<Task> {
+               String name;
+               long beginTime;
+               long endTime;
+               long threadId;
+               
+               public Task(String name, long threadId, long beginTime, long endTime) {
+                       this.name = name;
+                       this.threadId = threadId;
+                       this.beginTime = beginTime;
+                       this.endTime = endTime;
+               }
+
+               @Override
+               // Differences will not fit into int
+               public int compareTo(Task o) {
+            if(beginTime > o.beginTime) return 1;
+            else if(beginTime == o.beginTime) return -1;
+                   else return -1;
+               }               
+       }
+       
+       ArrayList<Task> tasks = new ArrayList<Task>();
+       
+       public void read(DataInput input) {
+               try {
+                       while(true) {
+                               try {
+                    String taskName = input.readUTF();
+                                       long threadId = input.readLong();
+                                       long beginTime = input.readLong();
+                                       long endTime = input.readLong();
+                                       if((endTime-beginTime) > DISCARD_LIMIT)
+                                           tasks.add(new Task(taskName, threadId, beginTime, endTime));
+                               } catch(EOFException e) {       
+                                       break;
+                               }
+                       }               
+               } catch(IOException e) {                        
+               }
+               
+               Collections.sort(tasks);
+       }
+       
+       class Lane {
+               ArrayList<Task> tasks = new ArrayList<Task>();
+               long nextTime = 0;
+       }
+       
+    public void visualize3(PrintStream s) {
+        
+        long minTime = Long.MAX_VALUE;
+        long maxTime = Long.MIN_VALUE;
+        
+        ArrayList<Lane> lanes = new ArrayList<Lane>();
+        
+        int laneId = 0;
+        for(Task task : tasks) {
+
+            Lane lane;
+            
+            minTime = Math.min(minTime, task.beginTime);
+            maxTime = Math.max(maxTime, task.endTime);
+            
+            for(int seek = laneId-1; seek >= 0; --seek) {
+                if(lanes.get(seek).nextTime < task.beginTime) {
+                    laneId = seek;
+                } else {
+                    break;
+                }
+            }
+
+            if(laneId < lanes.size())
+                lane = lanes.get(laneId);
+            else {
+                lane = new Lane();
+                lanes.add(lane);
+            }
+            
+            lane.tasks.add(task);
+            lane.nextTime = Math.max(task.endTime, task.beginTime+COLUMN_WIDTH);
+            System.out.println(task.name + " -> " + laneId + "[" + task.beginTime + "-" + task.endTime + "]");
+            
+            laneId++;
+            
+        }
+        
+        double timeScale = 1e-6;
+        double rowHeight = 30.0;
+        Locale locale = Locale.US;
+        int row = lanes.size();
+        
+        s.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
+        s.println("<svg xmlns=\"http://www.w3.org/2000/svg\" overflow=\"visible\" version=\"1.1\">");
+        for(long time = minTime ; time < maxTime ; time += 1000000000) {
+            s.printf(locale,
+                    "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"grey\"/>\n",
+                    (time-minTime)*timeScale,
+                    0.0,
+                    (time-minTime)*timeScale,
+                    row*rowHeight);
+        }       
+        for(int r = 0;r<lanes.size();++r) {
+            Lane lane = lanes.get(r);
+            for(Task task : lane.tasks) {
+                s.printf(locale,
+                        "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\"/>\n",
+                        (task.beginTime-minTime)*timeScale,
+                        r*rowHeight,
+                        (task.beginTime-minTime)*timeScale,
+                        (r+1)*rowHeight);
+                s.printf(locale,
+                        "<rect x=\"%f\" y=\"%f\" width=\"%f\" height=\"%f\" fill=\"green\"/>\n",
+                        (task.beginTime-minTime)*timeScale,
+                        r*rowHeight,
+                        (task.endTime-task.beginTime)*timeScale,
+                        rowHeight);
+            }
+            for(Task task : lane.tasks) {
+                s.printf(locale,
+                        "<text x=\"%f\" y=\"%f\">%s</text>\n",
+                        (task.endTime-minTime)*timeScale,
+                        (r+0.8)*rowHeight,
+                        task.name);
+            }
+        }   
+        s.println("</svg>");
+    }
+
+       public void visualize2(PrintStream s) {
+               long minTime = Long.MAX_VALUE;
+               long maxTime = Long.MIN_VALUE;
+               ArrayList<Lane> lanes = new ArrayList<Lane>();
+               
+               for(Task task : tasks) {
+                       minTime = Math.min(minTime, task.beginTime);
+                       maxTime = Math.max(maxTime, task.endTime);
+                       int laneId;
+                       for(laneId=0;laneId<lanes.size();++laneId)
+                               if(lanes.get(laneId).nextTime < task.beginTime) 
+                                       break;
+                       Lane lane;
+                       if(laneId < lanes.size())
+                               lane = lanes.get(laneId);
+                       else {
+                               lane = new Lane();
+                               lanes.add(lane);
+                       }
+                       lane.tasks.add(task);
+                       lane.nextTime = Math.max(task.endTime, task.beginTime+COLUMN_WIDTH);
+                       System.out.println(task.name + " -> " + laneId + "[" + task.beginTime + "-" + task.endTime + "]");
+               }
+               
+               double timeScale = 1e-7*5;
+               double rowHeight = 30.0;
+               Locale locale = Locale.US;
+               int row = lanes.size();
+               
+               s.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
+               s.println("<svg xmlns=\"http://www.w3.org/2000/svg\" overflow=\"visible\" version=\"1.1\">");
+               for(long time = minTime ; time < maxTime ; time += 1000000000) {
+                       s.printf(locale,
+                                       "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"grey\"/>\n",
+                                       (time-minTime)*timeScale,
+                                       0.0,
+                                       (time-minTime)*timeScale,
+                                       row*rowHeight);
+               }               
+               for(int r = 0;r<lanes.size();++r) {
+                       Lane lane = lanes.get(r);
+                       for(Task task : lane.tasks) {
+                               s.printf(locale,
+                                               "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\"/>\n",
+                                               (task.beginTime-minTime)*timeScale,
+                                               r*rowHeight,
+                                               (task.beginTime-minTime)*timeScale,
+                                               (r+1)*rowHeight);
+                               s.printf(locale,
+                                               "<rect x=\"%f\" y=\"%f\" width=\"%f\" height=\"%f\" fill=\"green\"/>\n",
+                                               (task.beginTime-minTime)*timeScale,
+                                               r*rowHeight,
+                                               (task.endTime-task.beginTime)*timeScale,
+                                               rowHeight);
+                       }
+                       for(Task task : lane.tasks) {
+                               s.printf(locale,
+                                               "<text x=\"%f\" y=\"%f\">%s</text>\n",
+                                               (task.endTime-minTime)*timeScale,
+                                               (r+0.8)*rowHeight,
+                                               task.name);
+                       }
+               }       
+               s.println("</svg>");
+       }
+       
+       public void visualize(PrintStream s) {
+               long minTime = Long.MAX_VALUE;
+               long maxTime = Long.MIN_VALUE;
+               Map<Long, Integer> threads = new HashMap<Long, Integer>();              
+               int row = 0;
+               
+               for(Task task : tasks) {
+                       minTime = Math.min(minTime, task.beginTime);
+                       maxTime = Math.max(maxTime, task.endTime);
+                       if(!threads.containsKey(task.threadId))
+                               threads.put(task.threadId, row++);
+               }
+               
+               double timeScale = 1e-7*0.8;
+               double rowHeight = 60.0;
+               Locale locale = Locale.US;
+               int textPos[] = new int[row];
+               
+               s.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
+               s.println("<svg xmlns=\"http://www.w3.org/2000/svg\" overflow=\"visible\" version=\"1.1\">");
+               for(long time = minTime ; time < maxTime ; time += 1000000000) {
+                       s.printf(locale,
+                                       "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"grey\"/>\n",
+                                       (time-minTime)*timeScale,
+                                       0.0,
+                                       (time-minTime)*timeScale,
+                                       row*rowHeight);
+               }               
+               for(Task task : tasks) {
+                       int r = threads.get(task.threadId);
+                       s.printf(locale,
+                                       "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\"/>\n",
+                                       (task.beginTime-minTime)*timeScale,
+                                       r*rowHeight,
+                                       (task.beginTime-minTime)*timeScale,
+                                       (r+1)*rowHeight);
+                       s.printf(locale,
+                                       "<rect x=\"%f\" y=\"%f\" width=\"%f\" height=\"%f\" fill=\"green\"/>\n",
+                                       (task.beginTime-minTime)*timeScale,
+                                       r*rowHeight,
+                                       (task.endTime-task.beginTime)*timeScale,
+                                       rowHeight);
+               }
+               for(Task task : tasks) {
+                       int r = threads.get(task.threadId);
+                       s.printf(locale,
+                                       "<text x=\"%f\" y=\"%f\">%s</text>\n",
+                                       (task.endTime-minTime)*timeScale,
+                                       (r*3+(textPos[r]++)%2+0.5)*rowHeight/3,
+                                       task.name);
+               }
+               s.println("</svg>");
+       }
+       
+       public static void main(String[] args) {
+               try {
+                       ThreadLogVisualizer visualizer = new ThreadLogVisualizer();
+                       visualizer.read(new DataInputStream(new FileInputStream(ThreadLogger.LOG_FILE)));
+                       visualizer.visualize3(new PrintStream(ThreadLogger.LOG_FILE + ".svg"));
+               } catch (FileNotFoundException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+       }
+       
+}