# HG changeset patch # User koda # Date 1354751570 -3600 # Node ID eeaf3e1773c6e6a8fb402bc4ad35200d8096fe3b # Parent db3bccd784c9bcb44e51fdb4629001e5bbee4bd8# Parent 9ffb156902f60e787d780fd68ff6d067bca14c5d GCI2012: Sound Option, Hear Only Music diff -r 9ffb156902f6 -r eeaf3e1773c6 QTfrontend/ui/page/pagefeedback.cpp --- a/QTfrontend/ui/page/pagefeedback.cpp Wed Dec 05 17:25:48 2012 -0500 +++ b/QTfrontend/ui/page/pagefeedback.cpp Thu Dec 06 00:52:50 2012 +0100 @@ -20,6 +20,24 @@ #include #include #include +#include +#include +#include +#include + +#include + +#ifdef Q_WS_WIN +#define WINVER 0x0500 +#include +#else +#include +#include +#endif + +#ifdef Q_WS_MAC +#include +#endif #include "pagefeedback.h" #include "hwconsts.h" @@ -52,6 +70,157 @@ label_description->setText(QLabel::tr("Description")); pageLayout->addWidget(label_description, 0, Qt::AlignHCenter); description = new QTextBrowser(); + + // Gather some information about the system and embed it into the report + QDesktopWidget* screen = QApplication::desktop(); + QString os_version = "Operating system: "; + QString qt_version = QString("Qt version: ") + QT_VERSION_STR + QString("\n"); + QString total_ram = "Total RAM: "; + QString available_ram = "Available RAM: "; + QString number_of_cores = "Number of cores: "; + QString compiler_bits = "Compiler architecture: "; + QString compiler_version = "Compiler version: "; + QString kernel_line = "Kernel: "; + QString screen_size = "Size of the screen(s): " + + QString::number(screen->width()) + "x" + QString::number(screen->height()) + "\n"; + QString number_of_screens = "Number of screens: " + QString::number(screen->screenCount()) + "\n"; + std::string processor_name = "Processor: "; + + // platform specific code +#ifdef Q_WS_MACX + number_of_cores += QString::number(sysconf(_SC_NPROCESSORS_ONLN)) + "\n"; + + uint64_t memsize, memavail; + size_t len = sizeof(memsize); + static int mib_s[2] = { CTL_HW, HW_MEMSIZE }; + static int mib_a[2] = { CTL_HW, HW_USERMEM }; + if (sysctl (mib_s, 2, &memsize, &len, NULL, 0) == 0) + total_ram += QString::number(memsize/1024/1024) + " MB\n"; + else + total_ram += "Error getting total RAM information\n"; + if (sysctl (mib_a, 2, &memavail, &len, NULL, 0) == 0) + available_ram += QString::number(memavail/1024/1024) + " MB\n"; + else + available_ram += "Error getting available RAM information\n"; + + int mib[] = {CTL_KERN, KERN_OSRELEASE}; + sysctl(mib, sizeof mib / sizeof(int), NULL, &len, NULL, 0); + + char *kernelVersion = (char *)malloc(sizeof(char)*len); + sysctl(mib, sizeof mib / sizeof(int), kernelVersion, &len, NULL, 0); + + QString kernelVersionStr = QString(kernelVersion); + free(kernelVersion); + int major_version = kernelVersionStr.split(".").first().toUInt() - 4; + int minor_version = kernelVersionStr.split(".").at(1).toUInt(); + os_version += QString("Mac OS X 10.%1.%2").arg(major_version).arg(minor_version) + " "; + + switch(major_version) + { + case 4: os_version += "\"Tiger\"\n"; break; + case 5: os_version += "\"Leopard\"\n"; break; + case 6: os_version += "\"Snow Leopard\"\n"; break; + case 7: os_version += "\"Lion\"\n"; break; + case 8: os_version += "\"Mountain Lion\"\n"; break; + default: os_version += "\"Unknown version\"\n"; break; + } +#endif +#ifdef Q_WS_WIN + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + number_of_cores += QString::number(sysinfo.dwNumberOfProcessors) + "\n"; + MEMORYSTATUSEX status; + status.dwLength = sizeof(status); + GlobalMemoryStatusEx(&status); + total_ram = QString::number(status.ullTotalPhys); + + switch(QSysInfo::WinVersion()) + { + case QSysInfo::WV_2000: os_version += "Windows 2000\n"; break; + case QSysInfo::WV_XP: os_version += "Windows XP\n"; break; + case QSysInfo::WV_VISTA: os_version += "Windows Vista\n"; break; + case QSysInfo::WV_WINDOWS7: os_version += "Windows 7\n"; break; + default: os_version += "Windows (Unknown version)\n"; break; + } + kernel_line += "Windows kernel\n"; +#endif +#ifdef Q_WS_X11 + number_of_cores += QString::number(sysconf(_SC_NPROCESSORS_ONLN)) + "\n"; + long pages = sysconf(_SC_PHYS_PAGES), + available_pages = sysconf(_SC_AVPHYS_PAGES), + page_size = sysconf(_SC_PAGE_SIZE); + total_ram += QString::number(pages * page_size) + "\n"; + available_ram += QString::number(available_pages * page_size) + "\n"; + os_version += "GNU/Linux or BSD\n"; +#endif + + // uname -a +#if defined(Q_WS_X11) || defined(Q_WS_MACX) + QProcess *process = new QProcess(); + QStringList arguments = QStringList("-a"); + process->start("uname", arguments); + if (process->waitForFinished()) + kernel_line += QString(process->readAll()); + delete process; +#endif + + // cpu info + uint32_t registers[4]; + uint32_t i; + + i = 0x80000002; + asm volatile + ("cpuid" : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) + : "a" (i), "c" (0)); + processor_name += std::string((const char *)®isters[0], 4); + processor_name += std::string((const char *)®isters[1], 4); + processor_name += std::string((const char *)®isters[2], 4); + processor_name += std::string((const char *)®isters[3], 4); + i = 0x80000003; + asm volatile + ("cpuid" : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) + : "a" (i), "c" (0)); + processor_name += std::string((const char *)®isters[0], 4); + processor_name += std::string((const char *)®isters[1], 4); + processor_name += std::string((const char *)®isters[2], 4); + processor_name += std::string((const char *)®isters[3], 4); + i = 0x80000004; + asm volatile + ("cpuid" : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) + : "a" (i), "c" (0)); + processor_name += std::string((const char *)®isters[0], 4); + processor_name += std::string((const char *)®isters[1], 4); + processor_name += std::string((const char *)®isters[2], 4); + processor_name += std::string((const char *)®isters[3], 3); + + // compiler +#ifdef __GNUC__ + compiler_version += "GCC " + QString(__VERSION__) + "\n"; +#else + compiler_version += "Unknown\n"; +#endif + + if(sizeof(void*) == 4) + compiler_bits += "i386\n"; + else if(sizeof(void*) == 8) + compiler_bits += "x86_64\n"; + + // add everything to the field of text + description->setText( + "\n\n\n\n\n" + "System information:\n" + + qt_version + + os_version + + total_ram + + available_ram + + screen_size + + number_of_screens + + QString::fromStdString(processor_name + "\n") + + number_of_cores + + compiler_version + + compiler_bits + + kernel_line + ); description->setReadOnly(false); pageLayout->addWidget(description);