Jogamp
af7e30c4c026026e52ebc06d9d6ebce0b4f8065e
[jocl-demos.git] / src / com / jogamp / opencl / demos / info / CLInfo.java
1 /*
2  * Created on Tuesday, September 07 2010 21:33
3  */
4
5 package com.jogamp.opencl.demos.info;
6
7 import com.jogamp.opencl.CLDevice;
8 import com.jogamp.opencl.CLPlatform;
9 import java.awt.Container;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.Map;
13 import javax.swing.JEditorPane;
14 import javax.swing.JFrame;
15 import javax.swing.JScrollPane;
16
17 /**
18  *
19  * @author Michael Bien
20  */
21 public class CLInfo {
22
23     public static void main(String[] args) {
24
25         JFrame frame = new JFrame("OpenCL Info");
26         frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
27         Container contentPane = frame.getContentPane();
28
29         JEditorPane area = new JEditorPane();
30         area.setContentType("text/html");
31         area.setEditable(false);
32
33         contentPane.add(new JScrollPane(area));
34
35         String html = createOpenCLInfoHTML();
36
37         area.setText(html.toString());
38
39         frame.setSize(800, 600);
40         frame.setVisible(true);
41
42     }
43
44     private static String createOpenCLInfoHTML() {
45
46         StringBuilder html = new StringBuilder();
47
48         html.append("<table border=\"1\">");
49         CLPlatform[] platforms = CLPlatform.listCLPlatforms();
50
51         // platforms
52         List<Map<String, String>> platProps = new ArrayList<Map<String, String>>();
53         List<Integer> spans = new ArrayList<Integer>();
54         for (CLPlatform p : platforms) {
55             platProps.add(p.getProperties());
56             spans.add(p.listCLDevices().length);
57         }
58         fillTable(platProps, spans, html);
59
60         // devices
61         ArrayList<Map<String, String>> devProps = new ArrayList<Map<String, String>>();
62         for (CLPlatform p : platforms) {
63             CLDevice[] devices = p.listCLDevices();
64             for (CLDevice d : devices) {
65                 devProps.add(d.getProperties());
66             }
67         }
68         fillTable(devProps, html);
69         html.append("</table>");
70
71         return html.toString();
72     }
73
74     private static void fillTable(List<Map<String, String>> properties, StringBuilder sb) {
75         ArrayList<Integer> spans = new ArrayList<Integer>(properties.size());
76         for (int i = 0; i < properties.size(); i++) {
77             spans.add(1);
78         }
79         fillTable(properties, spans, sb);
80     }
81
82     private static void fillTable(List<Map<String, String>> properties, List<Integer> spans, StringBuilder sb) {
83         boolean header = true;
84         for (String key : properties.get(0).keySet()) {
85             sb.append("<tr>");
86                 cell(sb, key);
87                 int i = 0;
88                 for (Map<String, String> map : properties) {
89                     cell(sb, spans.get(i), map.get(key), header);
90                     i++;
91                 }
92             sb.append("</tr>");
93             header = false;
94         }
95     }
96
97     private static void cell(StringBuilder sb, String value) {
98         sb.append("<td>").append(value).append("</td>");
99     }
100
101     private static void cell(StringBuilder sb, int span, String value, boolean header) {
102         if(header) {
103             sb.append("<th colspan=\"").append(span).append("\">").append(value).append("</th>");
104         }else{
105             sb.append("<td colspan=\"").append(span).append("\">").append(value).append("</td>");
106         }
107     }
108 }
http://JogAmp.org git info: FAQ, tutorial and man pages.