68 |
68 |
69 label_description = new QLabel(); |
69 label_description = new QLabel(); |
70 label_description->setText(QLabel::tr("Description")); |
70 label_description->setText(QLabel::tr("Description")); |
71 pageLayout->addWidget(label_description, 0, Qt::AlignHCenter); |
71 pageLayout->addWidget(label_description, 0, Qt::AlignHCenter); |
72 description = new QTextBrowser(); |
72 description = new QTextBrowser(); |
|
73 |
|
74 // Gather some information about the system and embed it into the report |
73 QDesktopWidget* screen = QApplication::desktop(); |
75 QDesktopWidget* screen = QApplication::desktop(); |
74 QString os_version = "Operating system: "; |
76 QString os_version = "Operating system: "; |
75 QString qt_version = QString("Qt version: ") + QT_VERSION_STR + QString("\n"); |
77 QString qt_version = QString("Qt version: ") + QT_VERSION_STR + QString("\n"); |
76 QString total_ram = "Total RAM: unknown\n"; |
78 QString total_ram = "Total RAM: "; |
77 QString available_ram = "Available RAM: unknown\n"; |
79 QString available_ram = "Available RAM: "; |
78 QString number_of_cores = "Number of cores: unknown"; |
80 QString number_of_cores = "Number of cores: "; |
|
81 QString compiler_bits = "Compiler architecture: "; |
|
82 QString compiler_version = "Compiler version: "; |
|
83 QString kernel_line = "Kernel: "; |
79 QString screen_size = "Size of the screen(s): " + |
84 QString screen_size = "Size of the screen(s): " + |
80 QString::number(screen->width()) + "x" + QString::number(screen->height()) + "\n"; |
85 QString::number(screen->width()) + "x" + QString::number(screen->height()) + "\n"; |
81 QString number_of_screens = "Number of screens: " + |
86 QString number_of_screens = "Number of screens: " + QString::number(screen->screenCount()) + "\n"; |
82 QString::number(screen->screenCount()) + "\n"; |
87 std::string processor_name = "Processor: "; |
|
88 |
|
89 // platform specific code |
83 #ifdef Q_WS_MACX |
90 #ifdef Q_WS_MACX |
84 number_of_cores = "Number of cores: " + |
91 number_of_cores += QString::number(sysconf(_SC_NPROCESSORS_ONLN)) + "\n"; |
85 QString::number(sysconf(_SC_NPROCESSORS_ONLN)); |
|
86 |
92 |
87 uint64_t memsize, memavail; |
93 uint64_t memsize, memavail; |
88 size_t len = sizeof(memsize); |
94 size_t len = sizeof(memsize); |
89 static int mib_s[2] = { CTL_HW, HW_MEMSIZE }; |
95 static int mib_s[2] = { CTL_HW, HW_MEMSIZE }; |
90 static int mib_a[2] = { CTL_HW, HW_USERMEM }; |
96 static int mib_a[2] = { CTL_HW, HW_USERMEM }; |
91 if (sysctl (mib_s, 2, &memsize, &len, NULL, 0) == 0) |
97 if (sysctl (mib_s, 2, &memsize, &len, NULL, 0) == 0) |
92 total_ram = "Total RAM: " + QString::number(memsize/1024/1024) + " MB\n"; |
98 total_ram += QString::number(memsize/1024/1024) + " MB\n"; |
93 else |
99 else |
94 total_ram = "Error getting total RAM information\n"; |
100 total_ram += "Error getting total RAM information\n"; |
95 if (sysctl (mib_a, 2, &memavail, &len, NULL, 0) == 0) |
101 if (sysctl (mib_a, 2, &memavail, &len, NULL, 0) == 0) |
96 available_ram = "Available RAM: " + QString::number(memavail/1024/1024) + " MB\n"; |
102 available_ram += QString::number(memavail/1024/1024) + " MB\n"; |
97 else |
103 else |
98 available_ram = "Error getting available RAM information\n"; |
104 available_ram += "Error getting available RAM information\n"; |
99 |
105 |
100 int mib[] = {CTL_KERN, KERN_OSRELEASE}; |
106 int mib[] = {CTL_KERN, KERN_OSRELEASE}; |
101 sysctl(mib, sizeof mib / sizeof(int), NULL, &len, NULL, 0); |
107 sysctl(mib, sizeof mib / sizeof(int), NULL, &len, NULL, 0); |
102 |
108 |
103 char *kernelVersion = (char *)malloc(sizeof(char)*len); |
109 char *kernelVersion = (char *)malloc(sizeof(char)*len); |
104 sysctl(mib, sizeof mib / sizeof(int), kernelVersion, &len, NULL, 0); |
110 sysctl(mib, sizeof mib / sizeof(int), kernelVersion, &len, NULL, 0); |
120 } |
126 } |
121 #endif |
127 #endif |
122 #ifdef Q_WS_WIN |
128 #ifdef Q_WS_WIN |
123 SYSTEM_INFO sysinfo; |
129 SYSTEM_INFO sysinfo; |
124 GetSystemInfo(&sysinfo); |
130 GetSystemInfo(&sysinfo); |
125 number_of_cores = "Number of cores: " + QString::number(sysinfo.dwNumberOfProcessors) + "\n"; |
131 number_of_cores += QString::number(sysinfo.dwNumberOfProcessors) + "\n"; |
126 MEMORYSTATUSEX status; |
132 MEMORYSTATUSEX status; |
127 status.dwLength = sizeof(status); |
133 status.dwLength = sizeof(status); |
128 GlobalMemoryStatusEx(&status); |
134 GlobalMemoryStatusEx(&status); |
129 total_ram = QString::number(status.ullTotalPhys); |
135 total_ram = QString::number(status.ullTotalPhys); |
130 |
136 |
131 switch(QSysInfo::WinVersion()) |
137 switch(QSysInfo::WinVersion()) |
132 { |
138 { |
133 case QSysInfo::WV_2000: |
139 case QSysInfo::WV_2000: os_version += "Windows 2000\n"; break; |
134 os_version += "Windows 2000\n"; |
140 case QSysInfo::WV_XP: os_version += "Windows XP\n"; break; |
135 break; |
141 case QSysInfo::WV_VISTA: os_version += "Windows Vista\n"; break; |
136 case QSysInfo::WV_XP: |
142 case QSysInfo::WV_WINDOWS7: os_version += "Windows 7\n"; break; |
137 os_version += "Windows XP\n"; |
143 default: os_version += "Windows (Unknown version)\n"; break; |
138 break; |
|
139 case QSysInfo::WV_VISTA: |
|
140 os_version += "Windows Vista\n"; |
|
141 break; |
|
142 case QSysInfo::WV_WINDOWS7: |
|
143 os_version += "Windows 7\n"; |
|
144 break; |
|
145 default: |
|
146 os_version += "Windows\n"; |
|
147 } |
144 } |
|
145 kernel_line += "Windows kernel\n"; |
148 #endif |
146 #endif |
149 #ifdef Q_WS_X11 |
147 #ifdef Q_WS_X11 |
150 number_of_cores = "Number of cores: " + QString::number(sysconf(_SC_NPROCESSORS_ONLN)) + "\n"; |
148 number_of_cores += QString::number(sysconf(_SC_NPROCESSORS_ONLN)) + "\n"; |
151 long pages = sysconf(_SC_PHYS_PAGES), |
149 long pages = sysconf(_SC_PHYS_PAGES), |
152 available_pages = sysconf(_SC_AVPHYS_PAGES), |
150 available_pages = sysconf(_SC_AVPHYS_PAGES), |
153 page_size = sysconf(_SC_PAGE_SIZE); |
151 page_size = sysconf(_SC_PAGE_SIZE); |
154 total_ram = "Total RAM: " + QString::number(pages * page_size) + "\n"; |
152 total_ram += QString::number(pages * page_size) + "\n"; |
155 available_ram = "Available RAM: " + QString::number(available_pages * page_size) + "\n"; |
153 available_ram += QString::number(available_pages * page_size) + "\n"; |
156 os_version += "Linux\n"; |
154 os_version += "GNU/Linux or BSD\n"; |
157 #endif |
155 #endif |
158 |
156 |
159 /* Get the processor's type string using the CPUID instruction. */ |
157 // uname -a |
160 std::string processor_name = "Processor: "; |
158 #if defined(Q_WS_X11) || defined(Q_WS_MACX) |
|
159 QProcess *process = new QProcess(); |
|
160 QStringList arguments = QStringList("-a"); |
|
161 process->start("uname", arguments); |
|
162 if (process->waitForFinished()) |
|
163 kernel_line += QString(process->readAll()); |
|
164 delete process; |
|
165 #endif |
|
166 |
|
167 // cpu info |
161 uint32_t registers[4]; |
168 uint32_t registers[4]; |
162 unsigned i; |
169 uint32_t i; |
163 |
170 |
164 i = 0x80000002; |
171 i = 0x80000002; |
165 asm volatile |
172 asm volatile |
166 ("cpuid" : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) |
173 ("cpuid" : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) |
167 : "a" (i), "c" (0)); |
174 : "a" (i), "c" (0)); |
183 : "a" (i), "c" (0)); |
190 : "a" (i), "c" (0)); |
184 processor_name += std::string((const char *)®isters[0], 4); |
191 processor_name += std::string((const char *)®isters[0], 4); |
185 processor_name += std::string((const char *)®isters[1], 4); |
192 processor_name += std::string((const char *)®isters[1], 4); |
186 processor_name += std::string((const char *)®isters[2], 4); |
193 processor_name += std::string((const char *)®isters[2], 4); |
187 processor_name += std::string((const char *)®isters[3], 3); |
194 processor_name += std::string((const char *)®isters[3], 3); |
188 |
195 |
189 QString processor_bits = "Number of bits: unknown"; |
196 // compiler |
190 |
197 #ifdef __GNUC__ |
|
198 compiler_version += "GCC " + QString(__VERSION__) + "\n"; |
|
199 #else |
|
200 compiler_version += "Unknown\n"; |
|
201 #endif |
|
202 |
191 if(sizeof(void*) == 4) |
203 if(sizeof(void*) == 4) |
192 processor_bits = "Number of bits: 32 (probably)"; |
204 compiler_bits += "i386\n"; |
193 else |
205 else if(sizeof(void*) == 8) |
194 if(sizeof(void*) == 8) |
206 compiler_bits += "x86_64\n"; |
195 processor_bits = "Number of bits: 64 (probably)"; |
207 |
196 |
208 // add everything to the field of text |
197 description->setText( |
209 description->setText( |
198 "\n\n\n" |
210 "\n\n\n\n\n" |
199 "System information:\n" |
211 "System information:\n" |
200 + qt_version |
212 + qt_version |
201 + os_version |
213 + os_version |
202 + total_ram |
214 + total_ram |
203 + available_ram |
215 + available_ram |
204 + screen_size |
216 + screen_size |
205 + number_of_screens |
217 + number_of_screens |
|
218 + QString::fromStdString(processor_name + "\n") |
206 + number_of_cores |
219 + number_of_cores |
207 + QString::fromStdString(processor_name + "\n") |
220 + compiler_version |
208 + processor_bits |
221 + compiler_bits |
|
222 + kernel_line |
209 ); |
223 ); |
210 description->setReadOnly(false); |
224 description->setReadOnly(false); |
211 pageLayout->addWidget(description); |
225 pageLayout->addWidget(description); |
212 |
226 |
213 return pageLayout; |
227 return pageLayout; |