phoronix-test-suite/pts-core/commands/install_test.php 000664 001750 001750 00000004055 12307711432 024657 0 ustar 00michael michael 000000 000000 .
*/
class install_test implements pts_option_interface
{
const doc_section = 'Test Installation';
const doc_use_alias = 'install';
const doc_description = 'This option will install the selected test(s) inside the testing environment directory). The install process from downloading of the test files to the installation is fully automated. The install option needs to be supplied with the test name or suite as an argument. Optionally, a OpenBenchmarking.org ID or the name of a saved results file can be supplied as well and the test(s) to install will automatically be extracted from that information. If the test is already installed and was run by the latest version of the installation process, no action will be taken. Multiple arguments can be supplied to install additional tests at the same time.';
public static function command_aliases()
{
return array('install');
}
public static function invalid_command($passed_args = null)
{
pts_tests::invalid_command_helper($passed_args);
}
public static function argument_checks()
{
return array(
new pts_argument_check('VARIABLE_LENGTH', array('pts_types', 'identifier_to_object'), null)
);
}
public static function run($items_to_install)
{
pts_test_installer::standard_install($items_to_install);
}
}
?>
phoronix-test-suite/documentation/phoronix-test-suite.html 000664 001750 001750 00000253732 12357757543 025647 0 ustar 00michael michael 000000 000000
Phoronix Test Suite v5.2.1 - Test Client Documentation
The Phoronix Test Suite is the most comprehensive testing and benchmarking platform available for Linux, Solaris, Mac OS X, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners. Version 1.0 of the Phoronix Test Suite was publicly released in 2008.
The Phoronix Test Suite client itself is a test framework for providing seamless execution of test profiles and test suites. There are more than 200 tests available by default, which are transparently available via OpenBenchmarking.org integration. Of these default test profiles there is a range of sub-systems that can be tested and a range of hardware from mobile devices to desktops and worksrtations/servers. New tests can be easily introduced via the Phoronix Test Suite's extensible test architecture, with test profiles consisting of XML files and shell scripts. Test profiles can produce a quantitative result or other qualitative/abstract results like image quality comparisons and pass/fail. Using Phoronix Test Suite modules, other data can also be automatically collected at run-time such as the system power consumption, disk usage, and other software/hardware sensors. Test suites contain references to test profiles to execute as part of a set or can also reference other test suites. Test suites are defined via an XML schema.
Running the Phoronix Test Suite for the first time can be as simple as issuing a command such as phoronix-test-suite benchmark c-ray, which would proceed to install a simple CPU test, execute the test, and report the results. Along with the results, the system's hardware/software information is collected in a detailed manner, relevant system logs, and other important system attributes such as compiler flags and system state. Users can optionally upload their results to OpenBenchmarking.org for sharing results with others, comparing results against other systems, and to carry out further analysis.
OpenBenchmarking.org
OpenBenchmarking.org is an open, collaborative testing platform that makes the Phoronix Test Suite an even more extensible platform for conducting automated tests with complete integration into Phoronix Test Suite test client. OpenBenchmarking.org serves as a repository for storing test profiles, test suites, and result data. Test profiles and suites are stored in the OpenBenchmarking.org cloud to allow for new/updated tests to be seamlessly obtained via the Phoronix Test Suite without needing to manually update the Phoronix Test Suite client. OpenBenchmarking.org also makes it easy to facilitate side-by-side comparisons with any other results stored in the OpenBenchmarking.org cloud. Any Phoronix Test Suite user is permitted to upload their test results, test profiles, and suites to OpenBenchmarking.org.
When finding a set of results on OpenBenchmarking.org (e.g. an example result file), it's as easy as running the Phoronix Test Suite with that OpenBenchmarking.org ID to perform an automated side-by-side comparison (e.g. phoronix-test-suite benchmark 1203160-BY-NVTEGRA3785).
Thanks to the wealth of test data (results, system logs, etc) from crowd-sourced benchmarking via the Phoronix Test Suite, a plethora of analytical features are also available from OpenBenchmarking.org.
Phoromatic
Phoromatic is a remote management system for the Phoronix Test Suite that allows the automatic scheduling of tests, remote installation of new tests, and the management of multiple test systems all through an intuitive, easy-to-use web interface. Tests can be scheduled to automatically run on a routine basis across multiple test systems. Phoromatic can also interface with revision control systems to offer support for issuing new tests on a context-basis, such as whenever a Git commit has been pushed or new daily image available. The test results are then available from this central, secure location.
Phoromatic is an add-on to the Phoronix Test Suite that's primarily intended for enterprise users when facilitating tests across a wide-spectrum of hardware within a test lab or when needing to carry out tests on a routine basis.
User Options
The following options are currently supported by the Phoronix Test Suite client. A list of available options can also be found by running phoronix-test-suite help.
Test Installation
install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option will install the selected test(s) inside the testing environment directory). The install process from downloading of the test files to the installation is fully automated. The install option needs to be supplied with the test name or suite as an argument. Optionally, a OpenBenchmarking.org ID or the name of a saved results file can be supplied as well and the test(s) to install will automatically be extracted from that information. If the test is already installed and was run by the latest version of the installation process, no action will be taken. Multiple arguments can be supplied to install additional tests at the same time.
install-dependencies [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option will install the external dependencies needed by the selected test(s) using the distribution's package management system. For example, some tests depend upon GCC for compiling code. If GCC is not detected on the system, the Phoronix Test Suite will attempt to install GCC using the distribution's package management system. If you are running this command as a local user, you may be prompted for the root password while the process is running. For unsupported distributions, the dependency names will be displayed along with common names for the package. The install-dependencies option needs to be supplied with the test name or suite as an argument. When using the install option, the external dependencies are automatically checked.
make-download-cache
This option will create a download cache for use by the Phoronix Test Suite.
remove-installed-test [Test]
This option will permanently remove a installed test by the Phoronix Test Suite.
Testing
auto-compare
This option will autonomously determine the most relevant test(s) to run for any selected sub-system(s). The tests to run are determined via OpenBenchmarking.org integration with the global results pool. Related test results from OpenBenchmarking.org are also merged to provide a straight-forward and effective means of carrying out a system comparison. If wishing to find comparable results for any particular test profile(s), simply pass the test profile names as additional arguments to this command.
benchmark [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option will install the selected test(s) (if needed) and will proceed to run the test(s). This option is equivalent to running phoronix-test-suite with the install option followed by the run option. Multiple arguments can be supplied to run additional tests at the same time and save the results into one file.
finish-run [Test Result]
This option can be used if a test run had not properly finished running all tests within a saved results file. Using this option when specifying a saved results file where all tests had not completed will attempt to finish testing on the remaining tests where there are missing results.
run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option will run the selected test(s).
run-random-tests
This option will query OpenBenchmarking.org to run random benchmarks and result comparisons on the system. This test can be used for simply supplying interesting results from your system onto OpenBenchmarking.org, stressing your system with random workloads, seeding new OpenBenchmarking.org results, etc. Basic options are provided at start-up for tuning the randomness of the testing when running this command.
run-tests-in-suite
This option can be used if you wish to run all of the tests found in a supplied suite, but you wish to re-configure each of the test options rather than using the defaults supplied by the suite.
Batch Testing
batch-benchmark [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option and its arguments are equivalent to the benchmark option, but the process will be run in the Phoronix Test Suite batch mode.
batch-install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
If you wish to run the install process in the Phoronix Test Suite batch mode but do not wish to run any tests at this time. Running the install process in the batch mode will use the default values and not prompt the user of any possible options, to ensure the process is fully automated.
batch-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option and its arguments are equivalent to the run option, but the process will be run in the Phoronix Test Suite batch mode.
batch-setup
This option is used to configure the batch mode options for the Phoronix Test Suite, which is subsequently written to the user configuration file. Among the options are whether to automatically upload the test results to OpenBenchmarking.org and prompting for the saved file name.
default-benchmark [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option will install the selected test(s) (if needed) and will proceed to run the test(s) in the defaults mode. This option is equivalent to running phoronix-test-suite with the install option followed by the default-run option.
default-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option will run the selected test(s). The name of the test or suite must be supplied or the OpenBenchmarking.org ID or saved local file name. Multiple arguments can be supplied to run additional tests at the same time and save the results in a suite-like fashion. Unlike the normal run option, the default-run will not prompt the user to select from the available test options but will instead use the default options as automatically set by pts-core or the test profile. Use batch-run to automatically test all of the available options.
internal-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option and its arguments pre-set the Phoronix Test Suite batch run mode with sane values for carrying out benchmarks in a semi-automated manner and without uploading any of the result data to the public OpenBenchmarking.org.
OpenBenchmarking.org
clone-result [OpenBenchmarking ID] ...
This option will download a local copy of a file that was saved to OpenBenchmarking.org, as long as a valid public ID is supplied. More than one ID can be specified and the results will then be merged.
list-recommended-tests
This option will list recommended test profiles for benchmarking sorted by hardware sub-system. The recommended tests are determined via querying OpenBenchmarking.org and determining the most popular tests for a given environment based upon the number of times a test profile has been downloaded, the number of test results available on OpenBenchmarking.org for a given test profile, the age of the test profile, and other weighted factors.
openbenchmarking-changes
This option will list recent changes to test profiles of enabled OpenBenchmarking.org repositories.
openbenchmarking-launcher
This option is called automatically with the .openbenchmarking MIME file extension support for launching OpenBenchmarking.org operations.
openbenchmarking-login
This option is used for controlling your Phoronix Test Suite client options for OpenBechmarking.org and syncing the client to your account.
openbenchmarking-refresh
This option is used for refreshing the stored OpenBenchmarking.org repostory information and other data. The Phoronix Test Suite will automatically refresh this data every three days or when other thresholds are exceeded, but this command can be used to manually refresh/updates the data.
openbenchmarking-repositories
This option will list the OpenBenchmarking.org repositories currently linked to this Phoronix Test Suite client instance.
upload-result [Test Result]
This option is used for uploading a test result to OpenBenchmarking.org.
upload-test-profile
This option can be used for uploading a test profile to your account on OpenBenchmarking.org. By uploading your test profile to OpenBenchmarking.org, others are then able to browse and access this test suite for easy distribution in a seamless manner by other Phoronix Test Suite clients.
upload-test-suite
This option can be used for uploading a test suite to your account on OpenBenchmarking.org. By uploading your test suite to OpenBenchmarking.org, others are then able to browse and access this test suite for easy distribution.
System
detailed-system-info
Display detailed information about the installed system hardware and software information as detected by the Phoronix Test Suite Phodevi Library.
diagnostics
This option will print information that is useful to developers when debugging problems with the Phoronix Test Suite and/or test profiles and test suites.
interactive
A simple text-driven interactive interface to the Phoronix Test Suite.
system-info
Display the installed system hardware and software information as detected by the Phoronix Test Suite Phodevi Library.
system-sensors
Display the installed system hardware and software sensors in real-time as detected by the Phoronix Test Suite Phodevi Library.
Information
info [Test | Suite | OpenBenchmarking.org ID | Test Result]
This option will show details about the supplied test, suite, virtual suite, or result file.
list-available-suites
This option will list all test suites that are available from the enabled OpenBenchmarking.org repositories.
list-available-tests
This option will list all test profiles that are available from the enabled OpenBenchmarking.org repositories.
list-available-virtual-suites
This option will list all available virtual test suites that can be dynamically created based upon the available tests from enabled OpenBenchmarking.org repositories.
list-installed-dependencies
This option will list all of the packages / external test dependencies that are already installed on the system that the Phoronix Test Suite may potentially depend upon by test profiles.
list-installed-suites
This option will list all suites that are currently installed on the system.
list-installed-tests
This option will list all test profiles that are currently installed on the system.
list-missing-dependencies
This option will list all of the packages / external test dependencies that are missing from the system that the Phoronix Test Suite may potentially need by select test profiles.
list-possible-dependencies
This option will list all of the packages / external test dependencies that are are potentially used by the Phoronix Test Suite.
list-saved-results
This option will list all of the saved test results found on the system.
list-test-usage
This option will list various details about installed tests and their usage.
list-unsupported-tests
This option will list all available test profiles that are available from the enabled OpenBenchmarking.org repositories but are NOT SUPPORTED on the given hardware/software platform. This is mainly a debugging option for those looking for test profiles to potentially port to new platforms, etc.
Asset Creation
debug-install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option is intended for use by test profile writers and is identical to the install option but will yield more information during the run process that can be used to debug issues with a test profile installer or to verify the test profile is functioning correctly.
debug-run [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option is intended for use by test profile writers and is identical to the <em>run</em> option but will yield more information during the run process that can be used to debug issues with a test profile or to verify the test profile is functioning correctly.
debug-test-download-links [Test | Suite]
This option will check all download links within the specified test profile(s) to ensure there are no broken URLs.
download-test-files [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This will download the selected test file(s) to the Phoronix Test Suite download cache but will not install the tests.
force-install [Test | Suite | OpenBenchmarking.org ID | Test Result] ...
This option will force the installation (or re-installation) of a test or suite. The arguments and process is similar to the install option but even if the test is installed, the entire installation process will automatically be executed. This option is generally used when debugging a test installation problem.
result-file-to-suite [Test Result]
This option will guide the user through the process of generating their own test suite, which they can then run, that is based upon an existing test results file.
validate-result-file
This option can be used for validating a Phoronix Test Suite result file as being compliant against the OpenBenchmarking.org specification.
validate-test-profile
This option can be used for validating a Phoronix Test Suite test profile as being compliant against the OpenBenchmarking.org specification.
validate-test-suite
This option can be used for validating a Phoronix Test Suite test suite as being compliant against the OpenBenchmarking.org specification.
Result Management
auto-sort-result-file [Test Result]
This option is used if you wish to automatically attempt to sort the results by their result identifier string.
copy-run-in-result-file [Test Result]
This option is used if you wish to change an existing test run within a saved results file.
edit-result-file [Test Result]
This option is used if you wish to edit the title and description of an existing result file.
extract-from-result-file [Test Result]
This option will extract a single set of test results from a saved results file that contains multiple test results that have been merged. The user is the prompted to specify a new result file name and select which result identifier to extract.
merge-results [Test Result] ...
This option will manually merge multiple sets of test results generated by the Phoronix Test Suite.
refresh-graphs [Test Result]
This option will re-render and save all result graphs within a saved file. This option can be used when making modifications to the graphing code or its color/option configuration file and testing the changes.
remove-from-result-file [Test Result]
This option is used if there is a set of test results you wish to remove/delete from a saved results file. The user must specify a saved results file and then they will be prompted to select the results identifier associated with the results they wish to remove.
remove-result [Test Result]
This option will permanently remove the saved file set that is set as the first argument.
rename-identifier-in-result-file [Test Result]
This option is used if you wish to change the name of the identifier in a test results file that is shown in the Phoronix Test Suite Results Viewer and the contained graphs.
rename-result-file [Test Result]
This option is used if you wish to change the name of the saved name of a result file.
reorder-result-file [Test Result]
This option is used if you wish to manually change the order in which test results are shown in the Phoronix Test Suite Results Viewer and the contained graphs. The user must specify a saved results file and then they will be prompted to select the results identifiers one at a time in the order they would like them to be displayed from left to right.
result-file-to-csv [Test Result]
This option will read a saved test results file and output the system hardware and software information along with the results to a CSV output. The CSV (Comma Separated Values) output can then be loaded into a spreadsheet for easy viewing.
result-file-to-pdf [Test Result]
This option will read a saved test results file and output the system hardware and software information along with the results to a PDF file.
result-file-to-text [Test Result]
This option will read a saved test results file and output the system hardware and software information to the terminal. The test results are also outputted.
show-result [Test Result]
Open up the test results in the Phoronix Test Suite Result Viewer or on OpenBenchmarking.org.
Result Analytics
analyze-all-runs [Test Result]
This option will generate a candlestick graph showing the distribution of results from all trial runs. The candlestick graph is similar to the Japanese candlestick charts used by the financial industry, except instead of representing stock data it is numerical result data from all trial runs.\n\nThe tip of the upper-wick represents the highest value of the test runs with the tip of the lower-wick representing the lowest value of all test runs. The upper-edge of the candle body represents the first or last run value and the lower-edge represents the first or last run value. Lastly, if the last run value is less than the first run value, the candle body is the same color as the graph background, otherwise the last run value is greater.
analyze-batch [Test Result]
This option will analyze a batch results file and plot out the performance impact from the different options onto a line graph (i.e. to see the impact that changing the video resolution has on the system's performance).
analyze-image-delta [Test Result]
This option will analyze a test result file if it contains any test results that produced an image quality comparison (IQC) and will render image deltas illustrating the difference between images from two test results.
Other
build-suite
This option will guide the user through the process of generating their own test suite, which they can then run. Optionally, passed as arguments can be the test(s) or suite(s) to add to the suite to be created, instead of being prompted through the process.
debug-self-test
This option is used during the development of the Phoronix Test Suite software for testing of internal interfaces, commands, and other common code-paths. The produced numbers should only be comparable for the same version of the Phoronix Test Suite, on the same hardware/software system, conducted on the same day of testing. This isn't intended as any scientific benchmark but simply to stress common PHP code-paths and looking for hot areas to optimize, etc.
help
This option will display the list of available Phoronix Test Suite commands.
network-setup
This option allows the user to configure how the Phoronix Test Suite connects to OpenBenchmarking.org and other web-services. Connecting through an HTTP proxy can be configured through this option.
rebuild-composite-xml [Test Result]
This option can be used to rebuild your composite XML file in the event that the main result file was corrupted and the test-X.xml files are still present in the result file directory.
user-config-reset
This option can be used for resetting the Phoronix Test Suite user configuration file to its default state.
user-config-set
This option can be used for setting an XML value in the Phoronix Test Suite user configuration file.
version
This option will display the Phoronix Test Suite client version.
Web / GUI Support
gui
Launch the Phoronix Test Suite HTML5 web user-interface in the local GUI mode (no remote web support) and attempt to auto-launch the web-browser.
start-remote-gui-server
Start the GUI web server and WebSocket server processes for remote (or local) access via the web-browser. The settings can be configured via the Phoronix Test Suite's user-config.xml configuration file.
start-ws-server
Manually start a WebSocket server for communication by remote Phoronix Test Suite GUIs, the Phoronix Test Suite Multi-System Commander, and other functionality.
Modules
list-modules
This option will list all of the available Phoronix Test Suite modules on this system.
module-info [Phoronix Test Suite Module]
This option will show detailed information on a Phoronix Test Suite module such as the version, developer, and a description of its purpose.
module-setup [Phoronix Test Suite Module]
This option will allow you to configure all available end-user options for a Phoronix Test Suite module. These options are then stored within the user's configuration file. Not all modules may have options that can be configured by the end-user.
test-module [Phoronix Test Suite Module]
This option can be used for debugging a Phoronix Test Suite module.
GUI / Web Support
start-phoromatic-server
Start the Phoromatic web server for controlling local Phoronix Test Suite client systems to facilitate automated and repeated test orchestration and other automated features targeted at the enterprise.
Module Options
The following list is the modules included with the Phoronix Test Suite that are intended to extend the functionality of pts-core. Some of these options have commands that can be run directly in a similiar manner to the other Phoronix Test Suite user commands. Some modules are just meant to be loaded directly by adding the module name to the LoadModules tag in ~/.phoronix-test-suite/user-config.xml or via the PTS_MODULES environmental variable. A list of available modules is also available by running phoronix-test-suite list-modules.
Dummy Module
This is a simple module intended for developers to just demonstrate some of the module functions.
phoronix-test-suite dummy_module.dummy-command
OpenBenchmarking.org Ekofisk
The Ekofisk client is used for connecting to OpenBenchmarking.org to facilitate the automatic running of tests, generally across multiple test nodes in a routine manner.
phoronix-test-suite ekofisk.start
phoronix-test-suite ekofisk.user-system-return
Graphics Event Checker
This module checks a number of events prior to and and after running a test to make sure the graphics sub-system was not put in a sour or unintended state by the application. For instance, it makes sure syncing to vBlank is not forced through the driver and that a graphics test has not left the display in an unintended mode.
Graphics Override
This module allows you to override some graphics rendering settings for the ATI and NVIDIA drivers while running the Phoronix Test Suite.
This module utilizes the following environmental variables: FORCE_AA, FORCE_AF.
MATISK
My Automated Test Infrastructure Setup Kit
phoronix-test-suite matisk.run
phoronix-test-suite matisk.template
Phoromatic Client
The Phoromatic client is used for connecting to a Phoromatic server (Phoromatic.com or a locally run server) to facilitate the automatic running of tests, generally across multiple test nodes in a routine manner. For more details visit http://www.phoromatic.com/. This module is intended to be used with Phoronix Test Suite 5.2+ clients and servers.
phoronix-test-suite phoromatic.connect
Phoromatic Legacy Client
The Phoromatic client is used for connecting to a Phoromatic server (Phoromatic.com or a locally run server) to facilitate the automatic running of tests, generally across multiple test nodes in a routine manner. For more details visit http://www.phoromatic.com/. THIS MODULE IS USED FOR CONNECTING TO THE PRE-2014 VERSION OF PHOROMATIC; THIS OLDER VERSION OF PHOROMATIC IS NO LONGER BEING ACTIVELY MAINTAINED. PLEASE UPGRADE TO PHORONIX-TEST-SUITE 5.2+ WITH ITS BUILT-IN PHOROMATIC SERVER.
Submit notifications to your iOS/Android mobile devices of test results in real-time as push notifications, etc. Using the Pushover.net API.
This module utilizes the following environmental variables: PUSHOVER_NET_USER.
Result Notifier
A notification module.
System Monitor
This module contains sensor monitoring support.
This module utilizes the following environmental variables: MONITOR, PERFORMANCE_PER_WATT.
Timed Screenshot
This is a module that will take a screenshot of the system at a pre-defined interval. ImageMagick must be installed onto the system prior to using this module.
This module utilizes the following environmental variables: SCREENSHOT_INTERVAL.
Toggle Screensaver
This module toggles the system's screensaver while the Phoronix Test Suite is running. At this time, the GNOME and KDE screensavers are supported.
This module utilizes the following environmental variables: HALT_SCREENSAVER.
Update Checker
This module checks to see if the Phoronix Test Suite -- and its tests and suites -- are up to date.
Installation Instructions
Setup Overview
The Phoronix Test Suite supports Linux, Apple Mac OS X, Microsoft Windows, Solaris, Hurd, BSD, and other operating system environments. The only Linux distribution-specific code deals with the external dependencies support feature that are set by individual test profiles. If you are not running one of the supported Linux distributions, Solaris, BSD, or Mac OS X, you may need to install a package manually (as instructed by the Phoronix Test Suite) in order for a test to run. An example of an external dependency would be GCC and the OpenGL Utility Toolkit being needed for test profiles that build an OpenGL benchmark from source-code.
Among the distributions where the Phoronix Test Suite has been officially tested include Ubuntu, Fedora, Mandriva / Mageia, Gentoo, PCLinuxOS, Arch Linux, Pardus, OpenSuSE, Optware, webOS, Zenwalk, CentOS, Red Hat Enterprise Linux, Oracle Linux, Scientific Linux, Debian, Mint, MEPIS, and Amazon Linux EC2.
Among the tested BSD distributions are FreeBSD, PC-BSD, NetBSD, OpenBSD, Debian GNU/kFreeBSD, and DragonflyBSD. Tested Solaris distributions include OpenSolaris, Solaris Express 11, Oracle Solaris 11, OpenIndiana, Illumos, and Nexenta.
Dependencies
The only required dependency for the Phoronix Test Suite is PHP 5.2 or newer. On Linux distributions, the needed package is commonly called php5-cli or php-cli or php. It is important to note that only PHP for the command-line is needed and not a web server (Apache) or other packages commonly associated with PHP and its usage by web-sites. The PHP5 version required is PHP 5.2+ and can also be found at www.php.net.
As part of the PHP requirement, the following PHP extensions are required and/or highly recommended in order to take advantage of the Phoronix Test Suite capabilities:
PHP DOM is needed for XML operations and must be installed for the Phoronix Test Suite to function.
PHP ZIP is needed for file compression and decompression and specifically dealing with test profiles and suites obtained via OpenBenchmarking.org or when uploading such tests and suites.
PHP OpenSSL is used for enabling HTTPS communication with Phoronix Test Suite / OpenBenchmarking.org servers.
PHP GD is highly recommended for rendering of test data to JPEG and PNG image formats and is selectively used in other image operations.
PHP Zlib is highly recommended for greater data compression when dealing with remote OpenBenchmarking.org assets.
PHP PCNTL is used for multi-threaded system sensor monitoring support during the testing process and other threaded tasks by the Phoronix Test Suite module framework.
PHP POSIX is used for reliably obtaining more system information in an efficient manner.
PHP CURL is supported as an alternative networking library for improved network performance in downloading test files and other operations.
PHP FPDF is used to generate PDF reports of test data.
Without all of these extensions, some capabilities of the Phoronix Test Suite will not be available. Many of these packages are enabled by default and do not require any additional installation steps on most Linux distributions, otherwise they are often found in the package vendor's repository.
Notes
General
You may need to modify the php.ini file on your system in order to support uploading results to OpenBenchmarking.org or logging into your OpenBenchmarking.org account. The allow_url_fopen, file_uploads, and allow_url_include options must be set to true in the PHP configuration. See additional information in this Phoronix Forums support thread.
Major updates to the Phoronix Test Suite are released on a quarterly basis. The latest stable and development versions of the Phoronix Test Suite are available at Phoronix-Test-Suite.com. The Git repository where the latest Phoronix Test Suite code is provided is hosted at GitHub.com/phoronix-test-suite and can be cloned/pulled from the https://github.com/phoronix-test-suite/phoronix-test-suite.git repository location. The latest upstream development code is housed in the master tree while older Phoronix Test Suite releases are available in their respective Git branches based upon the release's code-name.
If building the PHP package from upstream sources, it should just be a matter of running ./configure with the --enable-zip flag (all other requirements should be apart of the stock PHP configuration) to satisfy the PHP needs of the Phoronix Test Suite.
File Structure
If manually changing the location of the phoronix-test-suite launcher file, the PTS_USER_PATH environment variable must be adjusted inside the file to reflect the absolute location that leads to the root directory of the pts and pts-core folders. The pts-core directory contains the "engine" of the Phoronix Test Suite.
Running Locally
The Phoronix Test Suite can be simply extracted from the downloaded .tar.gz or .zip file or it can also be installed system-wide. If you just wish to run the Phoronix Test Suite without installing it, open a terminal and run ./phoronix-test-suite <options> from the same directory.
Generic Installation
Running install-sh from the root directory of the Phoronix Test Suite will install the software for system-wide access. By default the phoronix-test-suite executable is in /usr/bin/, the Phoronix Test Suite files in /usr/share/phoronix-test-suite/, and the documentation in /usr/share/doc/phoronix-test-suite/. Root access is required. The default installation prefix is /usr/ but can be adjusted as the first argument (example: install-sh /home/user/ to install the Phoronix Test Suite in your home directory).
Debian/Ubuntu Installation
Debian/Ubuntu users are able to follow the Generic Installation instructions or can obtain a Debian Package from the Phoronix Test Suite web-site. The package contains the phoronix-test-suite executable in /usr/bin/, the Phoronix Test Suite files in /usr/share/phoronix-test-suite/, and the documentation in /usr/share/doc/phoronix-test-suite/.
A phoronix-test-suite package can also be found in the official Ubuntu universe repository beginning with the Ubuntu 9.04 (Jaunty) release, but it may be out of date compared to the latest upstream version.
On Ubuntu 13.04 and newer if you experience an issue of system sensor monitoring not working, other multi-process tasks, or related issues reported as PHP PCNTL missing, the pcntl functions need to be removed from the disable_functions line within the /etc/php5/cli/php.ini file. This may also affect other Linux distribution support too if the vendor disables access to the PCNTL functions.
Fedora / Red Hat Installation
The Phoronix Test Suite can be installed on Fedora, Red Hat Enterprise Linux, and CentOS systems using the generic installation method. Alternatively, a phoronix-test-suite package is available in recent versions of the Fedora repository and in the EPEL (Extra Packages for Enterprise Linux) repository for Red Hat Enterprise Linux. At this time, however, the Fedora-supplied package is vastly out of date.
Gentoo Installation
Gentoo ebuild's for the Phoronix Test Suite have been created by users and can be currently found in the Gentoo BugZilla.
Mandriva Installation
Phoronix Test Suite packages are available through Mandriva Cooker starting with the Mandriva Linux 2009 release.
OpenSolaris Installation
The Phoronix Test Suite core (pts-core) is supported on Solaris and OpenSolaris platforms, but some features may not fully function. Additionally, the PTS External Dependencies feature is supported on OpenSolaris using IPS (the Image Packaging System). However, not all test profiles are supported on Solaris / OpenSolaris, and it may be in violation of your end-user agreement to perform such benchmarks on the Sun Solaris operating system. Using the OpenSolaris Image Packaging System, installing SUNWphp524 will provide PHP, PHP GD, and related dependencies. The Phoronix Test Suite has also been tested on Oracle Solaris 11 Express, OpenIndiana, StormOS, and Nexenta Core Platform.
BSD Installation
The Phoronix Test Suite also supports *BSD operating systems. However, like the Solaris support, not all test profiles are compatible with BSD operating systems, but pts-core has been tested against FreeBSD 7.x/8.x/9.x, NetBSD, PC-BSD 7/8/9, DragonFlyBSD 3.0/3.2/3.4/3.6, and OpenBSD 4.4/4.6. The Phoronix Test Suite will also work with Debian GNU/kFreeBSD.
For DragonFlyBSD, it's a matter of just using pkg_radd with php5, php5-json, php5-dom, and php5-zip or pkgsrc. Under FreeBSD/PC-BSD, PHP can be obtained from the php5 and php5-extensions Ports collection.
Mac OS X Installation
The Phoronix Test Suite is fully supported on Apple's Mac OS X operating system as of Mac OS X 10.5 with improved support under Mac OS X 10.6. PHP ships with Mac OS X by default so it's simply a matter of downloading the Phoronix Test Suite package, extracting it, and running the executable. For tests that rely upon a compiler, Apple's XCode with GCC and LLVM can be utilized.
Windows Installation
The Phoronix Test Suite support on Windows is in development and will function just fine, but is not yet feature complete compared to the other operating systems support. At this time the Phoronix Test Suite client is dependent upon PHP being installed to C:\Program Files (x86)\PHP\php. The Phoronix Test Suite also uses CPU-Z for much of the hardware detection support on Windows and is dependent upon CPU-Z being installed to C:\Program Files\CPUID\CPU-Z\cpuz.exe if you wish to utilize this hardware reporting feature. In terms of the Microsoft Windows support, right now the Phoronix Test Suite is developed and solely tested against Microsoft Windows 7 x64 and Microsoft Windows 8 x64.
Facebook HipHop
The Phoronix Test Suite can use Facebook's HopHop HHVM virtual machine as an alternative to the de facto PHP implementation. The Phoronix Test Suite has been tested against HHVM 2.0. If HHVM is present on the system but not PHP, it will automatically be used by the Phoronix Test Suite. Alternatively, the PHP_BIN environment variable can be set to point to an alternative hhvm binary.
The Phoronix Test Suite also supports the older version of Facebook HipHop that serves as a PHP to C++ translator and compiler with GCC. This support though is primitive and not officially supported. To compile the Phoronix Test Suite using HipHop/GCC, run find . -name "*.php" > files.list && hphp --input-list=files.list -k 1 --log=3 --include-path="." --cluster-count=50 -v "AllDynamic=true" -v "AllVolatile=true" from the root phoronix-test-suite/ directory. It can then be executed in the form of /tmp/hphp_XXX/program -f pts-core/phoronix-test-suite.php system-info.
External Dependencies
The Phoronix Test Suite has a feature known as "External Dependencies" where the Phoronix Test Suite can attempt to automatically install some of the test-specific dependencies on supported distributions. If running on a distribution where there is currently no External Dependencies profile, the needed package name(s) are listed for manual installation.
Below are a list of the operating systems that currently have external dependencies support within the Phoronix Test Suite for the automatic installation of needed test files.
Amazon
Angstrom
Arch Linux
CentOS
ClearOS
ClearOS Core Server
Debian
DragonFlyBSD
Fedora
Fluxbuntu
FreeBSD
GNU KFreeBSD
Gentoo
Goobuntu
HP
Joli Cloud
Linaro
Linux Mint
MEPIS
Mac OS X
MacPorts
Mageia
Mandriva
MeeGo
Moblin
Mythbuntu
NetBSD
Nexenta Core
OLPC
OpenIndiana
OpenMandriva
OpenSolaris
OpenSuSE
Optware
Oracle Server
PCLinuxOS
PTS Desktop Live
PTS Linux Live
Palm
Pardus Linux
Red Hat Enterprise
Red Hat Enterprise Server
SUSE
SUSE Linux
Scientific
ScientificSL
Ubuntu
Zenwalk
gNewSense
Configuration
User Files & Folders
~/.phoronix-test-suite/user-config.xml
This is a per-user configuration file. Among the information stored here is the test options, locations for storing files, and batch mode options. This file is formatted in XML.
~/.phoronix-test-suite/graph-config.json
This is a per-user configuration file for storing graph attributes. The adjustable options include HTML hex color codes for different areas of the graph, dimensions of the graph, and font sizes. This file is formatted in JSON.
~/.phoronix-test-suite/download-cache/
This directory contains test packages that have been downloaded for test profiles. For more information on the download cache.
~/.phoronix-test-suite/installed-tests/
This directory is where tests are installed by default. Each test has its own directory within a sub-directory of installed-tests/ based upon its OpenBenchmarking.org repository. In the test's folder is a pts-install.xml file used for managing the installation.
~/.phoronix-test-suite/test-results/
This directory is where tests results are saved by default. Each saved file has its own directory. In the saved directory is then a composite.xml file containing the useful results while in the test-X.xml files are back-ups of the results.
~/.phoronix-test-suite/modules-data/
This is the directory where any Phoronix Test Suite modules should save any files to, within a sub-directory of the module's name. The module configuration settings are also stored within this directory.
~/.phoronix-test-suite/test-profiles/
This is the directory where test profiles are stored.
~/.phoronix-test-suite/test-suites/
This is the directory where test suites are stored.
Environment Variables
TEST_RESULTS_NAME
When this variable is set, the value will be used as the name for automatically saving the test results.
TEST_RESULTS_IDENTIFIER
When this variable is set, the value will be used as the test identifier when automatically saving the test results.
TEST_RESULTS_DESCRIPTION
When this variable is set, the value will be used as the test results description when saving the test results.
PRESET_OPTIONS
For setting any test option(s) from an environment variable rather than being prompted for the options when running a test. Example: PRESET_OPTIONS="stream.run-type=Add" ./phoronix-test-suite benchmark stream. Multiple options can be passed to this environment variable when delimited by a semicolon.
SKIP_TESTS
If there are any test(s) to exempt from the testing process, specify them in this variable. Multiple tests can be waived by delimiting each test identifier by a comma. A test hardware type (i.e. Graphics) can also be supplied for skipping a range of tests.
RUN_TESTS_IN_RANDOM_ORDER
Setting this environment variable will cause the tests to be run in a random order.
SKIP_TESTING_SUBSYSTEMS
If you are running a set of benchmarks (namely a result file) but wish to skip some of the tests that don't belong to a certain test type group, you can set the hardware types to test via this environment variable. E.g. setting SKIP_TESTING_SUBSYSTEMS=Graphics will skip all test profiles to run that are not of the graphics test group. Multiple types should be delimited by a comma.
PTS_MODULE_SETUP
This variable can be used to load Phoronix Test Suite module settings automatically when using the module-setup option. An example would be: PTS_MODULE_SETUP="phoromatic.remote_host=http://www.phoromatic.com/; phoromatic.remote_account=123456; phoromatic.remote_verifier=ABCD" phoronix-test-suite module-setup phoromatic.
PTS_MODULES
If there are any Phoronix Test Suite modules to additionally load, they can be specified here. Multiple modules can be supplied by delimiting them with a comma. The more appropriate way of loading Phoronix Test Suite modules for longer periods of time is by using the ~/.phoronix-test-suite/user-config.xml configuration.
NO_PHODEVI_CACHE
This is a debugging option to disable the Phodevi cache from being loaded of cached software/hardware information. Instead, all software/hardware will be polled from the Phodevi library without caching.
EXTERNAL_PHODEVI_CACHE
This option can be used for loading an external Phodevi cache. Such as loading the native hardware/software information from within a Windows Wine client from a native system host.
PTS_DISPLAY_MODE
If you wish to load a non-default display mode for a single instance, specify the mode in this variable.
TOTAL_LOOP_TIME
When running any test(s), if you would like the test(s) to continue running as a loop until a certain time has been reached, this variable can be used. The value should be the number of minutes to run the testing process before the loop is ended.
LIMIT_ELAPSED_TEST_TIME
If you want to ensure that the time for a given Phoronix Test Suite process doesn't elapse past a certain number of minutes, specify the number of minutes for this environment variable. When the amount of time spent testing exceeds that amount, the testing will end prematurely while still saving the tests that were completed in time.
TOTAL_LOOP_COUNT
When running any test(s), if you would like the test(s) to continue running for a number of times, this variable can be used. The value should be the number of times to loop the testing process before ending.
FORCE_TIMES_TO_RUN
If you wish to override the number of times to run each test -- rather than the Phoronix Test Suite using the number of times specified in each test profile -- this variable can be used.
FORCE_MIN_TIMES_TO_RUN
This is similar to the FORCE_TIMES_TO_RUN option but will only be used if the test profile's run count is less than this defined value.
NO_FILE_HASH_CHECKS
To disable MD5/SHA256 check-sums from being checked when downloading test files, set this variable to 1. This variable used to be known as NO_MD5_CHECKS, which is still honored but was changed to NO_FILE_HASH_CHECKS to reflect other kind of file hash sum checks.
PTS_DOWNLOAD_CACHE
While non-standard Phoronix Test Suite download caches can be specified within the user-config.xml file, an additional directory to look for potential Phoronix Test Suite download files can be specified by this variable.
GRAPH_HIGHLIGHT
If this variable is set with a valid test identifer from a result file whether you are using the refresh-graphs command or any other related to the rendering of test results on a bar graph, the specified test identifier's result will be highlighted in a different color than the other rendered test results. Multiple identifiers can be specified when delimited by a comma.
VIDEO_MEMORY
If Phodevi fails to detect the system's video memory capacity or is incorrectly detected, the video memory capacity (in MB) can be specified by this variable.
OVERRIDE_VIDEO_MODES
If Phodevi fails to detect all of the system's monitor video modes or a separate set of modes would be preferred, the modes can be specified in this variable. Example: OVERRIDE_VIDEO_MODES=800x600,1024x768,1280x1024 phoronix-test-suite benchmark nexuiz.
SKIP_TEST_SUPPORT_CHECKS
If this environment variable is set, it will not honor the support checks made by individual test profiles. I.e. test profiles that would normally be considered un-supported on a given platform are attempted to install and run regardless.
SKIP_ALL_TEST_SUPPORT_CHECKS
If this environment variable is set, all tests will be permitted on the client for execution. SKIP_ALL_TEST_SUPPORT_CHECKS is more liberal than SKIP_TEST_SUPPORT_CHECKS in letting disk tests run on RAM-based file-systems, attempt to run 2D/3D tests on VESA display drivers, and other special cases.
DEFAULT_VIDEO_MODE
If Phodevi fails to detect the system's monitor standard / default resolution, the mode can be specified in this variable. Example: DEFAULT_VIDEO_MODE=1680x1050 phoronix-test-suite benchmark nexuiz.
SKIP_EXTERNAL_DEPENDENCIES
To skip the Phoronix Test Suite external dependency checking/installation when installing a test, set this environment variable to 1. If wishing to skip only certain external dependencies, set this variable's value to the name of the external dependencies (the generic dependency names used by the Phoronix Test Suite) to not install. Multiple dependencies to skip can be delimited by a comma.
General Information
Frequently Asked Questions
Q: May I use the Phoronix Test Suite when running benchmarks for my own publication or blog? Are there any publishing restrictions?
A: Anyone is more than welcome to use the Phoronix Test Suite for their own publication or purpose. While the Phoronix Test Suite came out of our internal test tools for carrying out Linux hardware reviews at Phoronix.com, we invite other hardware review web-sites, technology journals, and independent publications to use our software too. While not required, we would just kindly ask that you mention in your review/article that the Phoronix Test Suite was used for carrying out your testing, and ideally to link to www.phoronix-test-suite.com so that your readers will know where to obtain the software if they are interested in running the tests. You are also more than welcome to upload your results to OpenBenchmarking.org so that others may compare their results against yours in an easy manner.
We also try to make the Phoronix Test Suite easy-to-use by independent publications. For example, if you would like to watermark your web-site's URL into the graphs containing your test results, that can be easily modified in ~/.phoronix-test-suite/graph-config.json. The colors and other graph settings are also stored in this XML file. If you are a publication and run into any issues with the Phoronix Test Suite or have a feature request, please let us know.
A partial list of other publications using the Phoronix Test Suite can be found in this forum thread.
Q: Why does the Phoronix Test Suite not use my distribution's package management system for acquiring all needed packages?
A: The tests themselves are generally downloaded from source and built locally on the machine, rather than fetching any distribution-specific packages. This is done to ensure more comparable results across operating systems / releases, etc. The distribution packager could be applying a number of unknown patches to the software, building the software with unique build options, or making other changes to the software that could skew the results.
Q: Besides being a developer, documentation writer, or having any other unique technical abilities, how else can I contribute to the Phoronix Test Suite?
A: Independent code contributions are very welcome as well as creating your own test profiles and suites. We also appreciate any feedback, comments, or other ideas either by emailing us, posting on the forums, or sending a message to the mailing list. You can also see this (outdated) forum thread.
Q: Do you offer technical support for the Phoronix Test Suite
A: Paid, professional support is available and is done via our commercial services. We also offer Phoromatic licenses for use within a corporate intranet and other custom services. Free, community support is offered via our mailing list, IRC channel (#phoronix on FreeNode.net, and the Phoronix Forums.
Q: May I put the Phoronix Test Suite logo on my company's web-site or on my product packaging?
A:Contact us for licensing information and details regarding the Phoronix Certification & Qualification Suite.
Q: How often is the Phoronix Test Suite updated?
A: We provide major updates on a quarterly basis with an occasional point release to fix outstanding bugs or address other issues. The latest work going into the Phoronix Test Suite is accessible via our Git repository at GitHub.com/phoronix-test-suite.
Tips & Tricks
General
- The desktop's screensaver will automatically be shutdown when a test is running and will be restored to its previous state upon the test's completion. This is supported for GNOME, KDE, and other XDG-supportive desktop environments.
- If you have many computers you wish to benchmark, once all of your tests have been downloaded, run phoronix-test-suite make-download-cache to generate a copy of these files at ~/.phoronix-test-suite/download-cache/. A download cache is used for conserving time and bandwidth by eliminating the need for the Phoronix Test Suite to download files that have already been downloaded once. Copy this folder to the other systems or copy it to a DVD or USB hard drive, connect it to the next test system, and the Phoronix Test Suite will automatically use this local download cache. Or store these files on a local HTTP/FTP server and then update your ~/.phoronix-test-suite/user-config.xml file to reflect the location of this download cache directory.
Running
- When running a test in batch mode (through the use of the batch-run or batch-benchmark options) that normally has end-user options (such as the sub-test to run or resolution), the Phoronix Test Suite will run the test with each unique combination of options possible, if configured appropriately.
- When running a test where you are prompted to enter any test options, multiple selections can be performed -- which will result in multiple test runs for each combination of the selected option(s) -- by separating each intended test option / number with a comma.
- When being prompted for the test identifier or the file name for saving the results, several user variables are supported. These include $VIDEO_RESOLUTION, $VIDEO_CARD, $OPERATING_SYSTEM, $PROCESSOR, $MOTHERBOARD, $CHIPSET, and $KERNEL_VERSION. If any of these variables are entered, the Phoronix Test Suite will replace them with their respective values before saving the results.
- If RemoveDownloadFiles is set to TRUE within the user-config.xml file, once a test has been installed the originally downloaded files for that test will be automatically removed. This conserves disk space but will cause these files to be re-downloaded the next time the test needs to be re-installed. This will also not back up the downloaded files to the Phoronix Test Suite download cache. Enabling this option is just recommended for users with very limited disk space.
- If the amount of video memory for your graphics card is incorrectly reported by the Phoronix Test Suite (you can check by running phoronix-test-suite diagnostics), you can use the VIDEO_MEMORY= environment variable for overriding the video memory capacity (in Megabytes) used by the Phoronix Test Suite.
- If the DISPLAY environment variable is not set or NO_GRAPHICS_TESTS environment variable is set, tests of type Graphics will not be run. Likewise, if NO_SYSTEM_TESTS environment variable is set, tests of type System will not run. This applies to all test types where NO_<TEST TYPE>_TESTS is set.
- If while running multiple tests you want to quit the testing prematurely, in a new terminal window type touch ~/.phoronix-test-suite/halt-testing. All results for tests that had already run will be saved (permitting you opted to save the results), except for the test currently being run.
- If you wish to stop the current test run prematurely but continue the testing process, in a new terminal window type touch ~/.phoronix-test-suite/skip-test.
- If you want the specified test(s) to run in a loop for a set period of time, use the TOTAL_LOOP_TIME environment variable. For instance, running TOTAL_LOOP_TIME=120 phoronix-test-suite benchmark ffmpeg would keep running the ffmpeg test profile for 120 minutes.
- If you want the specified test(s) to run in a loop for a set number of times, use the TOTAL_LOOP_COUNT environment variable. For instance, running TOTAL_LOOP_COUNT=3 phoronix-test-suite benchmark ffmpeg would keep running the ffmpeg test profile three times.
- When any tests are being installed and when tests are being run, a lock is created in the system's temporary directory with the name phoronix-test-suite.active (i.e. /tmp/phoronix-test-suite.active) and is removed upon completion. Thus if you have any system scripts that you wish to run when tests are not running or being installed as to not impact the results, one simple way to handle this is by having the script check for the existence of this lock.
Configuration
- The user configuration options for the Phoronix Test Suite are stored in ~/.phoronix-test-suite/user-config.xml. The batch mode options are also stored within this file and those can be adjusted by running phoronix-test-suite batch-setup.
- The colors, size, and other attributes for the graphs found within the Phoronix Test Suite Results Viewer can be modified via the file ~/.phoronix-test-suite/graph-config.json.
Test / Suite Writing
- The Phoronix Test Suite recursively determines tests/suites and allows a suite to call another suite.
Module Writing
- By writing a Phoronix Test Suite module, you can easily extend the functionality of the Phoronix Test Suite. Some examples are being able to email the results upon completion, controlling the system's screensaver, updating a text LCD panel with the current test status, etc.
Virtual Test Suites
Virtual test suites are not like a traditional test suite defined by the XML suite specification. Virtual test suites are dynamically generated in real-time by the Phoronix Test Suite client based upon the specified test critera. Virtual test suites can automatically consist of all test profiles that are compatible with a particular operating system or test profiles that meet other critera. When running a virtual suite, the OpenBenchmarking.org repository of the test profiles to use for generating the dynamic suite must be prefixed.
Virtual test suites can be installed and run just like a normal XML test suite and shares nearly all of the same capabilities. However, when running a virtual suite, the user will be prompted to input any user-configuration options for needed test profiles just as they would need to do if running the test individually. When running a virtual suite, the user also has the ability to select individual tests within the suite to run or to run all of the contained test profiles. Virtual test suites are also only supported for an OpenBenchmarking.org repository if there is no test profile or test suite of the same name in the repository. Below is a list of common virtual test suites for the main Phoronix Test Suite repository, but the dynamic list of available virtual test suites based upon the enabled repositories is available by running phoronix-test-suite list-available-virtual-suites.
All PTS Tests pts/all
This is a collection of all test profiles found within the specified OpenBenchmarking.org repository.
Installed Tests pts/installed
This is a collection of test profiles found within the specified OpenBenchmarking.org repository that are already installed on the system under test.
Linux Operating System Tests pts/linux
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Linux Operating System.
Solaris Operating System Tests pts/solaris
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Solaris Operating System.
BSD Operating System Tests pts/bsd
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the BSD Operating System.
MacOSX Operating System Tests pts/macosx
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the MacOSX Operating System.
Windows Operating System Tests pts/windows
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Windows Operating System.
Hurd Operating System Tests pts/hurd
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Hurd Operating System.
System Subsystem Tests pts/system
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the System sub-system.
Processor Subsystem Tests pts/processor
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the Processor sub-system.
Graphics Subsystem Tests pts/graphics
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the Graphics sub-system.
Other Subsystem Tests pts/other
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the Other sub-system.
Utility Tests pts/utility
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Utility software test.
Simulator Tests pts/simulator
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Simulator software test.
Scientific Tests pts/scientific
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Scientific software test.
Benchmark Tests pts/benchmark
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Benchmark software test.
Application Tests pts/application
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Application software test.
Game Tests pts/game
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Game software test.
Smp Tests pts/smp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing smp.
Python Tests pts/python
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing python.
Mpi Tests pts/mpi
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing mpi.
Openmp Tests pts/openmp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing openmp.
Vdpau Tests pts/vdpau
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing vdpau.
Video Tests pts/video
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing video.
Component Testing
Compiler Testing & Masking
A majority of the test profiles provided by OpenBenchmarking.org to the Phoronix Test Suite are source-based tests. Relying upon the upstream source-code for each program under test allows for the tests to be easily brought to new platforms and architectures, avoids any out-of-tree / non-default packaging differences by different distributions and operating systems, and to allow the Phoronix Test Suite user to easily test new compilers and/or compiler options. For the source-based tests, the Phoronix Test Suite relies upon a compiler (e.g. GCC, LLVM/Clang, Sun Studio, Open64, et al) being present on the system under test. The Phoronix Test Suite does respect CC/CXX environment variables and test profiles are expected to honor CFLAGS/CXXFLAGS and other compiler settings.
As of Phoronix Test Suite 3.8, a compiler masking method is utilized for logging compiler options and other settings with each test profile installation. Prior to installing an open-source test, the Phoronix Test Suite determines the intended compiler to be used based upon the pre-set environment variables or the pre-set compiler(s) within the PATH environment variable. The Phoronix Test Suite then masks the compiler to ensure that any options/flags submitted to the compiler are first passed through pts-core so that they can be logged for later use, then is linked to the original, intended compiler. Additionally, other compiler binary names of the same type are blacklisted to prevent their un-intended use (i.e. if a test profile has hard-coded gcc in its build script, but clang is set as the compiler via CC, a sym-link will automatically be created from gcc to the masked clang for the duration of its test installation).
The logged compiler data is then used by the Phoronix Test Suite following the test execution process for automated result analysis. If there is a detected change in compiler settings, the differences are automatically reported to the test result graphs. Additionally, key compiler information (e.g. the compiler optimization level and key libraries that were linked at compile-time) is reported as a footnote on result graphs. The Phoronix Test Suite handles all of this in a fully automated manner; test profiles require no changes to take advantage of these compiler-reporting capabilities.
Separately, the Phoronix Test Suite attempts to automatically log the system compiler's build configuration (i.e. GCC's gcc -v "Configured with") output. If the Phoronix Test Suite detects there is a compiler build configuration change between test runs in a result file, it will report each compiler's build configuration to the system information table within the results viewer. Reported to the table is a reduced view of the build configuration options, with less relevant items being stripped away from this view to reduce verbosity. Upon clicking the text, the raw compiler information output can be viewed in full.
Disk / File-System Testing
By default tests are installed to ~/.phoronix-test-suite/installed-tests/. However, the location can be updated from ~/.phoronix-test-suite/user-config.xml or dynamically via the PTS_TEST_INSTALL_ROOT_PATH environment variable.
When any disk tests are executed, the Phoronix Test Suite will attempt to log the mount options and scheduler of the disk/partition being used for testing. This information is subsequently displayed within the system information table. If the scheduler / mount options are maintained the same throughout all test runs, only a single line is displayed otherwise the options for each test run will be automatically displayed. The file-system in use is always captured and shown in the system information table.
Phoromatic
Overview
Phoromatic is a remote management system for the Phoronix Test Suite. Phoromatic allows the automatic (hence the name Phoromatic) scheduling of tests, remote installation of new tests, and the management of multiple test systems all through an intuitive, easy-to-use web interface. Tests can be scheduled to automatically run on a routine basis across multiple test systems. The test results are then available from this central, secure location.
Basic Instructions
Create a free account at Phoromatic.com. Phoromatic can also be installed on a LAN / intranet for professional and enterprise support customers of the Phoronix Test Suite.
On each test system, install the latest version of the Phoronix Test Suite and then run phoronix-test-suite module-setup phoromatic. During this process it will ask the user for an account code and activiation ID that are shown from the Systems page of your Phoromatic account.
Phoromatic cannot install external dependencies for a test if the Phoronix Test Suite is not running as root, so it would be recommended to now run phoronix-test-suite install-dependencies all. Alternatively, you can also run phoronix-test-suite install all to install all tests at this time, or begin selectively installing the tests you wish to use. Phoromatic can install tests automatically though, it just cannot install external dependencies when the user is not root.
When you are all set, run phoronix-test-suite phoromatic.start, which begins the process of the Phoronix Test Suite listening to the Phoromatic server waiting for installation and run commands, etc. The installed system software/hardware is also reported all automatically, etc.
PTS Desktop Live and PTS Netbook Live are Linux-based operating systems designed to provide a free software platform for carrying out system tests and hardware benchmarks in an automated, reproducible, and effective manner. The Phoronix Test Suite operating systems are designed around the Phoronix Test Suite with the operating system itself consisting of a stripped down Linux environment, then built upon that is the Phoronix Test Suite with its test profiles and suites. This is not a standard Linux desktop with the normal throng of packages.
Testing with PTS Desktop Live is intended to be via a Live DVD or Live USB (i.e. flash drive or memory card) environment. PTS Netbook Live is similar to PTS Desktop Live but designed for testing on lightweight x86 systems and netbooks. Both PTS Desktop Live and PTS Netbook Live make it very easy to deploy the Phoronix Test Suite across an array of systems, isolates any software differences when seeking to perform hardware comparisons, and is designed to be very easy to carry out these Linux benchmarks even for a first-time Linux user.
The inaugural release of this operating system was PTS Desktop Live 2009.3 (codenamed "Gernlinden") and was based upon the Phoronix Test Suite 2.0 release. The Gernlinden release shipped with more than 50 open-source test profiles and all needed files being located on the disc image. PTS Desktop Live uses the GTK2 GUI dialog for the Phoronix Test Suite by default, but the CLI options are also accessible. PTS Desktop Live also features optimizations to the Linux kernel and related components for use on the latest high-end hardware and other performance related tweaking. PTS Netbook Live features optimizations for the Intel Atom processor.
The mission of the Phoronix Test Suite and related products will not be achieved until it has made Linux benchmarking incredibly robust and innovative, drop dead easy to perform nearly any kind of benchmark, and when it out-paces other leading operating systems for its benchmarking abilities. These operating systems are being updated quarterly in conjunction with new Phoronix Test Suite releases. The Phoronix Test Suite will continue to be supported under all other Linux distributions, OpenSolaris, Mac OS X, Windows, and *BSD operating systems, but this is just another addition on top of that.
PTS Desktop Live is designed to run on x86_64 compatible systems with 2GB or more of system memory (ideally 4GB+ if you wish to run many of the tests in a live environment) being highly recommended along with a modern CPU and graphics processor. No proprietary graphics drivers are shipped with PTS Desktop Live at this time, so depending upon the hardware you may not have OpenGL acceleration to run the few graphics-related tests that are included with this release. Only graphics drivers are provided for ATI/AMD, NVIDIA, and Intel hardware. An Internet connection is not required but is needed for communication with OpenBenchmarking.org and for utilizing some of the other Phoronix Test Suite features.
PTS Netbook Live is designed for netbooks and nettop computers with an Intel Atom processor.
Quick Start Guide
When the operating system has fully booted, the end-user agreement for the Phoronix Test Suite will be displayed, followed by initializing the main GTK user interface for the Phoronix Test Suite. The Phoronix Test Suite has more than 100 test profiles while there are about 50 test profiles featured within live environment, which are free software, do not pose significant install size problems, and are suitable for benchmarking from a live environment. By default, PTS Desktop Live and PTS Netbook Live will only show the test profiles and suites where all of the needed test files and dependencies ship with this open-source operating system. However, to access any of the test profiles that may require downloading additional files or external dependencies, use the View menu to toggle the different options. The system's hardware and software information can also be viewed in a graphical window from this menu.
From the Available Tests tab, any test/suite can be selected to view more information. If you wish to install the test, simply click on the install button while waiting shortly for it to install. Afterwards, the test can be run by selecting it again and clicking on the run/benchmark button. If you have a OpenBenchmarking.org account, you can login from the File menu while Phoronix Test Suite settings are adjustable from the Edit menu.
When the testing has completed, the graphical user interface will reappear. Via the buttons that appear at the top of the interface, the test results can then be opened within the web browser. Depending upon the test profile, it may also be possible to immediately compare the test result(s) against a set of reference systems. If the completed test(s) do have reference results available, a list of the comparable systems are shown, so that you can click on one or more of these reference systems to see how the given system performs in comparison. Results from OpenBenchmarking.org can also be compared with any of the test results.
Assuming you did not launch any commands from the terminal to alter the disk(s) or its contents or carry out any other changes; PTS Desktop Live will have not touched your data or the installed operating system(s). If you wish to archive any of your test results, upload the results to OpenBenchmarking.org. Alternatively, when going to the Test Results tab and selecting a test, the File menu presents options for exporting results to text, CSV, and PDF files. The contents of the ~/.phoronix-test-suite/test-results/ folder can also be backed up for preserving the test results.
If you wish to use the Phoronix Test Suite from the command-line, open a terminal and run phoronix-test-suite.
Development Credits
The Phoronix Test Suite is based upon the extensive testing and internal tools developed by Phoronix.com since 2004 along with support from leading tier-one computer hardware and software vendors. The principal architects of the Phoronix Test Suite are Michael Larabel and Matthew Tippett. The phoronix-test-suite, pts_Graph, bilde_renderer, Phodevi, tandem_Xml, and nye_Xml are some of the related open-source projects provided by Phoronix Media.
Below is a list of individuals and organizations that have contributed upstream patches, test profiles, and/or made other contributions to the Phoronix Test Suite that Phoronix Media would like to thank.
phoronix-test-suite/install-sh 000775 001750 001750 00000012273 12316667616 020127 0 ustar 00michael michael 000000 000000 #!/bin/sh
# Phoronix Test Suite
# URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
# Copyright (C) 2008 - 2014, Phoronix Media
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
# Generic Phoronix Test Suite installer
# To install into a chroot, set $DESTDIR to the corresponding directory.
if [ "X$1" = "X" ]
then
INSTALL_PREFIX="/usr"
else
INSTALL_PREFIX="$1"
fi
# Ensure the user is in the correct directory
if [ ! -f pts-core/phoronix-test-suite.php ]
then
cat <<'EOT'
To install the Phoronix Test Suite you must first change directories to phoronix-test-suite/. For support visit: http://www.phoronix-test-suite.com/
EOT
exit
fi
mkdir -p $DESTDIR$INSTALL_PREFIX
if [ ! -w $DESTDIR$INSTALL_PREFIX ]
then
echo "\nERROR: $DESTDIR$INSTALL_PREFIX is not writable. Run this installer as root or specify a different directory prefix as the first argument sent to this script.\n"
exit
fi
rm -rf $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/
rm -rf $DESTDIR$INSTALL_PREFIX/share/doc/phoronix-test-suite/
mkdir -p $DESTDIR$INSTALL_PREFIX/bin/
mkdir -p $DESTDIR$INSTALL_PREFIX/share/appdata/
mkdir -p $DESTDIR$INSTALL_PREFIX/share/applications/
mkdir -p $DESTDIR$INSTALL_PREFIX/share/icons/hicolor/48x48/apps/
mkdir -p $DESTDIR$INSTALL_PREFIX/share/man/man1/
mkdir -p $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/
mkdir -p $DESTDIR$INSTALL_PREFIX/share/doc/phoronix-test-suite/
mkdir -p $DESTDIR$INSTALL_PREFIX/../etc/bash_completion.d/
cp CHANGE-LOG $DESTDIR$INSTALL_PREFIX/share/doc/phoronix-test-suite/
cp COPYING $DESTDIR$INSTALL_PREFIX/share/doc/phoronix-test-suite/
cp AUTHORS $DESTDIR$INSTALL_PREFIX/share/doc/phoronix-test-suite/
cd documentation/
cp -r * $DESTDIR$INSTALL_PREFIX/share/doc/phoronix-test-suite/
cd ..
rm -rf $DESTDIR$INSTALL_PREFIX/share/doc/phoronix-test-suite/man-pages/
cp documentation/man-pages/*.1 $DESTDIR$INSTALL_PREFIX/share/man/man1/
cp pts-core/static/bash_completion $DESTDIR$INSTALL_PREFIX/../etc/bash_completion.d/phoronix-test-suite
cp pts-core/static/images/phoronix-test-suite.png $DESTDIR$INSTALL_PREFIX/share/icons/hicolor/48x48/apps/phoronix-test-suite.png
cp pts-core/static/phoronix-test-suite.desktop $DESTDIR$INSTALL_PREFIX/share/applications/
cp pts-core/static/phoronix-test-suite-launcher.desktop $DESTDIR$INSTALL_PREFIX/share/applications/
cp pts-core/static/phoronix-test-suite.appdata.xml $DESTDIR$INSTALL_PREFIX/share/appdata/
rm -f $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts/etc/scripts/package-build-*
cp -r pts-core $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/
rm -f $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts-core/static/phoronix-test-suite.desktop
rm -f $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts-core/static/phoronix-test-suite-launcher.desktop
rm -f $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts-core/openbenchmarking.org/openbenchmarking-mime.xml
rm -f $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts-core/static/bash_completion
rm -f $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts-core/static/images/openbenchmarking.png
rm -f $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts-core/static/images/%phoronix-test-suite.png
sed 's:PTS_DIR=`pwd`:PTS_DIR='"$INSTALL_PREFIX"'\/share\/phoronix-test-suite:g' phoronix-test-suite > $DESTDIR$INSTALL_PREFIX/bin/phoronix-test-suite
chmod +x $DESTDIR$INSTALL_PREFIX/bin/phoronix-test-suite
# sed 's:\$url = PTS_PATH . \"documentation\/index.html\";:\$url = \"'"$INSTALL_PREFIX"'\/share\/doc\/packages\/phoronix-test-suite\/index.html\";:g' pts-core/commands/gui_gtk.php > $DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/pts-core/commands/gui_gtk.php
# XDG MIME OpenBenchmarking support
if [ "X$DESTDIR" = "X" ]
then
#No chroot
xdg-mime install pts-core/openbenchmarking.org/openbenchmarking-mime.xml
xdg-icon-resource install --context mimetypes --size 64 pts-core/static/images/openbenchmarking.png application-x-openbenchmarking
else
#chroot
mkdir -p $DESTDIR$INSTALL_PREFIX/share/mime/packages/
mkdir -p $DESTDIR$INSTALL_PREFIX/share/icons/hicolor/64x64/mimetypes/
cp pts-core/openbenchmarking.org/openbenchmarking-mime.xml $DESTDIR$INSTALL_PREFIX/share/mime/packages/
cp pts-core/static/images/openbenchmarking.png $DESTDIR$INSTALL_PREFIX/share/icons/hicolor/64x64/mimetypes/application-x-openbenchmarking.png
fi
echo -e "\nPhoronix Test Suite Installation Completed\n
Executable File: $INSTALL_PREFIX/bin/phoronix-test-suite
Documentation: $INSTALL_PREFIX/share/doc/phoronix-test-suite/
Phoronix Test Suite Files: $INSTALL_PREFIX/share/phoronix-test-suite/\n"
if [ "X$DESTDIR" != "X" ]
then
echo "Installed to chroot: $DESTDIR"
echo "Please update your desktop and mime-database manually"
fi
phoronix-test-suite/pts-core/objects/pts_compression.php 000664 001750 001750 00000011605 12316655742 025243 0 ustar 00michael michael 000000 000000 .
*/
class pts_compression
{
public static function compress_to_archive($to_compress, $compress_to)
{
$compress_to_file = basename($compress_to);
$compress_base_dir = dirname($to_compress);
$compress_base_name = basename($to_compress);
switch(substr($compress_to_file, strpos($compress_to_file, '.') + 1))
{
case 'tar':
$extract_cmd = 'tar -cf ' . $compress_to . ' ' . $compress_base_name;
break;
case 'tar.gz':
$extract_cmd = 'tar -czf ' . $compress_to . ' ' . $compress_base_name;
break;
case 'tar.bz2':
$extract_cmd = 'tar -cjf ' . $compress_to . ' ' . $compress_base_name;
break;
case 'zip':
$extract_cmd = 'zip -r ' . $compress_to . ' ' . $compress_base_name;
break;
default:
$extract_cmd = null;
break;
}
if($extract_cmd != null)
{
shell_exec('cd ' . $compress_base_dir . ' && ' . $extract_cmd . ' 2>&1');
}
}
public static function archive_extract($file)
{
$file_name = basename($file);
$file_path = dirname($file);
switch(substr($file_name, strpos($file_name, '.') + 1))
{
case 'tar':
$extract_cmd = 'tar -xf';
break;
case 'tar.gz':
$extract_cmd = 'tar -zxf';
break;
case 'tar.bz2':
$extract_cmd = 'tar -jxf';
break;
case 'zip':
$extract_cmd = 'unzip -o';
break;
default:
return false;
}
shell_exec('cd ' . $file_path . ' && ' . $extract_cmd . ' ' . $file_name . ' 2>&1');
return true;
}
public static function zip_archive_extract($zip_file, $extract_to)
{
$success = false;
if(!is_readable($zip_file) || !is_writable($extract_to))
{
return $success;
}
if(class_exists('ZipArchive'))
{
$zip = new ZipArchive();
if($zip->open($zip_file) === true)
{
$t = $zip->extractTo($extract_to);
$zip->close();
$success = $t;
}
}
else if(function_exists('zip_open'))
{
// the old PHP Zip API, but this is what webOS Optware uses and others
$zip = zip_open($zip_file);
if($zip)
{
while($zip_entry = zip_read($zip))
{
$fp = fopen($extract_to . '/' . zip_entry_name($zip_entry), 'w');
if(zip_entry_open($zip, $zip_entry, 'r'))
{
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
fwrite($fp, $buf);
zip_entry_close($zip_entry);
fclose($fp);
}
}
zip_close($zip);
$success = true;
}
}
else if(pts_client::executable_in_path('unzip'))
{
// Fallback to using external unzip command
shell_exec('unzip -o ' . $zip_file . ' -d ' . $extract_to . ' 2>&1');
$success = true;
}
else if(PTS_IS_CLIENT)
{
trigger_error('Failed to find ZIP support for extracting file: ' . $zip_file . '. Install PHP ZIP support or the unzip utility.', E_USER_ERROR);
}
return $success;
}
public static function zip_archive_create($zip_file, $add_files)
{
if(!class_exists('ZipArchive'))
{
return false;
}
$zip = new ZipArchive();
if($zip->open($zip_file, ZIPARCHIVE::CREATE) !== true)
{
$success = false;
}
else
{
foreach(pts_arrays::to_array($add_files) as $add_file)
{
self::zip_archive_add($zip, $add_file, dirname($add_file));
}
$success = true;
}
return $success;
}
protected static function zip_archive_add(&$zip, $add_file, $base_dir = null)
{
if(is_dir($add_file))
{
$zip->addEmptyDir(substr($add_file, strlen(pts_strings::add_trailing_slash($base_dir))));
foreach(pts_file_io::glob(pts_strings::add_trailing_slash($add_file) . '*') as $new_file)
{
self::zip_archive_add($zip, $new_file, $base_dir);
}
}
else if(is_file($add_file))
{
$zip->addFile($add_file, substr($add_file, strlen(pts_strings::add_trailing_slash($base_dir))));
}
}
public static function zip_archive_read_all_files($zip_file)
{
if(!class_exists('ZipArchive') || !is_readable($zip_file))
{
return false;
}
$zip = new ZipArchive();
if($zip->open($zip_file) === true)
{
$files = array();
for($i = 0; $i < $zip->numFiles; $i++)
{
$filename = $zip->getNameIndex($i);
$files[$filename] = $zip->getFromName($filename);
}
$zip->close();
}
else
{
$files = false;
}
return $files;
}
}
?>
phoronix-test-suite/documentation/stubs/55_virtual_suites.html 000664 001750 001750 00000015553 12357757543 026425 0 ustar 00michael michael 000000 000000 Virtual Test Suites
Virtual test suites are not like a traditional test suite defined by the XML suite specification. Virtual test suites are dynamically generated in real-time by the Phoronix Test Suite client based upon the specified test critera. Virtual test suites can automatically consist of all test profiles that are compatible with a particular operating system or test profiles that meet other critera. When running a virtual suite, the OpenBenchmarking.org repository of the test profiles to use for generating the dynamic suite must be prefixed.
Virtual test suites can be installed and run just like a normal XML test suite and shares nearly all of the same capabilities. However, when running a virtual suite, the user will be prompted to input any user-configuration options for needed test profiles just as they would need to do if running the test individually. When running a virtual suite, the user also has the ability to select individual tests within the suite to run or to run all of the contained test profiles. Virtual test suites are also only supported for an OpenBenchmarking.org repository if there is no test profile or test suite of the same name in the repository. Below is a list of common virtual test suites for the main Phoronix Test Suite repository, but the dynamic list of available virtual test suites based upon the enabled repositories is available by running phoronix-test-suite list-available-virtual-suites.
All PTS Tests pts/all
This is a collection of all test profiles found within the specified OpenBenchmarking.org repository.
Installed Tests pts/installed
This is a collection of test profiles found within the specified OpenBenchmarking.org repository that are already installed on the system under test.
Linux Operating System Tests pts/linux
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Linux Operating System.
Solaris Operating System Tests pts/solaris
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Solaris Operating System.
BSD Operating System Tests pts/bsd
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the BSD Operating System.
MacOSX Operating System Tests pts/macosx
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the MacOSX Operating System.
Windows Operating System Tests pts/windows
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Windows Operating System.
Hurd Operating System Tests pts/hurd
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being compatible with the Hurd Operating System.
System Subsystem Tests pts/system
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the System sub-system.
Processor Subsystem Tests pts/processor
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the Processor sub-system.
Graphics Subsystem Tests pts/graphics
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the Graphics sub-system.
Other Subsystem Tests pts/other
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a test of the Other sub-system.
Utility Tests pts/utility
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Utility software test.
Simulator Tests pts/simulator
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Simulator software test.
Scientific Tests pts/scientific
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Scientific software test.
Benchmark Tests pts/benchmark
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Benchmark software test.
Application Tests pts/application
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Application software test.
Game Tests pts/game
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified as being a Game software test.
Smp Tests pts/smp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing smp.
Python Tests pts/python
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing python.
Mpi Tests pts/mpi
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing mpi.
Openmp Tests pts/openmp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing openmp.
Vdpau Tests pts/vdpau
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing vdpau.
Video Tests pts/video
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing video.
phoronix-test-suite/pts-core/phoromatic/pages/phoromatic_results.php 000664 001750 001750 00000007676 12341156552 027563 0 ustar 00michael michael 000000 000000 .
*/
class phoromatic_results implements pts_webui_interface
{
public static function page_title()
{
return 'Test Schedules';
}
public static function page_header()
{
return null;
}
public static function preload($PAGE)
{
return true;
}
public static function render_page_process($PATH)
{
echo phoromatic_webui_header_logged_in();
$main = null;
if(isset($PATH[0]))
{
$stmt = phoromatic_server::$db->prepare('SELECT * FROM phoromatic_results WHERE AccountID = :account_id AND UploadID = :upload_id LIMIT 1');
$stmt->bindValue(':account_id', $_SESSION['AccountID']);
$stmt->bindValue(':upload_id', $PATH[0]);
$result = $stmt->execute();
$row = $result->fetchArray();
if($row)
{
$main .= '
TODO A lot of other result analysis functionality powered by OpenBenchmarking.org to come in next few days...';
}
echo phoromatic_webui_main($main, phoromatic_webui_right_panel_logged_in());
echo phoromatic_webui_footer();
}
}
?>
phoronix-test-suite/CHANGE-LOG 000664 001750 001750 00000417163 12357757560 017424 0 ustar 00michael michael 000000 000000 PHORONIX TEST SUITE CHANGE-LOG
Phoronix Test Suite 5.2.1-Khanino
11 July 2014
- pts-core: Add VDPAU as a dependency to the xorg-video external dependency on more platforms
- pts-core: Don't check OpenBenchmarking.org credentials when the network is down
- pts-core: Rework result-file-to-text sub-command, show text-based graph results
- phodevi: Improve NVIDIA binary driver GPU utilization detection
- phodevi: Add DDE / Deepin Desktop Environment detection
- pts_Graph: Few minor graph alignment corrections
Phoronix Test Suite 5.2.0-Khanino
5 June 2014
- pts-core: Support for GZ compressing result file XML data before uploading to OpenBenchmarking.org
- pts_Graph: Further graphing improvements
Phoronix Test Suite 5.2 Milestone 4
29 May 2014
- pts-core: Always report the CPU scaling governor to the system table
- pts-core: Add auto-sort-result-file option
- phoromatic: Improve the systems' page
- phoromatic: Allow up to three connection failures before quitting
- pts_Graph: Improved, cleaner, and more accurate rendering of the pts_OverViewGraph
- pts_Graph: Make the horizontal box chart graph in good shape
- pts_Graph: Revert earlier render_graph_value_ticks() change by mufasa72 as it produced inaccurate tick values
- pts_Graph: use the horizontal box plot when rendering frame times for large number of results
- pts_Graph: Various other graphing improvements
Phoronix Test Suite 5.2 Milestone 3
22 May 2014
- pts-core: Be more strict in handling DynamicRunCount option
- phoromatic: Cleaning up more of the Phoromatic UI
- phoromatic: Support for updating the system status
- system_monitor: Allow extra idling time at begin and end of testing process
- pts_Graph: Improve formatting of line graph keys
- phodevi: Detection support for KDE Frameworks 5 / Plasma Next desktop
Phoronix Test Suite 5.2 Milestone 2
18 May 2014
- pts-core: Add RUN_TESTS_IN_RANDOM_ORDER environment variable to cause tests to run in a random order
- pts-core: Add sdl2-development to PTS External Dependencies
- pts-core: Fix regression from 5.2m1 that broke some areas of the GUI / web interface
- pts_Graph: Render min/avg/max stats at top of line graphs (thanks to mufasa72)
Phoronix Test Suite 5.2 Milestone 1
8 May 2014
- pts-core: Fix for not writing null test result file titles
- pts-core: Fix & improvements to PRESET_OPTIONS environment variable
- pts-core: Rename old/legacy phoromatic module to phoromaric_legacy
- pts-core: Allow a range of test run options to be inputted (e.g. 2-5) to complement just a single test option or delimited by commas
- pts-core: Fix for NOT saving test results when in batch-run mode and configured against saving
- pts-core: Allow TEST_RESULTS_IDENTIFIER environment variable to be used when running tests unconditionally
- phodevi: Improvement for detecting optimal NVIDIA Linux GPU core frequency on modern GPUs
- phodevi: Add GPU usage reporting support to open-source AMD Radeon driver via RadeonTOP
Phoronix Test Suite 5.0.1-Plavsk
2 April 2014
- pts-core: Add "libudev1:i386" to "32bit-compatibility" external dependency for Ubuntu Linux
- pts-core: Add invalid command helper to force-install sub-command
- pts-core: Add "pcre" external dependency
- pts-core: Add pushover_net module as a way of sending iOS/Android push notifications of results using Pushover.net
- pts-core: Ensure the result file description properly updates when adding to result files with new data
- pts-core: Add edit-result-file command that allows for editing a result file's title and description
- pts-core: Workaround HTTPS OpenBenchmarking.org proxy issue
- pts-core: Improved handling when the system's php.ini is using a restricted open_basedir setting
- pts-core: Arch Linux support improvements
- pts-core: When PTS client fails to find ZIP support, emit a PTS error
- pts-core: Ship an AppData file (phoronix-test-suite.appdata.xml)
- toggle_screensaver: Disable on OS X since there is no support for automatically disabling the OS X screensaver and causes collision with MacPorts
- phodevi: Add extra checks to ensure NVIDIA blob doesn't get reported as Nouveau DDX due to kernel changes
Phoronix Test Suite 5.0-Plavsk
12 March 2014
- pts-core: Improvements to run-random-tests
- pts-core: Support for running the HTML5 UI on Microsoft Windows
- pts-core: Rename RemoteAccessAllowed user configuration option to RemoteAccessPort
- phodevi: Improve MATE detection
- phodevi: Improve desktop environment recognition with $DESKTOP_SESSION
- phodevi: Ensure GCC's minor version number is reported
Phoronix Test Suite 5.0 Milestone 3
3 March 2014
- pts-core: Windows 8.1 support improvements
- pts-core: Add SKIP_TESTING_SUBSYSTEMS environment variable, partially based on former ONLY_TEST_TYPES
- pts-core: Add a run-random-tests command to run random tests/workloads on the system
- phodevi: Improve NVIDIA DDX version detection
- phodevi: Improve audio detection
- phodevi: Add extra fallback for trying to read Radeon DRM core and memory frequencies on recent kernels
Phoronix Test Suite 5.0 Milestone 2
17 February 2014
- pts-core: Add rename-result-file option
- pts-core: WebSocket bug-fixes
- pts-core: Other bug-fixes
- pts-core: Disable the compiler-mask by default on FreeBSD/PC-BSD due to potential test installation issues on 10.0-RELEASE
- pts-core: Split webui command into gui and start-remote-gui-server (local HTML5 GUI support) commands (remote + local HTML5 GUI support)
Phoronix Test Suite 5.0 Milestone 1
6 February 2014
- pts-core: Add web-server-launcher support
- pts-core: Support starting HHVM as a web server
- pts-core: Startup speed optimizations
- pts-core: Cleaned up code error reporting/handling
- pts-core: Add server remote access and password options to user-config.xml user configuration options
- pts-core: Adjust handling of PTS OpenBenchmarking.org downloading of test profile order and hash handling
- pts-core: Reduce unnecessary communication with OpenBenchmarking.org network server
- pts-core: Support system identifier strings up to 64 characters
- pts-core: Add LIMIT_ELAPSED_TEST_TIME to limit the amount of time (in minutes) for a given Phoronix Test Suite process to complete its testing
- pts-core: Allow null descriptor strings
- pts-core: Fix regex for version string
- pts-core: Random fixes
- phodevi: Various improvements
- phodevi: Improved disk scheduler fallback reporting
- documentation: Update to point out new Git location at github.com/phoronix-test-suite/ over Phorogit
- nye_Xml: Fix for writing zeros in XML tags when using the "when not empty" function
Phoronix Test Suite 4.8.6-Sokndal
10 December 2013
- pts-core: Print out pre/interim/post test script outputs when running in debug-run mode
- pts-core: DragonFlyBSD 3.6.0 support improvements
- pts-core: Support using DragonFlyBSD dports package management system for external dependencies
- pts-core: NO_FILE_HASH_CHECKS environment variable also doesn't enforce MD5/SHA256 checks on make-download-cache sub-command
- pts-core: Pass test arguments to pre/interim/post test profile scripts; ESET / Michal Zatloukal patch
- pts-core: Don't do dynamic test run counts when using system_monitor module
- pts-core: Support reading the full terminal width using stty as tput cols doesn't seem to report anything but 80 with shell_exec()
- pts-core: Add "tiff" external dependency for providing libtiff and header files
- pts-core: Don't offer to save test results when using debug-run mode
- phodevi: Support reading monitor vendor/model numbers when using the binary NVIDIA Linux driver, including recent versions
- phodevi: Improve multi-monitor resolution reporting when sharing an X.Org Server
- phodevi: Remove more useless compiler path argument reports
- toggle_screensaver: Auto unload module when no display server found
Phoronix Test Suite 4.8.5-Sokndal
22 November 2013
- pts-core: Improve formatting of interrupt messages with the (default) concise display mode
- pts-core: Don't remove test install files on installation failures
- pts-core: Allow download-test-files command to use OpenBenchmarking.org IDs
- pts-core: Don't dynamically increase the test run count when dealing with cache shares
- pts-core: Fix for not opening the web-browser in batch mode
- pts-core: Add zypper SUSE help support when not finding PHP
- phodevi: Add support for Nouveau PSTATE parsing on Linux 3.13+
- phodevi: Recognize 'HIS' (Hightech Information System) graphics cards
- phodevi: Recognize 'ZOTAC' graphics cards
- phodevi: Fix redundant monitor model reporting detection on Catalyst
- phodevi: Add support for NVIDIA-Settings GPUUtilization in gpu.usage sensor
Phoronix Test Suite 4.8.4-Sokndal
7 November 2013
- pts-core: Allow web browsers and graphics tests to work on $WAYLAND_DISPLAY when $DISPLAY is not set
- pts-core: Fix for libstdc++ on Gentoo external dependency
- pts-core: Add a ResultScale XML tag option for the results-parser to provide custom ResultScale values depending upon selected parser option
- pts-core: Add a ResultProportion XML tag option for the results-parser to provide custom result proportion values depending upon selected parser option
- pts-core: Add ResultPrecision XML tag to results-parser for setting math precision of decimal points on result (default remains 2)
- pts-core: Add support for writing to $INSTALL_FOOTNOTE during test installations to report custom footnote on generated graphs
- pts-core: Add SuiteSparse, TinyXML, DUNE external dependencies
- pts-core: Add opencl header external dependencies for more platforms
- pts-core: Refresh OpenBenchmarking.org repository index data file once upon hitting missing test profile
- pts_Graph: Improve precision of increments for graph results with sub-1 values
- phodevi: Protect against "undefined" memory strings from DMI data
- phodevi: Add Wayland Weston version detection
- phodevi: Detect gnome-shell-wayland
- phodevi: Add support for CPU node-count property for number of physical CPU nodes
Phoronix Test Suite 4.8.3-Sokndal
2 October 2013
- pts-core: Fix openmpi on Gentoo external dependency
- pts-core: Detect graphics comparison when GPU changes with audio string
- pts-core: Don't use HTTPS on proxies when connecting to OpenBenchmarking.org
- pts-core: Add VersionSpecific capability to external dependencies handling for package(s) that may only be in certain OS versions
- pts-core: Ensure xscreensaver is deactivated
- pts-core: Support toggling GNOME3 screensaver on GNOME 3.8+ where org.gnome.desktop.screensaver idle-activation-enabled -> org.gnome.desktop.session idle-delay
- phodevi: Fix for parsing long PCI string values
- phodevi: Improve Intel GPU model detection with recent xf86-video-intel DDX
Phoronix Test Suite 4.8.2-Sokndal
30 August 2013
- pts-core: Fix for reporting environment variables to system notes on system graph table
- pts-core: Fix OpenBenchmarking.org class issue for select code paths
Phoronix Test Suite 4.8.1-Sokndal
14 August 2013
- pts-core: Fix OpenBenchmarking.org log-ins
Phoronix Test Suite 4.8.0-Sokndal
13 August 2013
- pts-core: When PHP is missing, for apt-get/yum distributions report the likely command needed to run
- pts-core: Don't prompt to install missing/failed tests when using the 'benchmark' command
- phodevi: Support for reading the Radeon DRM driver's current core/memory frequencies when DPM is enabled (Linux 3.11+)
- phodevi: Support for reading the top Radeon DRM driver core/memory frequency via dmesg when DPM is enabled (Linux 3.11+)
- phodevi: Support for reading the Radeon DRM driver's current GPU (vddc) voltage when DPM is enabled (Linux 3.11+)
- phoromatic: Updated module against latest upstream Phoromatic.com Server
Phoronix Test Suite 4.8 Milestone 5
6 August 2013
- pts-core: Add php5-json as a dependency now on Debian packages since Ubuntu split it up and no longer in php5-cli
- pts-core: Add support for reporting set kernel module parameters to notes on the system table graph
- pts-core: Add support for reporting of important environment variables to notes on the system table graph
- pts-core: Changes needed for modern Phoromatic
- pts_Graph: Add new automated color chooser for line graph color selection
- pts_Graph: Slight rework to code handling the remove of common words from result identifiers
- phodevi: Add support for Intel DRM driver's gt_max_freq_mhz for obtaining maximum GPU frequency on modern kernels
- phodevi: Add support for Intel DRM driver's gt_cur_freq_mhz for obtaining current GPU frequency on modern kernels
- phodevi: Only prepend AIB vendor to NVIDIA and AMD GPU strings
- phodevi: Add system.kernel-parameters property for reading kernel command line parameters
- phodevi: Add support for checking the __GL_FSAA_MODE environment variable
- phodevi: Add support for checking the __GL_LOG_MAX_ANISO environment variable
- phodevi: Add 0xc36400 super block for CephFS
- phodevi: Add unity-system-compositor version detection
Phoronix Test Suite 4.8 Milestone 4
24 July 2013
- pts-core: Add initial support for test profile's downloads.xml to have a SHA256 hash for files
- pts-core: Rename NO_MD5_CHECKS environment variable to NO_FILE_HASH_CHECKS
- pts-core: Add PTS5 codenames from Tulskaya oblast / Tula Oblast Russian region
- pts-core: Support fixes for Facebook HipHop Virtual Machine for PHP HHVM 2.1.0
- pts-core: Fix text corruption bug with auto shortening of identifiers on multi-way comparisons
- pts_Graph: Fix auto shortening when the first identifier is only one word
- phodevi: Support ECS and eVGA graphics card AIB vendor detection
Phoronix Test Suite 4.8 Milestone 3
19 July 2013
- pts-core: Add few more cases of error detection on failed test install
- pts-core: Round download size totals in the concise display mode for large files
- pts-core: Add missing PreInstallMessage and PostInstallMessage to the OpenBenchmarking.org test profile schema and writer
- pts-core: Allow test results to have "secondary_linked_results"
- pts-core: Add initial support for frame latency / jitter secondary result graphs
- pts_Graph: Assume any version of Google Chrome/Chromium can render SVG
- pts_Graph: Only prepend 'v' to version string on graphs if first character is numeric
- toggle-screensaver: Support doing "xscreensaver-command -exit" when needed
- phodevi: Add more stock fallback display modes
- phodevi: Ensure MB/GB are reported on OS X memory strings
- phodevi: Workaround Linux 3.10 kernel reporting bogus frequencies for scaling_max_freq on some Intel CPUs
- phodevi: Support prepending the graphics card / AIB vendor on GPU strings
Phoronix Test Suite 4.8 Milestone 2
6 July 2013
- pts-core: Expand Mandriva Linux external dependency support to distributions having urpmi
- pts-core: Add Apple OS X font paths for use by the GD graph renderer
- pts-core: Add "/usr/lib64/" to the automated external dependency verification path
- pts-core: Allow passing multiple test identifiers to remove with remove-from-result-file command
- pts-core: Give a warning when the results viewer opens in the KDE Konqueror web-browser
- phodevi: Break operating system string at "("
- phodevi: Don't return "n/a" from LSB release strings
- phodevi: IceWM window manager detection
- phodevi: Add gpu.temp safety check to prevent against AMD Catalyst OverDrive sending garbage
- phodevi: Fix for XRandR resolution query on XMir
- phodevi: Support using systemd-detect-virt as fallback for detecting Linux virtualization method
Phoronix Test Suite 4.8 Milestone 1
20 June 2013
- pts-core: Don't show null error strings on failed test installations
- pts-core: Allow test profiles to pass min/max data results through JSON to graphs using MIN_ and MAX_ prefixes
- pts-core: Support displaying min/max data from the concise (default) display mode text output
- phodevi: MHz -> GHz fix for the cpu.freq sensor on Apple OS X
- phodevi: Add fallback support for using ioreg for calculating sys.power power draw on Apple OS X
- phodevi: Support reporting multiple monitor models from Xorg.0.log
Phoronix Test Suite 4.6.1-Utsira
6 June 2013
- pts-core: Add ONLY_TEST_TYPES environment variable for skipping test profiles that don't belong to a certain hardware type
- pts-core: Ensure extract-from-result-file opens the proper HTML web-browser
- pts-core: Ensure copy-run-in-result-file opens the proper HTML web-browser
- pts-core: Ensure reorder-result-file opens the proper HTML web-browser
- pts-core: Ensure rename-identifier-in-result-file opens the proper HTML web-browser
- pts-core: Ensure remove-from-result-file opens the proper HTML web-browser
- pts-core: Reworked handling of browser launching in batch mode
- pts-core: Launch the web browser to display results when using internal-run mode
- phodevi: Add Haswell BMI2 detection
- phodevi: Support vm_stat with the memory.usage sensor, works on OS X
- phodevi: Add new network.usage sensor for Apple OS X contributed by ESET
Phoronix Test Suite 4.6.0-Utsira
21 May 2013
- phodevi: Report CPU scaling driver along side the CPU scaling governor
Phoronix Test Suite 4.6 Milestone 2
16 May 2013
- pts-core: Support compiler masking on short binaries
- pts-core: More advanced detection of compiler flags within the compiler masking process
- pts-core: DragonFlyBSD external dependency packaging updates
- pts-core: Various fixes
- phodevi: Fix for cpu.freq sensor reading on Apple OS X
Phoronix Test Suite 4.6 Milestone 1
11 April 2013
- pts-core: Official support for Facebook's HipHop HHVM PHP
- pts-core: Introduce new pts_define interface
- pts-core: Add debug-self-test option for running a self-hosting PHP/PTS performance test
- pts-core: Support PHP 5.4's cli_set_process_title() function
- pts-core: For now don't use PHP CURL on HipHop HHVM due to issues
- pts-core: Ubuntu 13.04's sudo seems to have problems with the external dependency handling
- pts-core: Add internal-run command for running benchmarks in semi-automated manner and without uploading data to OpenBenchmarking.org
- phodevi: Fix for memory reporting on OS X
- phodevi: Improved LLVM Clang compiler version detection with modern Apple Xcode
- phodevi: Improved Intel Linux GPU overclocking frequency detection
- phodevi: Fix for detecting new (319.xx) NVIDIA Linux driver X.Org driver
Phoronix Test Suite 4.4.1-Forsand
14 March 2013
- pts-core: Add the arm-linux-gnueabihf library directory for PTS External Dependency checks
- pts-core: Add SKIP_ALL_TEST_SUPPORT_CHECKS environment variable
- pts-core: Fix screen resolution listening when the resolution fails to be detected through Phodevi
- pts-core: Update openSUSE external dependencies
- pts-core: Strip "project" from reported strings
- phodevi: Add support for detecting the Razor-qt desktop environment
- phodevi: No longer report the Catalyst marketing version number since the DDX is no longer reporting it reliably
- phodevi: Detect if the X.Org Server DDX module was unloaded
- phodevi: Reorder DDX driver fallback detection
- phodevi: Cleanse eCryptfs sig and cipher from showing in mounts file
- phodevi: Improve Linux memory RAM type detection
Phoronix Test Suite 4.4.0-Forsand
26 February 2013
- pts-core: Improvement for detecting installed libraries for external dependency handling
- pts-core: Address redundant dash handling within the result file save name
- phodevi: Support for detecting SurfaceFlinger (Google Android)
- phodevi: Ensure non-ASCII characters are removed from Phodevi properties
- phodevi: Support for reading the OpenGL Core Profile information via glxinfo
Phoronix Test Suite 4.4 Milestone 3
14 February 2013
- pts-core: Incorporate xx.yy (of xx.yy.zz) test profile version string into test result comparison_hash
- pts-core: Return contained tests hash for result files as a raw SHA1
- pts-core: Improving passing of compiler flags/options to be reported on test result graphs
- pts-core: Support specifying just relative include files, shared libraries, and command names for file check in PTS External Dependencies
- pts-core: Faster PTS External Dependencies resolution and file checking
- pts-core: Support for falling back right away to the generic file check lists for packages if not supplied by OS-specific list
- pts-core: Add MacPorts PTS External Dependencies support for handling some package dependencies on Apple Mac OS X
- pts-core: Allow 3D tests to run when LLVMpipe OpenGL is present regardless of the display driver loaded for the graphics card
- phodevi: Add file-system magic blocks for eCryptfs, AuFS, LustreFS, and Panasas PanFS
- phodevi: Add AVX2 (Advanced Vector Extensions 2) CPU instruction set detection
- phodevi: Support for detecting the new F2FS file-system
Phoronix Test Suite 4.4 Milestone 2
30 January 2013
- pts-core: Improvement for detecting errors from failed test installations
- pts-core: Allow "Deprecated" flag for ProfileStatus in the XML test profile schema
- pts-core: Support for scanning test run log files automatically to look for errors when tests fail to execute
- pts-core: Remove duplicate "libtool" PTS External Dependency
- pts-core: Complete rewrite of the FreeBSD external dependency handling to use ports collection
- pts-core: Enable BSD support for checking exit codes on test installation and test execution
- pts-core: Various BSD support improvements
- pts-core: Begin on DragonFlyBSD pkgsrc-based external dependency solution
- phodevi: Fix to improve Xfce version detection when Gtk-Warnings are thrown before the version string
- phodevi: Add Enlightenment desktop environment detection support
- phodevi: Add Consort Desktop Environment (GNOME Fork) detection support
Phoronix Test Suite 4.4 Milestone 1
23 January 2013
- pts-core: Introduce 'common-dependencies' concept to PTS External Dependencies
- pts-core: Fix reporting of some already installed dependencies
- pts-core: Support for listing 'local/' tests from the list-supported-tests command
- pts-core: Support for test profiles providing a 'support-check.sh' file
- pts-core: Support for reporting the Graphics AA/AF values to the system notes table
- pts-core: Add a public version of the TODO list
- pts-core: Don't attempt copying install.log to install-failed.log on empty files
- pts-core: Add fallback to allow matching an operating system to an external dependencies package list based upon the detected package manager
- pts-core: When anonymous usage reporting is enabled, report test installation failures to OpenBenchmarking.org for analyzing problem
- pts-core: Support for detecting common errors within test profile install failures and reporting the relevant information to the user
- pts-core: When installing many tests and there are install failures, conveniently show the errors at the end
- pts-core: When installing multiple tests, report any unknown test profiles/suites
- pts-core: Faster loading of list-available-tests command by not forcing all test profile data be downloaded
- pts-core: Progressively download OpenBenchmarking.org in list-available-suites command to display information faster
- phodevi: Improve Nouveau video RAM memory capacity detection on newer Linux kernels
- phodevi: Warning fix for Radeon GPU frequency detection
- phodevi: Drop "special_settings_string" support
- phodevi: Support for checking if the Gallium3D anti-aliasing level was overrode using GALLIUM_MSAA environment variable
Phoronix Test Suite 4.2.0-Randaberg
20 December 2012
- pts-core: Fix SVG render detection on Firefox/Gecko 17.0
- pts-core: Fix for breaking quoted args with internal spaces (reported by _rubio_)
- pts-core: Add glibc-static to build-utilities external dependency on Fedora
- pts-core: Fix for using the SKIP_TESTS environment variable causing a fatal error
- pts-core: Phoronix Test Suite 4.4 is codenamed Forsand
- phodevi: Improved detection of power consumption from batteries in certain Linux configurations
Phoronix Test Suite 4.2 Milestone 3
22 November 2012
- pts-core: Don't report null times for estimated run-time
- phodevi: Support for determining the build configuration on LLVM 3.2 where llvm-ld is llvm-link
- phodevi: Hard fall-back support for detecting the xf86-video-modesetting driver usage
- toggle_screensaver: Disable blanking of the terminal screen when running tests
Phoronix Test Suite 4.2 Milestone 2
22 October 2012
- pts-core: Add list-recommended-tests option for providing subsystem test recommendations based upon OpenBenchmarking.org popularity/usage
- pts-core: Add auto-compare option for automatically determining relevant OpenBenchmarking.org result comparisons based upon software/hardware
- pts-core: Allow passing test profile names to auto-compare to seed it with the test(s) you wish to use for comparison
- pts-core: OpenBenchmarking.org now supports system log payload sizes up to 2MB
- pts-core: Object-ify PTS external dependency handling
- phodevi: Split some functions into new phodevi_base class
Phoronix Test Suite 4.2 Milestone 1
8 October 2012
- pts-core: Support download caches at /media/*/*/download-cache/
- pts-core: Support OPENGL_DRIVER as a run-time variable
- pts-core: For external dependency handling, treat Linaro as Ubuntu
- pts-core: Check for null distribution-specific external dependency package names
- pts-core: Formatting improvements to result-file-to-text output
- pts-core: Add openssl-development as a new test external dependency
- pts-core: Don't warn on out-of-date test profiles when being run in batch mode
- phodevi: Support for reading the VirtualBox version of Beta/RC versions
- phodevi: Better support detection for Exynos ARM cores
- phodevi: Initial support for reading node power over IPMI
- phodevi: Initial support for reading core temperature over IPMI
- phodevi: On Linux attempt to determine the install RAM's vendor and product part number
- toggle_screensaver: Support for module suspending the Xfce4 desktop screensaver using xfconf-query
- pts_Graph: Fix for vertical/rotated text in SVG -> GD translation
Phoronix Test Suite 4.0.1
21 August 2012
- pts-core: Allow shortened test profile versions inputted by user to be expanded to matching latest version in stream
- pts-core: Allow shortened test suite versions inputted by user to be expanded to matching latest version in stream
- pts-core: Add list-unsupported-tests option for debugging purposes
- pts-core: Add subversion as a PTS External Dependency
- pts-core: Add git as a PTS External Dependency
- pts-core: Add superlu as a PTS External Dependency
- pts-core: Add libtool as a PTS External Dependency
- pts-core: Hash within the result file all of the contained tests
- pts-core: Support for anonymous usage reporting of test installation times to OpenBenchmarking.org
- phodevi: Fix memory RAM DIMM count detection in select configurations
- phodevi: Intel GPU string reporting improvement
- phodevi: Support for detecting multiple GPUs on Apple OS X
- phodevi: Support for detecting Gallium3D XA
- phodevi: Support for llvm-link on LLVM 3.2svn
Phoronix Test Suite 4.0.0-Suldal
23 July 2012
- pts-core: Initial implementation of the PTS4 Local Results Viewer
- pts-core: Initial command of ob-test-profile-analyze
- pts-core: Fix for installing Ubuntu external dependencies in a headless mode
- pts-core: Disable webui since it won't be ready until PTS 4.2
- pts-core: External dependencies fix for SUSE Linux Enterprise Server 11
- phodevi: Additional fall-back support when GPU driver doesn't expose all standard mode-setting modes
- phodevi: Support for detecting and reading the version of the Cinnamon Desktop Environment
- timed_screenshot: Overhaul of the timed screenshot PTS module
- timed_screenshot: Compress PNG images
Phoronix Test Suite 4.0 Milestone 4
29 June 2012
- pts-core: Support download caches at /run/media/*/*/download-cache/
- pts-core: Set SKIP_TEST_SUPPORT_CHECKS=1 environment variable for debugging purposes to run tests on unsupported platforms
- pts_Graph: Only render as much room for pts_OverViewGraph as there are for what will be rendered (bar graph values)
- phodevi: Ensure DVD drives don't get reported on BSD operating systems when requesting disk drives
- phodevi: Improve graphics processor detection on Solaris 11 11/11 for non-NVIDIA GPUs
- system_monitor: Add support for handling i915_energy monitor reading in microJoules for each test run
- system_monitor: Place timer support for individual test runs within the module
Phoronix Test Suite 4.0 Milestone 3
22 May 2012
- pts-core: Reformat user configuration input on test run
- pts-core: Improve no-network support handling
- pts-core: Streamline detailed-system-info collection
- pts-core: Invalid command improvements
- pts-core: Various alterations
- pts-core: Make greater use of trigger_error
- pts-core: Generate more relevant default result identifier strings based on subsystems under test on empty input
- phodevi: Support to attempt to detect the file-system underneath ecryptfs
- pts-core: Debian control script update
Phoronix Test Suite 4.0 Milestone 2
29 April 2012
- pts-core: Better recognize some open-source vs. closed-source graphics card/driver combination comparisons
- pts-core: Fix potential crash in list-test-usage command
- pts-core: Support for detecting FSGSBASE and RDRAND on Intel Ivy Bridge
- pts-core: When detecting a CPU comparison, report the detailed CPU system table information
- pts-core: When detecting a GPU/OpenGL comparison, report the detailed GPU system table information
- pts-core: Fix PRESET_OPTIONS failing when specifying an option value rather than its index
- pts-core: Archive vdpauinfo when available
- phodevi: Detection support for Intel IOC (Intel Offline Compiler) OpenCL SDK
- phodevi: Support for detecting GLAMOR (Intel OpenGL-accelerated X.Org Driver) acceleration
- pts_Graph: Fix rounding issue on pts tables that are very wide
- pts_Graph: Add SideViewTable
- documentation: Add a basic text README to the root phoronix-test-suite directory
Phoronix Test Suite 4.0 Milestone 1
12 April 2012
- pts-core: Add AutoSortRunQueue option that by default automatically sorts the test execution queue to run similar tests together
- pts-core: Expose more verbose information within detailed-system-info command
- pts-core: Remove recover-run command since with new PTS4 changes the finish-run command will provide the same functionality
- pts-core: Track the CPU scaling governor configuration between test runs
- pts-core: Report 2D acceleration information to system table report on graphics test runs
- pts-core: Support for showing test notes on multi-way comparisons
- pts-core: Fix compatibility with the new pts_Graph renderer back-end for result-file-to-pdf option
- pts-core: Add p7zip as a possible external dependency
- pts-core: When running OpenCL tests, report the number of available compute cores
- pts_Graph: Begin work on PHP 5.4 "webui" option (currently far from incomplete/experimental)
- pts_Graph: Tweak spacing on pts_Table
- pts_Graph: Re-factor most text vertical offsets to not use dominant-baseline since Opera still doesn't support this SVG attribute properly
- pts_Graph: Begin unifying the Phoronix Test Suite and OpenBenchmarking.org theme
- pts_Graph: Fix for emitted GD poly-lines being always black
- pts_Graph: Begin work on block diagram graph (currently incomplete/experimental)
- phodevi: Remove support for the deprecated HAL Linux fall-backs
- phodevi: LLVM compiler reporting build configuration enhancements
- phodevi: Support for reporting multiple mmcblk* disk devices
- phodevi: Report /sys/hypervisor/type as a system layer
- phodevi: Fix LXDE version detection
- phodevi: Support for reporting the Openbox version
- phodevi: Read Nouveau clock current frequencies rather than maximum frequencies (performance_level)
- phodevi: Initial implementation of the Phodevi VFS (Virtual File-System; Still A Work In Progress)
- graphics_event_checker: Override NVIDIA SyncToVBlank so it's always disabled
- system_monitor: Allow performance per Watt to be automatically calculated if PERFORMANCE_PER_WATT is set
Phoronix Test Suite 3.8.0-Bygland
19 March 2012
- pts-core: Support longer titles on result files (64 characters expanded on OpenBenchmarking.org)
- pts-core: Wine/Windows fixes for items reported by Stefan Dösinger
- pts-core: Minor improvement for analyzing compiler option string differences
- pts-core: Fix for result file analyzing sometimes not returning hardware changes
- pts-core: Better handling for detecting Wine trackers / other trackers using a mix of short SHA1s
- phodevi: Support for determining and appending release dates on GCC snapshots/pre-releases
Phoronix Test Suite 3.8 Milestone 3
13 March 2012
- pts-core: Introduce a look-aside download cache that automatically checks other existing test installations for needed files
- pts-core: Support a last-minute look-aside copy if a previous test in the install queue downloaded the same file
- pts-core: Attempt to detect when any test ends prematurely with an invalid result
- pts-core: Begin reporting test installation compiler attributes from test profiles to the JSON in new result file XML schema
- pts-core: Remove timestamps from captured log files
- pts-core: Support system JSON for each identifier in the result file XML schema
- pts-core: Fix save name issue when dealing with dashes mixed with spaces in save name
- pts-core: Pass compiler options to graphs for reporting
- pts-core: Report compiler configuration (GCC's "Configured with") to test system table when it changes between runs in a result file
- pts-core: Report disk scheduler / mount options to test system table when disk tests are contained in result file
- pts_Graph: Add support for reporting test notes to graphs
- pts_Graph: Restore links within tables for the new pts_Graph table SVG DOM IR
- pts_Graph: Fix for key not appearing on overview graph
- pts_Graph: Embed PTS and OpenBenchmarking.org logos locally within SVG
- pts_Graph: Support for representing web links on images within the new SVG DOM IR
- pts_Graph: Support for word-wrapping test notes with long lines
- phodevi: Fix for Linux memory module count decoding in niche cases on multi-socket systems
- phodevi: Support for detecting all file-system mount options on test install path
- phodevi: Initial work towards Minix 3.2.0 operating system support
- graphics_event_checker: Rewrite of the graphics event checker and enable by default on new installs
Phoronix Test Suite 3.8 Milestone 2
20 February 2012
- pts-core: Allow up to 1MB of system log files to be attached and uploaded to OpenBenchmarking.org
- pts-core: Fix test profile / test suite identifier base name parsing on version handling
- pts-core: Add cairo-development as an external dependency for Cairo drawing library development
- pts-core: Initial support for compiler masking / compiler option intercepting on test installation
- pts-core: Support symlinked ~/.drirc to test install directories
- pts-core: Support for Mac OS X 10.8 "Mountain Lion" Developer Preview 1
- phodevi: Better recognition of Samsung disk drives
- phodevi: NVIDIA CUDA (nvcc) detection and report it to system information compiler area
- phodevi: Detection support for Microsoft Hyper-V virtualization server
- phodevi: Detection support for Parallels Virtualization
- phodevi: Better VMware DDX driver detection when using vmwgfx
- phodevi: Support for detecting VirtualBox version using vboxguest kernel module information
- phodevi: Support for detecting Portland Group (PGI) Workstation compilers
- phodevi: Improved detection of Hitachi disk drives
- phodevi: Support for Mac OS X 10.8 "Mountain Lion" Developer Preview 1
- pts_Graph: Rendering corrections of SVG DOM IR
Phoronix Test Suite 3.8 Milestone 1
17 January 2012
- pts-core: When time-zone is not set in PHP, attempt to query it from the host system
- pts-core: Fix for handling user variable swaps on the result identifier
- pts-core: Major enhancements to MATISK testing module
- pts-core: Fix for some hardware/software comparisons being turned into line graphs
- pts-core: Dump some common / important environmental variables to system log area
- pts-core: Migrate to a JSON-based graph configuration file at ~/.phoronix-test-suite/graph-config.json
- pts_Graph: New version of pts_Graph that uses SVG DOM IR directly
- pts-core: Allow pts_svg_dom to be converted to JPEG/PNG using new library as bilde_renderer replacement
- phodevi: Add some fall-back graphics detection support of Texas Instruments OMAP / Samsung EXYNOS
- phodevi: Fall-back graphics detection support for the ARM Mali
- phodevi: NVIDIA TEGRA hardware detection improvements (as tested on a TEGRA-2 CompuLab TrimSlice)
- phodevi: Further fall-back support for further detecting EXT3/EXT4 file-system from user-space
- phodevi: Improve Arch Linux OS detection on at least ARM platforms
- phodevi: Screen resolution fall-back of reading frame-buffer virtual size
- phodevi: Improved Intel chipset detection parsing from Xorg.0.log when /sys/kernel/debug/ isn't readable
- installer: Installer update
Phoronix Test Suite 3.6.1-Arendal
23 December 2011
- pts-core: Various minor fixes
- pts-core: Support launching the PTS Results Viewer in IceWeasel
- phodevi: Support new Intel GPU name deciphering
- phodevi: BSD support for reading motherboard information from kenv
- phodevi: Support for fbdev X.Org DDX driver detection on fall-back after vesa driver
- phodevi: OLPC Sugar Desktop Environment detection
- phodevi: OLPC Fedora external dependencies support
Phoronix Test Suite 3.6.0-Arendal
13 December 2011
- pts-core: Add "Possible Suggestions" to the invalid command output on install/run/benchmark commands based upon soundex
- pts-core: Add SKIP_EXTERNAL_DEPENDENCIES support as more versatile option to NO_EXTERNAL_DEPENDENCIES
- pts-core: Support for detecting PHP at /usr/pkg/libexec/cgi-bin/php
- pts-core: Support for ClearOS Core Server
- pts-core: Minor enhancements to DragonflyBSD 2.10 support
- pts-core: Fix for error crash on virtual suite execution when selecting all tests to run
- phodevi: CPU, disk, network detection improvements for FreeBSD/PC-BSD
- phodevi: Minor support enhancements to OpenBSD 5.0 amd64
Phoronix Test Suite 3.6 Milestone 4
8 December 2011
- pts-core: Clean-up some of the test run output in the concise display mode
- pts-core: When uploading a test profile to OpenBenchmarking.org, refresh the repository indexes afterwards
- pts-core: When uploading a test suite to OpenBenchmarking.org, refresh the repository indexes afterwards
- pts-core: Issue a notice when running an out-of-date version of a test profile
- pts-core: When cloning results from OpenBenchmarking.org, also fetch the system logs from OpenBenchmarking.org
- pts-core: Add openbenchmarking-changes command for seeing recently changed test profiles from OpenBenchmarking.org
- phodevi: Fix for latest Catalyst Linux driver reporting odd OpenGL version (GL_VERSION) string
- phodevi: Improve Debian non-Linux OS (kFreeBSD/Hurd) detection
- phodevi: Allow lspci information to be used on Debian GNU/kFreeBSD
- phodevi: Fallback for trying to read the Radeon DRM video memory from dmesg
- phodevi: Further fallbacks for DRM video RAM size detection
- phodevi: Add initial GPU voltage sensor
- phodevi: Ensure no available modes are repeated
- pts_Graph: If all result lines are flat (i.e. no change), just convert it to a bar graph
Phoronix Test Suite 3.6 Milestone 3
1 December 2011
- pts-core: On large result files, auto-remove redundant words present in all identifiers
- pts-core: When a command fails, allow helpful user information to be provided on a per-command basis
- pts-core: More efficient trimming of redundant spaces
- pts-core: Fix for identifiers being passed to graphs being corrupted when passing them multiple times
- phodevi: Fix Mesa OpenGL detection on Solaris 11 when the NVIDIA binary blob is installed but using Mesa
- phodevi: Don't report 'blkdev' on Solaris 11 as a disk drive
- phodevi: Change GPU caching to allow overclocked speeds to show without rebooting
- phodevi: Better support xf86-video-ati DDX driver detection in X Server fall-back mode
- system_monitor: Fix for running same test multiple times when system_moitor module is loaded
- pts_Graph: Improve key rendering
Phoronix Test Suite 3.6 Milestone 2
7 November 2011
- pts-core: When the PHP version in use changes, re-run the recommended/required PHP checks
- pts-core: Improve short SHA1 detection for results tracker
- pts-core: Report notice when no OpenBenchmarking.org repository index is present and fails to fetch
- pts-core: Improve Internet connectivity detection check
- pts-core: When reporting a command error, report the most appropriate command name string
- pts-core: Begin work on custom error handler for generated errors in code itself
- pts-core: Add initial support for internal pts-core warning/notice/error handler
- pts-core: Initialize the network support earlier in the client initialization process
- pts-core: When running a test and saving results, show recently saved test results
- phodevi: When QEMU virtualization is detected, try to report QEMU version to system layer
- phodevi: Support for reporting the XOP, FMA3, and FMA4 instruction sets
- phodevi: Begin merging is_genuine() support from Openbenchmarking.org into respective Phodevi components
- phodevi: Improve Catalyst OpenGL driver detection with soon-to-be-released versions
- phodevi: Improve GNOME version detection when using GNOME3 fall-back mode
- pts_Graph: Allow normalized numbers to appear in the result file table
- pts_Graph: When too many lines are being plotted, auto-convert to scalar
- bilde_renderer: Improve automated color selection/shifting
Phoronix Test Suite 3.6 Milestone 1
20 October 2011
- pts-core: Code clean-ups
- pts-core: Allow results to be rendered in reverse order
- pts-core: Add detailed-system-info command for reporting more system attributes
- pts-core: Fix regression of NO_EXTERNAL_DEPENDENCIES and NO_PHODEVI_CACHE not working
- pts-core: Add dump-openbenchmarking-indexes option for debugging
- pts-core: Fix for extract-from-result-file not correctly formatting the new saved results name
- phodevi: No longer report if CPU power savings (CnQ, EIST, etc) is active since it's now widespread across all desktop hardware
- phodevi: Improve detection of low RAM capacities (1GB)
- phodevi: Add support for detecting greater CPU features
- phodevi: Improve system memory detection on Solaris/Illumos operating systems
- phodevi: Improve disk device detection on Solaris/Illumos operating systems
- phodevi: Ensure no words in motherboard identifier string are repeated
- phodevi: Don't print lspci errors
- phodevi: Few string reporting tweaks found from AMD Bulldozer FX system
- phodevi: Virtualization detection support for Xen DomU guests
- phodevi: Detect VirtualBox version from guest VM
- phodevi: Expose a cpu.power sensor that provides monitoring of CPU power consumption (new feature to AMD 15h Bulldozer CPUs)
- phodevi: Convert CPU model strings like 'Intel Core i7 M 620' to 'Intel Core i7 620M' to better reflect Intel product marketing names
- phodevi: Basic ICC detection
- phodevi: Improvements to LLVM/Clang version detection and code revision reporting
- pts_Graph: Allow disconnected lines of results on line graphs
- pts_Graph: Plot entire lines of data on line graphs when there are no identifiers
- pts_Graph: Fix for the averages on line graphs not appearing
- toggle_screensaver: Support for toggling the GNOME3 AC display settings
Phoronix Test Suite 3.4.0-Lillesand
8 September 2011
- pts-core: Download the SHA1 package hash for test profiles/suites when fetching the test itself rather than using repo index
- pts-core: Don't produce an error when open_basedir is in use by the PHP binary running the Phoronix Test Suite
- pts-core: Fix compacting of large multi-way comparisons for compacted systems table view
- system_monitor: Don't log negative values
- pts_Graph: Fix key length detection for the heat-map bar graph
Phoronix Test Suite 3.4 Milestone 3
31 August 2011
- pts-core: Support pts_compression library using the old ZIP API when ZipArchive is not present
- pts-core: Support calling external unzip command if ZIP / ZipArchive API calls fail
- pts-core: Add upload-test-profile command to upload user test profiles to their OpenBenchmarking.org account
- pts-core: Add upload-test-suite command to upload user test suites to their OpenBenchmarking.org account
- pts-core: When running a newer version of the Phoronix Test Suite then last time, update the OpenBenchmarking index cache
- pts-core: Add openbenchmarking-repositories command to list basic information about linked OpenBenchmarking.org repos
- pts-core: Support for reading the estimated run-time of test profiles from OpenBenchmarking.org repo indexes
- pts-core: Support more of the non-SVG graph types within the PTS Results Viewer
- pts-core: Report hardware/software information before running any test
- phodevi: Improve CPU core detection; fixes detection for some ARM devices like HP TouchPad
- phodevi: Improve disk storage detection for mobile devices
- phodevi: Use thermal_zone0 as system temperature if it's not claimed by anything else
- phodevi: Improve memory capacity detection
- toggle-screensaver: Support toggling the GNOME 3.x screensaver using GSettings
- bilde_renderer: Improve detection of web browsers that support SVG and those that need to fall back to PNG
- bilde_renderer: Rewrite the fake ->draw_dashed_line() function to be more efficient and accurate
- bilde_renderer: Improve the PNG back-end to render more closely to SVG back-end
- pts_Graph: Add new system table to use on featured comparisons
- pts_Graph: Introduce new horizontal box plot graph for line graphs where there's too many lines
Phoronix Test Suite 3.4 Milestone 2
15 August 2011
- pts-core: Result parser fix that caused the parser to properly detect the results in some scenarios
- pts-core: Dynamically build all static lists into a new PT2SO temp file
- pts-core: Various code cleaning
- phodevi: Various code cleaning
- phodevi: Support finding Linux PCI audio devices
- phodevi: Report network adapters to system hardware area
- phodevi: Report virtualization platform to system layer field
- phodevi: Improved file-system detection for niche file-systems
- documentation: Take greater advantage of the information that can now be automatically pulled from pts-core
Phoronix Test Suite 3.4 Milestone 1
19 July 2011
- pts-core: Various code clean-ups
- pts-core: Add numeric check to the results parser on bar graphs
- pts-core: Report valid module user commands when querying a module via module-info
- pts-core: Fix SKIP_TESTS handling
- pts_Graph: Various tweaks
- pts_Graph: Introduce radar / spider overview graph
- matisk: Commit initial module
- documentation: Report valid module user commands to the HTML / PDF documentation
- phodevi: Initial support for GNU Hurd operating system (tested on latest Debian GNU Hurd Wheezy snapshot)
Phoronix Test Suite 3.2.1-Grimstad
29 June 2011
- pts-core: Fix regression in evaluating browser opening
- pts-core: Fix browser launching on Microsoft Windows platforms
- phodevi: USB Watts Up Power Meter support
- system_monitor: Report sensors to be logged prior to test execution
Phoronix Test Suite 3.2-Grimstad
15 June 2011
- pts-core: Moscow fixes
- pts-core: Relax the requirements for appended short SHA1 identifiers in determining trackers (request by Wine/CodeWeavers)
- pts-core: Add warning messages when test profile/suite data is empty due to no OpenBenchmarking.org communication
- phodevi: PathCC / PathScale Compiler Suite detection
- phodevi: For audio adapter try to find motherboard audio adapter or sound card rather than GPU integrated audio
- phoromatic: Restore compatibility with current (old) Phoromatic.com implementation
Phoronix Test Suite 3.2 Milestone 4
1 June 2011
- pts-core: Don't confuse changed hardware as being part of a results tracker
- pts-core: Interactive mode improvements for Moscow
- pts-core: Allow unordered multi-way comparisons
- pts-core: Detect short SHA1 hashes at the end of the identifier string as being part of a results tracker
- pts-core: Rework pts_bypass class into pts_flags
- pts-core: Rename SKIP_EXTERNAL_DEPENDENCIES_CHECK to NO_EXTERNAL_DEPENDENCIES
- pts-core: Add AlwaysUploadResultsToOpenBenchmarking option to user-config.xml
- pts-core: Restore support for just passing the test profile base name to SKIP_TESTS environmental variable
- pts-core: Report average value of line graphs to terminal for concise display mode
- phodevi: Intel GMCH thermal monitoring sensor
- phodevi: Support monitoring the GPU power consumption on Intel hardware using the gpu.power sensor
- phodevi: Support determing Intel GPU load via number of commands processed per second
- phodevi: Support for unity-2d desktop version detection (normal Unity has already been supported)
- phodevi: Support for gnome-shell desktop version detection
- documentation: Move out the auto-generated PDF documentation (it will be on web server) and just leave in the HTML documentation in tree at the request of Debian packager
Phoronix Test Suite 3.2 Milestone 3
18 May 2011
- pts-core: Rework test install path handling
- pts-core: Finish eliminating XML-based definitions
- pts-core: Increase PHP compatibility
- pts-core: Facebook HipHop should now fully work with the PTS client
- pts-core: Support real-time monitoring the Nouveau GPU frequency via the gpu.freq call as exposed by system_monitor module
- pts-core: Begin improving the auto-generated result file descriptions
- phodevi: Internal clean-ups
- phodevi: Recognition support for GPFS file-system
- phodevi: Intel SNB frequency reporting
- documentation: Begin auto-generation of HTML documentation in a single file that's the same content as the PDF user guide
Phoronix Test Suite 3.2 Milestone 2
28 April 2011
- pts-core: Interactive mode improvements
- pts-core: Add TEST_RESULTS_DESCRIPTION environmental variable support
- pts-core: Add RemoveTestInstallOnCompletion to user-config.xml options
- bilde_renderer: Fix for assigning the same color from a color name-space cache multiple times
- phodevi: Add support for optionally reading motherboard/system serial number for Moscow
- phodevi: Use PHODEVI_SMART_CACHE on display server/driver
Phoronix Test Suite 3.2 Milestone 1
20 April 2011
- pts-core: Add support for EXTERNAL_PHODEVI_CACHE to load an external Phodevi cache (e.g. within Wine)
- pts-core: Add support for reporting Wine version to the software system layer
- pts-core: Fix for PhoroScript interpreter not running some test profiles under Wine
- pts-core: OpenSUSE external dependencies updates
- pts-core: Drop support for importing module-settings from pre-PTS-2.6 installations
- pts-core: Support OS/distro-specific user-config XML templates
- pts-core: Add IndexCacheTTL OpenBenchmarking.org option for controlling how many days before refreshing index caches
- pts-core: Fix for using TEST_RESULTS_NAME environmental variable
- pts-core: Consider Git SHA1 hash tags as being part of a tracker, just not dates
- pts-core: Fix Debian package generation
- pts-core: A text-driven interactive mode
- pts-core: Support caching OpenBenchmarking.org files in /var/cache/phoronix-test-suite/openbenchmarking.org/
- pts-core: Add download-test-files command back to the Phoronix Test Suite
- pts-core: Fix install-dependencies command when not being run as root
- pts-core: When network connection not available / disabled, only list test/suites where OpenBenchmarking.org cache exists
- phodevi: Don't confuse GCC with LLVM when sym-linking one to the other
- phodevi: Better detection of Nouveau GPU thermal sensors
- phodevi: Support monitoring the CPU temperature from the k10temp hwmon module
- phodevi: Fix system_profiler parsing on Mac OS X 10.7 Lion ("Of" references changed to "of" in Lion)
Phoronix Test Suite 3.0.1
15 March 2011
- pts-core: Restore make-download-cache option and port to PTS3 architecture
- pts-core: Avoid PHP warning when cache share restoration fails
- pts-core: Ensure all rows in system tables are condensed where possible
- pts-core: Don't break dates into multi-way comparisons
- pts-core: Fix for specifying absolute repository/[suite|test] such as for local tests
- pts_Graph: Support multiple identifier lines (delimited by ' - ') on multi-way comparisons with horizontal bar graph
- phodevi: Ensure Apple is reported as the manufacturer on Mac computers
Phoronix Test Suite 3.0-Iveland
26 February 2011
- pts-core: When creating a lock, verify the directory is writable
- pts-core: When running a result file, don't overwrite the description
- pts-core: External dependencies support for Scientific Linux
- pts-core: Fix for handling PRESET_OPTIONS
- documentation: Final update
Phoronix Test Suite 3.0 Release Candidate 2
23 February 2011
- pts-core: Drop dead code of the integrated external results hook since it's still in the result_notifier module with Iveland
- pts-core: Various small fixes and tweaks
- result_notifier: Last minute improvements
Phoronix Test Suite 3.0 Release Candidate 1
14 February 2011
- pts-core: Read support for OpenBenchmarking.org user account client settings
- pts-core: Really fix build-suite this time for writing correct suite-definition.xml files
- pts-core: Support printing OpenBenchmarking.org error messages when result cloning fails
- pts-core: Don't require space after colon on multi-way comparisons
- pts-core: Use new code path for requesting and updating GSID from OpenBenchmarking.org
- pts-core: Rename openbenchmarking-setup command to openbenchmarking-login
- pts-core: Fix show-results command not actually showing the results in the PTS Results Viewer
- pts-core: Check for required PHP functions/extensions earlier on in start-up process
- pts-core: Allow the Phoronix Test Suite to run within Wine
- pts-core: Fix normalizing result values when the result proportion is LIB
- pts-core: Be more liberal in evaluating multi-way tracking to accomodate extra characters
- pts-core: More efficient merging of test result objects in result file
- pts-core: Minor performance optimizations along graph rendering paths
- system_monitor: Fix API breakage in system monitor module
- system_monitor: Better handling of used arguments collection
- result_notifier: Add Intel result_notifier module
- pts_Graph: Begin work on scatter plot graphing support with optional trend/linear regression line
- pts_Graph: Add pts_HeatMapBarGraph type
- pts_Graph: Increase width on tables when the title header is longer than the width of the table columns
- bilde_renderer: Begin work on supporting gradients for the SVG renderer
- bilde_renderer: Initial shading, color gradient support
- bilde_renderer: Initial HSL color support
- phodevi: Support for detecting Ubuntu's Unity desktop
- phodevi: Fallback to reading BIOS information when Intel development motherboards don't report any motherboard information
Phoronix Test Suite 3.0 Beta 4
2 February 2011
- pts-core: Only prompt to upload system logs if there are logs available
- pts-core: Revert to older pts_strings::trim_spaces as the new method causes bad issues in some magical conditions
- pts-core: Fix build-suite writing invalid suite definitions
- pts-core: Fix ~/.phoronix-test-suite/download-cache/ not being recognized as a download cache
Phoronix Test Suite 3.0 Beta 3
27 January 2011
- pts-core: Support for uploading system logs with test results to OpenBenchmarking.org
- pts-core: Add user-config.xml option for always attaching system logs to test results on uploading to OpenBenchmarking.org
- pts-core: Prompt user whether to attach system logs when uploading results to OpenBenchmarking.org
- pts-core: When anonymous hardware reporting is enabled, additionally report select information from the PCI bus
- pts-core: When anonymous hardware reporting is enabled, additionally report select information from the USB bus
- phodevi: File-system detection support for KQ Infotech's ZFS on Linux
- phodevi: Open64 compiler detection support
- phodevi: TCC / Tiny C Compiler detection support
- phodevi: PCC / Portable C Compiler detection support
Phoronix Test Suite 3.0 Beta 2
19 January 2011
- pts-core: Upgrade the .openbenchmarking file support, allows multiple tests/results to be compared
- pts-core: Rewrite result file CSV output
- pts-core: Add openbenchmarking-refresh command
- pts-core: Don't keep increasing the run count when the test is failing more than half the time
- pts-core: Fix identifier case issue from OpenBenchmarking.org
- pts-core: Allow the result buffer to be normalized relative to the other contained results
- pts-core: Don't use OpenSSL HTTPS on non-Linux systems since it's breaking at least under OpenIndiana
- pts-core: Support @ sign in test result identifiers
- pts-core: Support for logging into OpenBenchmarking.org accounts via openbenchmarking-setup
- pts-core: Changes to the user-config.xml specification
- pts-core: OpenSUSE external dependencies update against openSUSE 11.4
- phodevi: Don't report disks that are removable
- nye_Xml: Support for reading the test-definition.xml directly from an OpenBenchmarking.org test profile ZIP package
- bilde_renderer: Support stuffing grouped array point pairs to draw_polygon() rather than linearly listing them
- pts_Graph: Add pts_FilledLineGraph object for providing a filled line graph with combined values
Phoronix Test Suite 3.0 Beta 1
10 January 2011
- pts-core: Fixes for using the local test profile/suite repository
- pts-core: More minor performance optimizations along common OpenBenchmarking.org code paths
- pts-core: External dependencies support for Amazon Linux AMI on EC2 Cloud Service
- pts-core: Fix crashes when using build-suite and result-file-to-suite commands
- pts-core: Fix for list-installed-tests command not listing any installed tests
- pts_Graph: Underlying fixes for OpenBenchmarking.org
- pts_Graph: Properly align background dashed lines
- pts_Graph: Fix divide by zero error on rare cases of inserting zeros to maintain ordering index
- phodevi: Improve NVIDIA GPU model detection when missing glxinfo
- phodevi: Append Gallium3D version number to OpenGL string
- phodevi: Ensure more accurate GPU name reporting than codenames when using Gallum3D drivers
- phodevi: More robust motherboard detection on different sysfs nodes
- phodevi: BSD hardware detection improvements (tested on DragonflyBSD 2.9-DEVELOPMENT)
- phodevi: Detection support for other file-systems via their super blocks (OpenAFS, CIFS, SSHFS, etc)
- phodevi: Support for reading NVIDIA core/memory clock speeds from the Nouveau driver when using latest DRM with performance levels
- phodevi: Support for GPU core thermal monitoring when using the recent Nouveau DRM driver
- phodevi: Support for reading VRAM capacity with TTM drivers when the kernel sysfs debug interface is enabled
Phoronix Test Suite 3.0 Alpha 5
27 December 2010
- pts-core: OpenBenchmarking.org result upload fixes under select conditions
- pts-core: Add support for cloning/grabbing test results from OpenBenchmarking.org
- pts-core: Fix uninitialized pts_result_file_writer on using finish-run command
- pts-core: Change more Phoronix Global references to OpenBenchmarking.org
- pts-core: OpenBenchmarking.org launcher support by passing the .openbenchmarking file as the argument
- pts-core: OpenBenchmarking.org MIME support
- pts-core: Support specifying multple OpenBenchmarking.org IDs to the clone-result command and the results will then be merged
- pts-core: Improve error output when a command doesn't have the necessary arguments rather than using pre-defined user error strings
- pts-core: Don't force loading uninstalled tests from a virtual suite into the pts_test_run_manager
- phodevi: Support appending the Catalyst driver version when the fglrx display driver is loaded
- pts_Graph: With result tables, highlight not only the best values, but the worst values too
- pts_Graph: Support headers/titles on pts_Table objects
- pts_Graph: Support hot-switching between graphs and tables
- bilde_renderer: Blacklist unsupported SVG browsers rather than whitelist supported ones, should be saner this way
- bilde_renderer: Interactive API clean-up
Phoronix Test Suite 3.0 Alpha 4
14 December 2010
- pts-core: Drop support for reference-comparison as its superseded by OpenBenchmarking.org implementation
- pts-core: TEST PROFILE XML SPEC CHANGE: EstimatedLength -> EstimatedTimePerRun
- pts-core: Further work on OpenBenchmarking.org-supported validate-test-profile command
- pts-core: Support new test identifier syntax from OpenBenchmarking.org
- pts-core: Support for uploading test results to OpenBenchmarking.org
- pts-core: Add a local repository for test profiles and test suites that aren't on OpenBenchmarking.org
- pts-core: Restore support for virtual suites using a new design that is supportive of OpenBenchmarking.org architecture
- pts-core: Add list-available-virtual-suites command
- pts-core: Begin revamping the Phoronix Test Suite documentation, add PDF documentation
- pts-core: Improve validation of tests to run in queue, do so earlier in process
- pts-core: Auto-generate the man page from the new documentation system
- pts-core: Auto-generate the help command from the new documentation system
- phodevi: Improved hardware/software string reporting
- phodevi: More concise GPU string reporting
- pts: Move test profiles out of the phoronix-test-suite client and into the OpenBenchmarking.org cloud
- pts: Move test suites out of the phoronix-test-suite client and into the OpenBenchmarking.org cloud
Phoronix Test Suite 3.0 Alpha 3
2 December 2010
- pts-core: Fix test suites failing to run where it'd get caught in an infinite loop
- pts-core: Fix for suite support on Iveland
- pts-core: Add ReferenceID tag to result-file specification
- pts-core: Support for remote download caches on test installation without relying upon pts-install.xml index
- pts-core: Add SaveTestLogs to user-config.xml for now toggling whether to save the test logs
- pts-core: Add an XML Schema XSD covering the result-file
- pts-core: Add an XML Schema XSD covering the test-suite
- pts-core: Add an XML Schema XSD covering the test-profile-downloads
- pts-core: Add an XML Schema XSD covering the results-parser
- pts-core: Add an XML Schema XSD covering the test-profile
- pts-core: On client program startup, report any missing PHP extensions that are required or recommended
- pts-core: TEST PROFILE XML SPEC CHANGE: TestInformation/Version -> TestInformation/AppVersion
- pts-core: TEST PROFILE/SUITE XML SPEC CHANGE: Split RequiresCoreVersion tag into RequiresCoreVersionMin and RequiresCoreVersionMax
- pts-core: Add InternalTags to XML test profile schema
- pts-core: Drop support for ~/pts-test-note as the capabilities are now found within InternalTags using a cleaner method
- pts-core: Better the support for Illumos OpenIndiana b147
- pts-core: Support still saving test results when using the system_monitor module even when all tests being run are of NO_RESULT type
- phodevi: Few Mac OS X support improvements
- phodevi: Support NVIDIA GPU core usage monitoring via nvidia-smi
- phoromatic: HTTPS connection support, install the Phoromatic.com SSL certificate
- pts: Update apache test profile against upstream Apache 2.2.17
- pts: Update build-apache test profile against upstream Apache 2.2.17
- pts: Update build-mplayer test profile against upstream MPlayer 1.0rc3
- pts: Update compress-7zip test profile against upstream p7zip 9.13
- pts: Update ffmpeg test profile against upstream FFmpeg 0.6.1
- pts: Update graphics-magick test profile against GraphicsMagick 1.3.12
- pts: Update pgbench test profile against PostgreSQL 9.0.1
- pts: Update sqlite test profile against SQLite 3.7.3
- pts: Update x264 test profile against upstream x264 2010-11-22
- pts: Update ramspeed test profile against RAMspeed SMP (RAMSMP) 3.5.0
- pts: Add the CLOMP OpenMP LLNL benchmark
- pts: First pass at validating all test profiles
- pts: Verify each upstream test profile's compatibility on Solaris, BSD, and MacOSX
Phoronix Test Suite 3.0 Alpha 2
18 November 2010
- pts-core: THE RESULT FILE XML SCHEMA HAS CHANGED. PTS-CORE SHOULD AUTOMATICALLY BE BACKWARDS-COMPATIBLE IN READING OLD XML FILES, BUT IF YOU EXTERNALLY ACCESS THIS XML DATA IT WILL NEED TO BE UPDATED.
- pts-core: Add the OpenBenchmarking.org HTTPS certificate
- pts-core: Replace tandem_XmlReader with nye_XmlReader as a new PTS DOM-based XML parser
- pts-core: Replace tandem_XmlWriter with nye_XmlWriter as a new PTS DOM-based XML parser
- pts-core: Fix external dependency installation on Debian proper
- pts-core: Make the systems table actually render nicely
- pts-core: Support for OpenIndiana b147
- bilde_renderer: Begin work on a new DOM-based back-end renderer that will eventually form the new rendering interface; currently it's producing suitable SVG
- pts: Add initial support for the Angstrom (OpenEmbedded) Linux distribution with external dependencies
- pts_Graph: Add SVGZ renderer back-end that Gzip compresses the SVG renderer output
- pts_Graph: Various improvements
Phoronix Test Suite 3.0 Alpha 1
9 November 2010
- pts-core: Split part of pts_test_profile into pts_test_profile_parser as the lighter-weight profile parsing parent for use where applicable
- pts-core: Drop option support for required_function_sets as everything is now modularized to objects
- pts-core: Rename AllowGlobalUploads tag in the test profile specification to AllowResultsSharing
- pts-core: Drop P_RESULTS_SUITE_TYPE, P_RESULTS_SUITE_NAME, P_RESULTS_SUITE_VERSION from the results specification
- pts-core: Fix external dependency installation on OpenSUSE when using Zypper
- pts-core: Eliminate "base-test-[profiles,resources]" but for PTS3 they need to all be integrated to a single location
- pts-core: No longer support test profile scripts as PHP files but require them to be SH files
- pts-core: Rename parse-results.xml to results-definition.xml
- pts-core: More aggressive checks in determining whether to dynamically increase the run count for statistical accuracy
- pts-core: Allow the sys.time monitor command to work on PHP installations where PCNTL is not supported or available
- pts-core: When installing test dependencies, double check the depdendencies were installed otherwise prompt the user what to do
- pts-core: Temporarily drop the GTK2 GUI until it's been rewritten to be compliant with the PTS3 architecture
- pts-core: Drop PTS assignments as everything is now worked into object properties or otherwise factored out
- pts-core: THE FILE STRUCTURE OF ALL TEST PROFILES HAS NOW CHANGED
- pts-core: Drop make-download-cache command since it will end up not being needed with PTS3
- pts-core: Add external hooks to the PTS3 user-config.xml for PreTestProcess, InterimTestProcess, and PostTestProcess
- pts_Graph: Introduce Iveland horizontal bar graphs
- pts_Graph: Default to using the SVG bilde_renderer back-end when no other renderer is specified, affects new setups
- install-sh: Installer updates
- pts: Restructure test profiles
- pts: Add nginx test profile as a new NGINX web-server benchmark similar to the apache test profile
Phoronix Test Suite 2.8.1
September 9, 2010
- pts-core: Fix a regression that caused alpha-numeric PTS module option values to fail
- pts-core: During the testing process, set the vblank_mode environmental variable to 0 by default
- pts-core: Fix/enhance pie chart rendering of result data
Phoronix Test Suite 2.8 "Torsken"
August 31, 2010
- pts-core: Support for detecting multiple compilers
- pts-core: Allow the system_monitor module to provide independent graphs for each test result
- pts-core: Warn the user when PHP POSIX is needed and it's not present
- pts-core: When doing a multi-way comparison with line graphs, average the results and convert to bar graphs
- pts-core: Fix test result failing to parse when using LineBeforeHint in pts_test_result_parser
Phoronix Test Suite 2.8 Beta 3
August 24, 2010
- pts-core: When the NVIDIA driver is loaded, better recognize when the GPU is overclocked by the user
- pts-core: Unless a test is using an integrated timer, it must specify a parse-results.xml file even if the log file is just the result to be parsed
- pts-core: Provide clean system monitoring capabilities through the parse-results.xml interface
- pts-core: Replace TIMER_START and TIMER_STOP integrated timer functionality by exposing sys.time in the results parsing interface
- pts-core: Transition pts_result_file_result object to using pts_test_result
- pts-core: Transition pts_test_run_request to use the pts_test_result object
- pts-core: Improve external dependency handling on unsupported operating systems / distributions
- pts-core: Try to avoid using Konqueror for displaying test results as its bad with XSL
- pts-core: Drop analyze-result-file command since its capabilities are to be in the PTS Results Viewer itself
- pts: Add juliagpu OpenCL test
- pts: Add mandelgpu OpenCL test
- pts: Add smallpt-gpu OpenCL test
- pts: Add mandelbulbgpu OpenCL test
- pts: Add opencl test suite
- pts: Update dead download links in several test profiles
- documentation: Add note that PHP PCNTL support is required now for many tests
Phoronix Test Suite 2.8 Beta 2
August 18, 2010
- pts-core: Fix regression in analyze-batch that led to producing unexpected results
- pts-core: GTK2 GUI regression fixes
- pts-core: Various core regression fixes
- pts-core: Clean out parts of the API that are redundant and will be with PTS3
- pts-core: Automatically increase the test run count if at least one test run successfully ran, but at least one test run failed
- pts-core: Add lib3ds external dependency for providing AutoDesk 3DS file support
- pts-core: Add gmp-library external dependency for providing the GNU Multiple Precision Arithmetic Library
- pts-core: Fix for a smaller panel resolution being reported when using NVIDIA's TwinView
- pts: Update build-imagemagick test profile due to old download links that failed, now at ImageMagick 6.6.3
- pts: Add smallpt test profile as a lightweight, multi-threaded path tracing benchmark
- pts: Add gluxmark test profile for the gluxMark OpenGL 3.2 / OpenCL benchmark
Phoronix Test Suite 2.8 Beta 1
August 3, 2010
- pts-core: Report the standard error of test results within the result table
- pts-core: When the run count is dynamically increased (likely due to std dev being too high), report the std dev to the concise display mode
- pts-core: Reinstantiate the pts_client display when calling the run or install process so the debug display mode can be loaded if needed
- pts-core: Drop install-all-dependencies option as running "install-dependencies all" has been the recommended way
- pts-core: Rewritten PTS External Dependency implementation
- pts-core: Rewritten PTS test installation code
- pts-core: Drop PossiblePaths XML tag for test profiles as it is no longer used by any upstream test profiles
- pts-core: Add "overview graph" to the PTS Results Viewer
- pts-core: Add LineAfterHint to parse-results.xml interface for indicating a line after the test results line that's wanted
- pts-core: Add Message tag to test profile XML specification for pairing it with a of a menu option for providing additional information to user
- pts: Update crafty test profile against Crafty 23.3
- pts: Update openssl test profile against OpenSSL 1.0.0a and add Windows support
- pts: Add systester test profile as a new CPU test
Phoronix Test Suite 2.8 Alpha 2
July 22, 2010
- pts-core: Fix recover-run command always reporting the system software has changed, regression from first alpha
- pts-core: More underlying PTS3 changes
- pts-core: Add SKIP_EXTERNAL_DEPENDENCIES_CHECK environmental variable for skipping the PTS external dependency checking on test install
- pts-core: Add rebuild-composite-xml option for rebuilding the composite.xml file in a result file
- pts-core: Fix parse-results.xml MultiMatch not working from a regression in 2.8a1
- pts-core: When installing test dependencies, don't confuse the root user if the user is connected to a Phoronix Global account
- pts-core: No longer rely on passing around $display_mode but utilize pts_client::$display for displaying user I/O
- phodevi: Nouveau detection improvements for when the X Server isn't running
- pts: Update vdrift and vdrift-fps-monitor test profiles against VDrift 2010-06-30
Phoronix Test Suite 2.8 Alpha 1
June 30, 2010
- pts-core: Start work on pts_PieChart for generating pie charts
- pts-core: When installing/running a test, make sure the TEST_ENV_DIR is writable
- pts-core: Add MultiMatch support to the parse-results.xml interface
- pts-core: Don't add empty tests to the test execution queue
- pts-core: Don't delete old test results when running a saved test result identifier and it fails
- pts-core: Don't report test profiles with a NO_RESULT ResultFormat as having failed to run
- pts-core: Drop support for parse-results.php/parse-results.sh, now mandate the parse-results.xml interface as its superior
- pts-core: Add FORCE_MIN_TIMES_TO_RUN environmental variable support
- pts-core: Attempt to better determine inverted multi-way comparisons
- pts-core: Validate test installations to run prior to save prompt
- pts-core: Further tweaking of the PTS Results Viewer
- pts-core: Drop analyze-linear-tracker command as we now auto-determine whether the result file is a tracker-type test
- pts-core: Ensure unique color indexes where possible on rendered graph keys
- pts-core: Lots of internal code changes for PTS3 plans
- phodevi: When LLVMpipe is being used, support modes below 800 x 600
- pts: Drop fgl-glxgears, fract, md-gromacs, memory-bandwidth, super-pi test profiles
- pts: Update mplayer-base with newer MPlayer snapshot and add VA-API support
- pts: Update video-cpu-usage test profile to use Big Buck Bunny 1080p H.264 sample
Phoronix Test Suite 2.6.1
June 3, 2010
- pts-core: External dependencies support for MeeGo
- pts-core: Fix for running merge-results command with un-cloned Phoronix Global IDs
- pts-core: Fix for the system monitoring test library to reflect recent Phodevi sensor API changes
- pts-core: Fix for crammed values under certain scenarios in pts_Graph
- pts-core: Support for reporting installed software / hardware statistics
- pts-core: Fix misaligning some pts_Chart result values when test results are missing for a run
- pts: Update unigine-heaven test profile to Unigine Heaven 2.1
- pts: Update unigine-sanctuary test profile to Unigine Sanctuary 2.3
- pts: Update unigine-tropics test profile to Unigine Tropics 1.3
Phoronix Test Suite 2.6 "Lyngen"
May 24, 2010
- pts-core: When using the finish-run command and finishing the run doesn't complete any new tests, don't delete the results
- pts-core: Allow multiple identifiers to be specified with the GRAPH_HIGHLIGHT environmental variable
- pts-core: Report failed test installations for conditions beyond files missing and non-zero exit statuses
- phoromatic: Allow the Phoromatic client to run a set-context script when told to do so by Phoromatic server
- pts: Add ttsiod-renderer as an OpenMP, entirely CPU/software driven 3D renderer
- pts: Update broken download links
Phoronix Test Suite 2.6 Beta 3
May 13, 2010
- pts-core: More PTS Results Viewer improvements
- pts-core: Support line graphs in charts
- pts-core: Smarter rendering layout of the pts_Graph keys
- pts-core: Add copy-run-in-result-file option
- pts-core: Client tracker improvements
- pts-core: Auto detection of result identifiers to determine if tracker-type testing and apply optimizations if so
- phodevi: Rework entire Phodevi sensor API/architecture
- phodevi: Add support for monitoring the GPU fence count
Phoronix Test Suite 2.6 Beta 2
May 6, 2010
- pts-core: Don't report a test run as failing if you don't save the test results
- pts-core: Show the individualized results table within the web results viewer
- pts-core: Report the difference and standardized deviation to individualized result tables
- pts-core: Various results viewer improvements
- pts_Graph: Support for a universal color table
- pts_Graph: Add GRAPH_COLOR_GROUP_SIMILAR
- pts_Graph: Chart improvements
- pts_Graph: Don't plot points that are bound to the right wall on the line graph
- pts: Add network-loopback test profile
- pts: Add phpbench test profile
- pts: Update iozone test profile and provide Windows support
Phoronix Test Suite 2.6 Beta 1
April 26, 2010
- pts-core: Add ResultBeforeString tag to parse-results.xml interface
- pts-core: When a filesize is not supplied by downloads.xml, try to calculate it using filesize() if applicable
- pts-core: Don't bold the pts_Chart results "winners" when there is only one test run
- pts-core: New PTS Results Viewer interface
- pts-core: Add generated section to PTS result file XML
- pts-core: Many PhoroScript interpreter improvements
- pts-core: Add run-tests-in-suite option for running tests in a suite, but using user-defined settings
- pts-core: Remove install-all and force-install-all options as they have been deprecated since PTS 1.6, use the "all" virtual suite instead
- pts-core: Fix when running the same test identifier for a result file multiple times and its test log dir has rename problem
- pts-core: Add GRAPH_HIGHLIGHT environmental variable for highlighting specific test results when rendering a graph (initially for bar graphs)
- pts-core: Add total_testing_time to the core storage that keeps track of how much time the given system spends benchmarking forever
- phodevi: Improve system thermal monitoring sysfs nodes on Linux
- phodevi: Improve Clang/LLVM compiler detection
- phodevi: Add DEFAULT_VIDEO_MODE environmental variable
- pts: Add compiler suite
- pts: Update crafty test profile against Crafty 23.2
- pts: Update smokin-guns test profile against Smokin' Guns 1.1 Beta 4
- pts: Start porting over numerous test profiles to offer Windows 7 x64 compatibility
Phoronix Test Suite 2.6 Alpha 3
April 12, 2010
- pts-core: If the NO_MD5_CHECKS environmental variable is set, don't perform MD5 file checks on test installation
- pts-core: Don't install the linux-32bit-libraries external dependency by default on 64-bit Linux systems
- pts-core: Fix length of download text progress indicator
- pts-core: Fix regression that caused the merge-results option not to work
- pts-core: Graphing tweaks
- pts-core: Add suite-to-pdf option
- pts-core: Restore compatibility for the Phoronix Test Suite on PHP 5.1 and early PHP 5.2 versions
- pts-core: Installation error string improvements
- pts-core: Run-time string improvements
- pts-core: Rework environmental variables handling
- pts-core: Various fixes
- phodevi: Fix causing a segmentation fault on some Mesa systems
- pts: Update unigine-heaven test profile against Unigine Heaven 2.0
- pts: Update openssl test profile against OpenSSL 1.0.0 upstream
Phoronix Test Suite 2.6 Alpha 2
March 20, 2010
- pts-core: Add /tmp/phoronix-test-suite.active lock
- pts-core: Move module define statements out to using the PTS definitions XML
- pts-core: Optimizations for Phoromatic Tracker
- pts-core: New module settings configuration store
- pts-core: Add support for passing PTS module setup options via an environmental variable to PTS_MODULE_SETUP
- pts-core: Expand the capabilities of the parse-results.xml interface
- pts-core: Add image quality comparison support to the parse-results.xml interface
- pts-core: Add support for harmonic means for Phoromatic Tracker
- pts-core: Consolidate pts_Graph configuration setup
- pts-core: Consolidate user configuration setup
- pts-core: Rewrite and make working pts_Chart
- pts-core: Add more files/commands to log for the system logs
- pts-core: Faster, more efficient rendering of graphs
- phoromatic: When setting up the Phoromatic module, allow the system description to be inputted and then sent to the Phoromatic Server
- phodevi: Support for Clang compiler
- phodevi: Quirk handling for PCLinuxOS as it doesn't know how to properly identify itself
- phodevi: Support for reading the default and current GPU/memory frequencies with ATI Radeon KMS power management on Linux
- phodevi: Update system memory sensor
- pts: Add xplane9-iqc test profile for image quality comparison tests on X-Plane 9
- pts: Drop compliance-ogl test profile
Phoronix Test Suite 2.6 Alpha 1
March 9, 2010
- pts-core: No longer statically code define statements for XML parsing, move into pts-core/definitions XML statements
- pts-core: Add EST_TIME_REMAINING variable assignment that has the estimated run-time remaining during testing
- pts-core: Add RequiresCoreVersion tag to XML test suite specification similar to the test profile implementation
- pts-core: Don't run graphics tests if the driver configuration is known to not support 3D acceleration at all
- pts-core: Temporarily drop support for PTS weighted suites until it is rearchitected
- pts-core: Add new interface (parse-results.xml) for handling results parsing of tests using an XML file with a result template
- pts-core: Add ProfileVersion tag to XML result file specification
- pts-core: Add some of the Phoromatic Tracker helper scripts
- phodevi: Add support for detecting Reiser4 file-system via its super magic block
- phodevi: Report hard drive manufacturer when detected and prepend to the model string
- phodevi: Add initial audio / sound card detection support
- phoromatic: Add support for powering off the system if told to do so by the Phoromatic server
- phoromatic: Add support for restarting the system if told to do so by the Phoromatic server
- phoromatic: Wait an additional 90 seconds on connectivity problems
- phoromatic: Report estimated time remaining to test completion to Phoromatic server
- phoromatic: Add client support for the Phoromatic trigger interface
- phoromatic: Support for reading the Phoromatic server build/version
- bilde_renderer: Fi x the SVG renderer back-end from battling multiple graph style values contained in a single page
- pts_Graph: Line graphing improvements for Phoromatic Tracker
- pts-core: Various fixes and improvements
- pts: Add adjustable record / block size to iozone test profile
- pts: Remove dead download links
- pts: Update openarena test profile against OpenArena 0.8.5 patch
- pts: Update xplane9 test profile against XPlane 9.45 timedemo
Phoronix Test Suite 2.4.1
February 18, 2010
- pts-core: Pass PTS result objects directly to pts_Graph
- pts-core: Add WatermarkURL option to graph-config.xml
- pts-core: Drop support for the PTS_USE_OLD_DOWNLOAD_CODE override for using the old networking code
- pts-core: Faster merging of test results and pair similar tests together
- pts-core: When network support is down, don't prompt to upload results to Phoronix Global
- pts-core: When user fails to agree to the first-run user-agreement, don't bother asking about anonymous usage reporting
- phoromatic: Add phoromatic.clone-results option for cloning test results from a Phoromatic repository, when the clone option is enabled from the server side
- phoromatic: Add phoromatic.system-schedule option for seeing the system's test schedule from the Phoromatic server
- phoromatic: Add phoromatic.system-schedule-today option for seeing the system's test schedule for today from the Phoromatic server
- phoromatic: Add phoromatic.send-message option to send any bits of information to the Phoromatic Server to list in the system warning area for that system
- phoromatic: Support for uploading test and system logs to Phoromatic server
- bilde_renderer: Add initial interactivity support for on-click events with some drawing elements
- toggle_screensaver: Properly stop and start the screensaver using qdbus on KDE4
- pts_BarGraph: Report standard deviation on test results when hovering over a bar with a supported renderer
- pts_LineGraph: Add switch with new path for handling many identifiers in different way
- pts_LineGraph: Add last values to line graph display
- pts: Drop MD5 hashes in the wine-* humus tests
- pts: Various small fixes
- pts: Don't use parallel make jobs with encode-mp3 test profile due to Moblin build problems
Phoronix Test Suite 2.4.0
February 2, 2010
- pts-core: Report to test notes area of PTS test results if the system was using eCryptfs
- pts-core: Fix GTK2 GUI bug of multiple instances of the GTK2 GUI test run-time window being shown
- pts-core: Support passing multiple tests/suites to download-test-files option
- pts-core: Allow arguments to be passed and used by the build-suite option for specifying tests/suites
- pts-core: Fix a bug that caused the basic display mode to be used on Anzhofen
- pts-core: Add task-cache-reference-comparison-xml option for more easily building caches on Anzhofen
- phodevi: Workaround for Radeon KMS not reporting all available modes when connected to a 2560 x 1600 panel
- pts_LineGraph: When there becomes too many point identifiers to be plot (such as with Phoromatic Tracker), only plot every so often
- phoromatic: Allow unscheduled test results to be uploaded to Phoromatic server, if the settings enable it
- pts: Add pts-desktop-live suite for Anzhofen
- pts: Add pts-netbook-live suite for Anzhofen Netbook
- pts: Update out of date download links within test profiles
- pts: Update page size for iozone per input from Oracle
Phoronix Test Suite 2.4 Beta 3
January 25, 2010
- pts-core: When running on BSD with Linux binary compatibility loaded, download the Linux-specific files for a test too
- pts-core: Better handling of missing tests
- pts-core: Faster reference system comparison support
- pts-core: Build reference system comparison cache when starting the GTK GUI
- pts-core: Add ReferenceSystems tag to user-config.xml for specifying extra reference system comparison IDs
- pts-core: Add width and height attributes to SVG graphs to show better in more web browsers with the PTS Results Viewer
- pts-core: New integrated network download engine
- pts-core: Add Timeout tag to the user-config.xml for adjusting the network read timeout
- pts-core: Launch a network support and proxy interface when launching the GTK GUI and no Internet is detected
- pts-core: Add debug-test-download-links option to find broken download links in test profiles
- phodevi: Support reading the system temperature through the hwmon sysfs interface
- phodevi: Fallback support to read the current monitor mode from xdpyinfo when available
- phodevi: Support for reading newer version numbers of the KDE Software Compilation desktop
- phodevi: Better CPU thermal monitoring
- phodevi: Faster / more efficient reading of sysfs nodes
- pts: Add unpack-linux test as a disk benchmark for timing how long it takes to extract the Linux kernel source
- pts: Drop filesystem test suite as its similar to the disk test suite, so move all the tests there
- pts: Add compilebench test profile for Oracle's Compile Bench
- pts: Update many out of date download links within test profiles
Phoronix Test Suite 2.4 Beta 2
January 21, 2010
- pts-core: Preserve decimal accuracy based upon result values
- pts-core: Change the padding depth for the concise display mode
- pts-core: If MD5 fails when copying a file from a local download cache that has been verified, try a second time
- pts-core: Support specifying multiple result identifiers to extract when using extract-from-result-file
- pts-core: Show the "latest run time" with the info command when reading a test
- pts-core: Move result-viewer files within the static directory
- pts-core: Begin reworking the code path for when running on an operating system without PTS external dependencies support
- pts-core: Better support for OpenBSD
- pts-core: Add "File Found" reporting to the display mode interface
- pts-core: Support reading proxy settings (if not set in user-config.xml) from http_proxy environmental variable
- pts-core: Various code cleaning
- pts-core: Use PTS_CORE_VERSION rather than PTS_VERSION for RequiresCoreVersion tag in PTS test profile
- pts-core: Don't write empty system information XML to results file
- phodevi: Further fallback support for BSD graphics card detection
- phodevi: Add sensor for system fan speed monitoring
- phodevi: Rework screen resolution mode code
- pts_Graph: Be smarter with the steps to use for the axis on the scale
- bilde_renderer: Don't use any GD-based renderer if no TTF font files can be found
- pts: Update download links for pgbench test profile
- pts: Update server and workstation test suites
Phoronix Test Suite 2.4 Beta 1
January 14, 2010
- pts-core: When using the GTK2 GUI, support handling license type for suites
- pts-core: Improve reporting of empty lists and other areas
- pts-core: Support reading from a remote PTS download cache via proxy
- pts-core: When copying a MD5-matched file from a local PTS download cache, still verify that the MD5 of the copied file matches
- pts-core: Cleanup test installation code
- pts-core: Initial support for Debian's GNU/kFreeBSD
- phodevi: Windows improvements
- phodevi: Improve NVIDIA binary driver detection without glxinfo
- phodevi: Improve Mesa/DRI driver detection without glxinfo
- phodevi: Rework the screen resolution detection code for Linux/BSD/OpenSolaris code paths
- phodevi: Support reading the CPU fan speed for more systems
- pts: Result reporting fix for specviewperf10 test profile
Phoronix Test Suite 2.4 Alpha 3
December 22, 2009
- pts-core: Overhaul pts_test_result class
- pts-core: Add open_basedir php.ini setting check when starting the Phoronix Test Suite
- phodevi: Add CPU fan speed sensor, currently implemented on Linux through sysfs interface
- phoromatic: If initial Phoromatic server connection fails, wait 60 seconds and try again
- phoromatic: If uploading of test results to Phoromatic server fails, wait 60 seconds and try again
- tandem_XmlReader: Drop support for XML tag/file caching in the XML parser since now its more efficient and effective to let pts-core handle it
- pts: Update ramspeed test profile against RAMspeed 2.6.0
Phoronix Test Suite 2.4 Alpha 2
December 15, 2009
- pts-core: Start work on having a panel in the GTK2 GUI for managing the PTS modules
- pts-core: Add and implement PostArguments tag to test profile XML specification
- pts-core: Export TEST_ as the HOME directory, similar to the variables when extending a test that are set
- pts-core: Add post-cache-share script support for test profiles to optionally implement that take advantage of PTS cache shares
- pts-core: Merging improvements for handling image quality comparisons, plus other safeguards merged too
- pts-core: More aggressive sleep timer between tests, don't sleep before entering a PTS cache share
- pts-core: Add analyze-image-delta option for carrying out delta image comparisons of test results
- pts-core: Only show "Test All Options" option for tests when there is more than one option to select
- pts-core: Log to the pts-install.xml how long it takes for a test to install
- pts-core: Add pts-test-installation-viewer.xsl for viewing pts-install.xml files
- pts-core: Support merging pts_result_file objects that also have results that need to be renamed
- pts-core: Phoromatic updates
- pts-core: Add analyze-linear-tracker command option
- pts-core: With analyze-all-runs, refresh-graphs, and analyze-linear-tracker there is no need to reprocess the entire XML file, so be more efficient
- phodevi: Clean phodevi_linux_parser::read_sys_dmi() against hal-values-remove.list
- phodevi: Better handle NVIDIA's detailed OpenGL version string
- phodevi: Support for detecting the X.Org vesa driver
- phoromatic: Add support for the server to tell the client module whether to run the install command prior to testing (change from the web interface)
- phoromatic: The Phoromatic server (through the settings area) can now tell test machines to exit PTS when testing is done for the day
- bilde_renderer: Add draw_rectangle_with_border to the drawing API
- bilde_renderer: Add draw_poly_line to the drawing API
- bilde_renderer: Add draw_dashed_line to the drawing API
- bilde_renderer: Use the BILDE_RENDERER define or environmental variable to override the renderer
- bilde_renderer: Vastly improve the SVG renderer back-end, make it proper for Phoromatic usage
- pts: Add vdrift-fps-monitor test profile that charts out the FPS on a line graph during the testing process
- pts: Rename the iqc-nexuiz test profile to nexuiz-iqc
- pts: Add etqw-demo-iqc test profile for image quality comparisons with ET: Quake Wars Demo
- pts: Add iqc test suite for image quality comparison tests
- pts: Begin supporting unigine-heaven test profile
- pts: Overhaul the tiobench test profile
- pts: Add fs-mark test profile
- pts: Add daily-system-tracker test suite
Phoronix Test Suite 2.4 Alpha 1
December 2, 2009
- pts-core: Change default display mode to the pts_concise_display_mode object
- pts-core: Add dump-core-storage option for dumping the contents of the core.pt2so object
- pts-core: Add dump-phodevi-smart-cache option for dumping the contents of the Phodevi Smart Cache from core.pt2so
- pts-core: Initial Windows support for the Phoronix Test Suite; this drop is mostly the .bat launcher and initial hardware detection support
- pts-core: Support loading pts-core objects deeper in the directory
- pts-core: Move the PTS External Dependencies XML and scripts from pts/ into pts-core/static/
- pts-core: Move pts-core/scripts/ contents to pts-core/static/scripts/
- pts-core: Drop support for UnsupportedPlatforms tag in PTS test profile specification, tests should be using SupportedPlatforms tag
- pts-core: Add support for IMAGE_COMPARISON type in ResultFormat spec of a test profile
- pts-core: Add AllowGlobalUploads tag to XML test profile specification to allow a test profile to block against Phoronix Global uploads
- pts-core: Add AutoSaveResults tag to XML test profile specification to allow a test profile tu automatically have the results saved without the user option
- pts-core: Hook in the Phoronix Test Suite proxy support to curl and wget
- pts-core: Add prev-test-identifier virtual suite of whatever the previously executed command(s)
- pts-core: Add prev-save-identifier virtual suite of the previously saved identifier (if available)
- pts-core: Add export-profile-package option for exporting a PTS test profile as a zip package
- pts-core: Add import-profile-package option for importing a PTS test profile from a zip package
- pts-core: Add support for /opt/bin/php
- pts-core: Add PTS External Dependencies support for Optware
- pts-core: Add yasm to PTS External Dependencies
- pts-core: Support using PHP's cURL library for handling downloads when available
- pts-core: Calculate download speeds for each test file download, to provide estimations on future downloads for how long it may take to download
- pts-core: Drop support for SH PTS modules, since it was rarely used and just added overhead to pts-core module architecture
- pts-core: Only process a PTS module API call to a module if it actually hooks into that method
- pts-core: When running analyze-batch on a result file that already has line graphs, don't do funky things with the results
- pts-core: PTS module architecture revisions
- pts-core: Alias CC=gcc if gcc is present and cc is not
- pts-core: Always save test log files, make them easily accessible from the PTS Results Viewer
- pts-core: Add TEST_COUNT_PASS graph type for ResultFormat
- pts-core: When running on BSD, detect if Linux compatibility support is loaded and then allow Linux-supported test profiles to run
- pts-core: Add debug-install option
- pts-core: Fix files not downloading when PromptForDownloadMirror is set to TRUE
- pts-core: Address several PHP E_STRICT warnings
- pts-core: Better alignment for the concise display mode interface
- phodevi: Split out phodevi_parser module into phodevi_linux_parser, phodevi_osx_parser, and phodevi_solaris_parser for OS-specific functions
- phodevi: Avoid situations of the manufacturer/vendor string being repeated in the motherboard property
- phodevi: Add device notes and special settings string functionality to API
- phodevi: Initial support for Palm webOS platform
- phodevi: Better compiler detection support, should work better on webOS
- phodevi: Add support for monitoring battery current (initially limited to the Palm Pre)
- phodevi: Support reading the system temperature through the thermal sysfs interface on Linux
- phodevi: Add system.iowait sensor for the system's iowait as a percentage
- phodevi: Add disk-speed.read and disk-speed.write system sensors in MB/s
- phodevi: Support reading the current screen resolution from the kernel DRM when using a KMS driver
- phodevi: Improve NVIDIA GPU detection on BSD systems when glxinfo is not installed
- phodevi: Improve BSD hard drive detection
- phodevi: Support monitoring the system's battery power consumption rate on BSD
- phodevi: CPU usage monitoring support for BSD
- phodevi: Support monitoring the system's battery power consumption rate on OpenSolaris
- phodevi: Motherboard chipset vendor detection on OpenSolaris
- phoromatic: Use a locking system to prevent multiple copies of the Phoromatic module from running simultaneously
- embedded: Add a PTS module named "embedded" that is a collection of options to help those running PTS on embedded/mobile devices
- system_monitor: Append sensor monitoring graphs to end of result file during testing
- system_monitor: Rely on sensor results to be outputted to the test results file
- scp_result_pusher: Add a PTS module for pushing test results automatically to a remote destination over SCP
- pts_Graph: Add pts_ImageComparisonGraph object
- pts_LineGraph: Don't plot lines all the way to the end unless relevant
- pts_LineGraph: Render average, peak, and low values at the top of the graph when showing percentages
- pts_LineGraph: Improved plotting of points under certain conditions
- pts: Add initial iqc-nexuiz test profile for image quality comparison support
- pts: Add x264 test profile for x264 H.264/Y4M encoding application
- pts: Add idle-power-usage test profile
- pts: Add battery-power-usage test profile
- pts: Add himeno test profile for the Himeno pressure solver benchmark
- pts: Update mplayer-base test profile against MPlayer 2009-11-28 SVN snapshot
- pts: Revert gnupg test profile to use GnuPG 1.4.9 until the proper, working GnuPG2 patches are received
- pts: Add gcrypt test profile that benchmarks libgcrypt's CAMELLIA256-ECB cipher
- pts: Add bullet test profile for the Bullet Physics Engine
- pts: Add daily-kernel-tracker test suite
Phoronix Test Suite 2.2.0 "Bardu"
November 16, 2009
- pts-core: Various code path optimizations and cleaning
- pts-core: Add dump-system-sensors option to display a readout of all supported Phodevi sensors and their values and print unsupported sensors
- pts-core: Fix TEST_RESULTS_NAME environmental variable not working
- pts-core: Fix network-setup network testing check actually use the proxy, hook in the HTTP proxy override properly
- pts-core: Clean-up download cache directories code
- pts-core: Add "installed-tests" virtual suite of tests that are currently installed
- pts-core: On GTK2 GUI Don't show buttons/header for reference system comparisons for results when there are actually no results to compare
- pts-core: Small OpenSolaris 2010.02 support updates
- pts-core: Various small bug fixes
- phodevi: Support for the GPU fan-speed sensor with ATI graphics driver
- phodevi: Add support for reading the stock GPU engine/memory clock when using the open-source Radeon driver
- phodevi: Fixed detection of the xf86-video-radeonhd display driver
- phodevi: Fix throwing SUSE Linux 11.2 into an infinite loop when running "X -version" on this OS, "Xorg -version" works fine instead
- pts: Update darwin test suite
- pts: Support using zypper to install external dependencies on SuSE/OpenSuSE since it can ignore missing / removed packages without failing
- documentation: Update documentation for Phoronix Test Suite 2.2
Phoronix Test Suite 2.2 Beta 3
November 9, 2009
- pts-core: Fix API breakage for installing dependencies from install-dependencies option call
- pts-core: Report the disk scheduler to the test notes area when a disk test is run
- pts-core: Add SelectSuitesOrTests tag to user-config.xml for selecting between tests / suites showing by default in GUI
- pts-core: Add initial analyze-result-file command for showing basic analytical / stats for a given result file
- pts-core: Support showing information from info command when supplying a virtual suite
- pts-core: Don't contain tests that are of license RETAIL or RESTRICTED in the "all" virtual suite
- pts-core: Fix where recover-run would not recognize the result file if there was not at least one successful one previously
- pts-core: When using recover-run, put back in batch mode state if the test was originally run in batch mode
- pts-core: Validate test installations earlier in the test run process
- pts-core: When clicking "View Results" from GTK2 GUI, generate graphs if needed
- pts-core: Fix regression that broke reference comparisons and removing identifiers from result files
- phodevi: Add support for GPU fan speed monitoring (currently only implemented for NVIDIA's binary display driver)
- phodevi: Add property to disk object for reading the scheduler in use
- phodevi: DMI parsing support on Linux through /sys/class/dmi/id/ interface, for now implement motherboard way
- phodevi: Detect and support reading the X.Org DDX driver module version for Cirrus and other obscure drivers/hardware
- pts: Update for Fedora external dependencies XML
- pts: Start adding new reference comparison systems with runs against Phoronix Test Suite 2.2
Phoronix Test Suite 2.2 Beta 2
November 3, 2009
- pts-core: With toggle_screensaver module, disable the display(s) from sleeping when on AC power in GNOME during testing
- pts-core: Clean-up more code used during the test execution process
- pts-core: Rename SaveSystemDetails user-config.xml option to SaveSystemLogs
- pts-core: Add option to archive a test's installation log to a sub-directory of the results file
- pts-core: Check for user-config-template.xml template in pts-core/static/
- pts-core: Add PTS Desktop Live user-config.xml template
- pts-core: Move txt file lists from pts-core/static/ to pts-core/static/lists/
- pts-core: Allow test options to be specified externally via PRESET_OPTIONS environmental variable (see commit for example)
- pts-core: Fix bug where from GTK2 GUI selecting to not save test results would prompt you from CLI to save results or not
- pts-core: Vastly re-work the pts-includes-run_options code
- pts-core: Move images to pts-core/static/images/
- pts-core: Create modules tag section in user-config.xml, move default modules to load into the LoadModules tag instead of text file
- pts-core: Start adding user-interface options to the user-config.xml
- pts-core: Updates for library / Phoromatic server usage
- pts-core: Don't ask user whether to try again on a failed test download when in automated/batch mode
- pts-core: When installing external dependencies fails, continue installing just the tests where the dependencies are satisfied]
- pts-core: Add __event_user_error hook to PTS module API
- phoromatic: Prevent overloading the Phoromatic server if the client module keeps trying to communicate too many times per minute
- phoromatic: Support for reporting system/PTS warnings to Phoromatic server
- phoromatic: Support for setting the default system title on the Phoromatic server as the test system's hostname
- phoromatic: Report new system software / hardware for test system to Phoromatic server when appropriate
- phoromatic: Add support for uploading Phoromatic-sanctioned test results to Phoronix Global, if Phoromatic server tells it to
- phoromatic: Add support for Phoromatic server to tell client whether or not to archive the test results locally upon completion
- phodevi: Improve phodevi smart caching, bring actual caching into pts-core and place the cache_store in the core.pt2so
- phodevi: Fix possible space when getting resolutions from xrandr
- phodevi: Don't report GPU memory clock in GPU string when GPU memory clock is 0MHz (NVIDIA reports this for at least some IGPs)
- pts: Add workstation test suite
- pts: Add disk-ssd test suite
- pts: Revamp server test suite
- documentation: Add a basic reviewer's guide
Phoronix Test Suite 2.2 Beta 1
October 27, 2009
- pts-core: Fix for running result files that have forced AA/AF levels and then fail to merge
- pts-core: On missing timezone setting, set to UTC if the PHP version is 5.3.0 or newer, emits a warning otherwise
- pts-core: Rename change-results-display-order option command to reorder-result-file
- pts-core: Add edit-result-file meta option
- pts-core: Add MinimumLength tag to XML test profile specification
- pts-core: Add MaximumLength tag to XML test profile specification
- pts-core: Few fixes/changes to test execution code
- pts-core: When dealing with the stats support for validating test results, don't increase the run count prematurely
- pts-core: Fend off divide by zero errors in the standard deviation code
- pts-core: Improve performance of PTS assignment functions
- pts-core: Don't remove the PTS run_lock when running a secondary instance of PTS
- pts-core: Add debug-run option to provide more run-time information to assist test profile writers in debugging / verifying profiles
- pts-core: Drop central pts-core debugging code since it was very rarely used and not too helpful
- pts-core: Add in additional LC_NUMERIC override to eliminate non-US decimal problems with test results
- pts-core: Various test run code clean-ups
- pts-core: With make-download-cache option only check for downloads on installed tests
- pts-core: Support "all" as an argument with remove-installed-test option
- pts-core: Improve object security
- pts-core: Improve desktop responsiveness of GTK2 GUI
- pts-core: Add automated Internet connectivity check on start
- pts-core: More efficient paths for determining reference system comparisons
- pts-core: Add __pre_test_download, __interim_test_download, and __post_test_download hooks to the PTS module API
- pts-core: Start work on GTK2 GUI interface for during the test installation and run processes
- pts-core: Rewrite web-browser launching code
- pts-core: Rework list-tests option code
- pts-core: Build select caches on start-up when running GTK2 GUI
- pts-core: New bash completion support
- pts-core: Support using the update_checker module from the GTK2 GUI for notifying of new PTS releases
- pts-core: Add initial bisect module to allow users to hook PTS into any Git repository for bisecting with external script
- pts-core: Use pts_test_profile within pts-includes-run
- pts-core: Check for allow_url_fopen php.ini setting if it's disabled rather than letting it produce a warning
- pts-core: Rename the pts_standard_display_mode to pts_basic_display_mode
- pts-core: When running in batch mode or with debug-run, at end of testing report any tests/options that failed to properly run
- pts-core: When tests are not installed when called in run-test option, prompt the user to automatically install the tests from there
- pts-core: At end of the install process, list all tests that failed to properly install
- pts-core: Various bug fixes
- phodevi: Fend off possible infinite loop on OpenBSD when phodevi_parser::read_sysctl() fails
- phodevi: Fix for reporting fglrx version string with newer versions of ATI Catalyst Linux driver
- phodevi: Improve motherboard detection on BSD operating systems
- phodevi: Improve CPU temperature detection on BSD operating systems
- tandem_Xml: XML parsing fix when reading
- pts: Fix for prey test profile
- pts: Update openal external dependency in fedora-packages.xml
- pts: Update compress-7zip test profile against p7zip 9.04 version
- pts: Update sqlite test profile against SQLite 3.6.19
- pts: Update wine-unstable base test profile against Wine 1.1.32
- pts: Update graphics-magick test profile against GraphicsMagick 1.3.7
- pts: Use fedora-packages.xml external dependencies on CentOS instead of centos-packages.xml that is the same but less maintained
- pts: Upstream request regarding cmake change for minion test profile
Phoronix Test Suite 2.2 Alpha 4
October 12, 2009
- pts-core: Fix regression that caused running/installing suites to fail from Alpha 3
- pts-core: Add support for stopping/skipping the current test by touching ~/.phoronix-test-suite/skip-test during the process
- pts-core: Remember radio and check button selects in menu on GTK2 GUI for the duration of the program
- pts-core: Optimize a few common code paths
- pts-core: Improve detection of Catalyst driver with newer releases
- pts-core: Don't go awry when computing standard deviation on an array that may also contain errors from a test run due to parsing failure
- pts-core: Fix fatal error message with GtkWindow missing
- pts-core: Fend off possible warnings on pts_test_option
- pts-core: Rename pts_batch_display_mode to pts_concise_display_mode
- pts-core: Fix in subtitle reporting on graphs for tests with no options under certain conditions where it reported ":"
- pts-core: When using rename-identifier-in-result-file option, rename the benchmark-logs and system-logs folders too for that identifier
- pts-core: When using remove-from-result-file, remove the benchmark-logs and system-logs folders for that identifier if present
- pts-core: Move system parsing functions out of pts-core and into phodevi_parser object in Phodevi
- pts-core: Support exporting some functions from pts-core to the parse-results process during test runs
- phodevi: Don't try using aticonfig when reading the AMDPCSDB on an unsupported graphics adapter, use the internal parser instead
- phodevi: Support reading OpenGL vendor string
- tandem_Xml: Optimize the XML string parser
- pts: Updates to hpcc test profile
- pts: Add initial opencl-ati test profile
- pts: Add python-boost-development, boost-thread-development, and python-numpy external dependencies
- pts: Add initial pyopencl test profile
- pts: Update Nexuiz test profile against Nexuiz 2.5.2
- pts: Update netbook test suite
- pts: Change over relevant test profiles to using pts_report_numeric_result() rather than print statements
Phoronix Test Suite 2.2 Alpha 3
September 28, 2009
- pts-core: Add support for HTTP communication through a proxy server
- pts-core: Add network-setup option for configuring network settings
- pts-core: Add NoNetworkCommunication boolean option to user-config.xml for disabling network access
- pts-core: Set timeout on HTTP connections to eight seconds
- pts-core: Fix for results not showing up if renaming the first result identifier using rename-identifier-in-result-file option
- pts-core: Fixes for FreeBSD 8.0 support
- pts-core: Fix for reporting "Already Installed" tests with install option
- pts-core: Better handle toggle_screensaver module when xdg-screensaver is missing
- pts-core: Greater fallback disk support, should help with some BSD operating systems
- pts-core: Add support for pts-core to dynamically increase a test's run count if the standard deviation exceeds a predefined threshold
- pts-core: Add DynamicRunCount and LimitDynamicToTestLength for controlling the statistics / standard deviation settings
- pts-core: Add StandardDeviationThreshold to user-config.xml for setting the standard deviation threshold percentage
- pts-core: Better support floating values within the preferences window of the GTK2 GUI
- pts-core: Add batch-install option if only to run the install process in the batch mode
- pts-core: Updates to PTS user module architecture
- pts-core: Support for having SH modules in the module local directory
- pts-core: Standardize PTS test comparison hashes
- pts-core: If a test needs RequiresRoot access and is running in batch mode and is not root, do not try to run the test
- pts-core: When generating new graphs for a result file, delete any old files first
- pts-core: Add ExportResultsTo as a user-config.xml option for hooking in external scripts for statistics support
- pts-core: Support setting the result proportion for a test profile from writing it to ~/pts-results-proportion during the testing process
- phodevi: Improve hardware detection for OpenSolaris SPARC systems using DDU information
- phodevi: Improve motherboard detection for Sun SPARC systems
- phodevi: Start new reporting infrastructure
- tandem_Xml: Add addXmlObjectFromReader() function for improved performance
- tandem_Xml: Add saveXMLFile() function
- pts: Fixes for compress-lzma and compress-pbzip2 test profiles with name change of compressfile
- pts: Fix for warsow test profile results not showing up on Linux
- pts: Support using aptitude for external dependencies when available on Ubuntu/Debian
- pts: Update minion test profile against Minion 0.9
- pts: Add OpenMPI to external dependencies as openmpi-development
- pts: Add ATLAS math to external dependencies as atlas-development
- pts: Add hpcc test profile for HPC Challenge
Phoronix Test Suite 2.2 Alpha 2
September 15, 2009
- pts-core: Add display mode support to download-test-files option
- pts-core: Handle pts_storage_object on failure correctly to avoid fatal error during testing process
- pts-core: Export $DEBUG_REAL_HOME environmental variable to all test scripts
- pts-core: Fix reporting of test notes at end of testing process
- pts-core: Release the run_lock when a test is running and returns due to an error
- pts-core: With the batch display mode, report the "estimated time remaining" at the start of each run
- pts-core: Add change-results-display-order option for changing the ordering of the results within the results viewer / graphs
- pts-core: Add rename-identifier-in-result-file option for changing the name of a test identifier within a results file
- pts-core: With GTK2 GUI don't get to the point of emiting a fatal error over GtkWindow
- pts-core: No longer support having test result XML files outside of the test-results/ directory where an absolute path was supplied to PTS
- pts-core: Add support for performing argument / start-up checks for a PTS option prior to ever calling the run function
- pts-core: When a test installation fails, save the install.log to install-failed.log
- pts-core: Add option in batch-setup for still prompting for test option selection when running in batch mode
- phodevi: Don't repeat the system vendor in motherboard string if it's also present in the product string
- phodevi: Don't report hard drive bytes on Mac OS X 10.6 when reading the capacity of a disk
- pts: Update Fedora external dependencies XML for blas-development and popt
- pts: Update OpenSolaris external dependencies XML
- pts: Update warsow test profile against Warsow 0.5
- pts: Update gnupg test profile against GnuPG 2.0.11
- pts: Update build-imagemagick test profile against ImageMagick 6.5.5
- pts: Use OpenMP support in stream test profile
- pts: Build libpng within graphics-magick test profile so it will run on Mac OS X 10.6
- pts: Add aio-stress test profile
Phoronix Test Suite 2.2 Alpha 1
August 27, 2009
- pts-core: Begin writing the results XML during the test run process earlier
- pts-core: When a test is running, save the active pts_test_run_manager to a pts_storage_object on the disk
- pts-core: Backup the XML results when a test is running to active.xml in the result's folder
- pts-core: Add recover-run option for recovering the test results / finish running the tests when a crash had occured
- pts-core: Fix bug with the result identifier being empty when using list-saved-results / list-results
- pts-core: Setup a pt2so object for storing some pts-core data using a pts_storage_object, move some of these items out of user-config.xml
- pts-core: Move out the modules that are loaded by a default to a separate file
- pts-core: Add support for writing to different display modes / abstract out the output process from the testing process
- pts-core: Drop the email_results module since using Phoromatic is a better solution
- pts-core: Add a display mode for batch runs or when DefaultDisplayMode in the user-config.xml is set to "BATCH"
- pts-core: Add support to allow anonymous usage reporting / statistics information
- pts-core: Add "free" virtual suite that contains all tests that are of a FREE type for its license
- pts-core: Multiple download cache directories can be specified in the user-config.xml and PTS_DOWNLOAD_CACHE environmental variable when delimited by colon
- pts-core: Move relevant functions that touch hardware settings / properties out of pts-core and now using the phodevi::set_property() framework
- pts-core: Fix check buttons for boolean values in the GTK2 GUI preferences window
- pts-core: Allow the display mode to be set using PTS_DISPLAY_MODE environmental variable
- pts-core: Add display mode support when a test is being installed
- pts-core: Add ArchitectureSpecific tag support to distro-xml files for specifying packages to install on only select architectures for the OS
- pts-core: Rework test timers to avoid false results on crashes
- pts-core: Improve estimated run time reporting when running tests
- pts-core: Handle the results identifer and saved results file name within the pts_test_run_manager
- pts-core: Add experimental support for weighted suites / results
- pts-core: Add "cache share" support for test profiles and the AllowCacheShare XML tag to expose this functionality
- pts-core: Add "Test All Options" to test menu when prompting for test option selection
- pts-core: Don't uselessly prompt a user for test options when trying to run an unsupported test
- pts-core: Allow the user to select multiple test options when running a test by delimiting each option with a comma
- pts-core: When using analyze-batch, support using bar graphs on comparisons where relevant, instead of just line graphs
- pts-core: Don't repeat reporting the system hardware/software for the same results identifier in a results file
- pts-core: Smarter detection when dealing with user trying to input a results identifier that is already found in the results file
- pts-core: Launch web browser (instead of DashCode) on Mac OS X for analyze-batch and merge-results command
- pts-core: Add remove-from-result-file option for removing a set of test results from a saved file
- pts-core: Don't report the elapsed time for a test run when it's using a cache share or no valid results were gathered
- pts-core: Stop forcing the time-zone to UTC
- phodevi: Be more non-RandR friendly in phodevi_gpu::gpu_available_modes()
- phodevi: Add infrastructure so that properties / settings can be set using phodevi::set_property()
- phodevi: Add CPU usage monitoring support for Mac OS X
- phodevi: Improve memory capacity detection on newer Apple systems
- phodevi: Don't repeat the memory reporting in GPU string on Mac OS X
- phodevi: Add sensor for reading system's uptime through system object
- tandem_XmlWriter: Don't add the "Generated" timestamp each time that getXML() is called, since it's now being hit multiple times with each test run
- pts_Graph: Properly order keys in the header when rendering
- pts: Add glibc-development as an external dependency for providing GNU C library development files
- pts: Add python external dependency for Python language
- pts: Add stream test profile for Stream memory benchmark
- pts: Add tachyon test profile for Tachyon Parallel Ray-Tracing benchmark
- pts: Add python-environment base test profile for placing external dependency on python and reporting Python version to test notes
- pts: Add pybench test profile for Python's PyBench
- pts: Add tscp test profile for the chess benchmark
- pts: Add chess test suite for test profiles that use chess AI
- pts: Add john-the-ripper test profile for John The Ripper password cracker benchmark
- pts: Add geekbench test profile for Primate Labs Geekbench benchmark
- pts: Add npb test profile for NASA NAS Parallel Benchmark
- pts: Drop test length option from ramspeed test profile, default to 10
- pts: Add Mac OS X support for openarena test profile
- pts: Add Mac OS X support to warsow test profile
- pts: In nexuiz test profile change from demos/bench1 to demos/demo2 for now
- pts: In video-cpu-usage test profile add support to use CoreVideo vo adapter on Mac OS X
- pts: Update graphics-magick test profile against GraphicsMagick 1.3.6
Phoronix Test Suite 2.0.0 "Sandtorg"
August 4, 2009
- pts-core: Don't prompt for download mirror selection if the option is enabled, but running from the GUI
- pts-core: Don't report "Comparison" multiple times when using the reference-comparison option
- phodevi: Add LXDE desktop environment detection
- pts: Add two more reference comparison systems
- pts: minion test profile updates
- pts: Update workstation-graphics test suite
Phoronix Test Suite 2.0.0 Beta 4
July 28, 2009
- pts-core: For the "all" virtual suite, don't include tests that have a ResultFormat of NO_RESULT, PASS_FAIL, or MULTI_PASS_FAIL
- pts-core: Clean-up pts_test_file_download object
- pts-core: For GTK2 GUI change around event reporting for test installation
- pts-core: Don't require trailing slash for user-config.xml paths
- pts-core: Properly handle test profiles with no files to be downloaded in pts_test_download_files_locally_available()
- pts-core: When using run-test in a batch mode and automated mode, but batch-setup hasn't been run, don't output an error
- pts-core: Few fixes for Phoronix Global comparisons from GTK2 GUI interface
- pts-core: Don't list test results when they are just the reference system comparison IDs from Phoronix Global
- phodevi: Fix regression that caused system and CPU temperatures to not be reported through LM_Sensors interface
- phodevi: Don't report disk size on hard disk identifier string when size equals 1GB, since that would be due to incorrect size
- pts: Fix prey test profile bug in key location detection for key test profile by using $DEBUG_REAL_HOME in test install script
- pts: Update boost packages for ubuntu-packages.xml external dependencies
- pts: For vdrift test profile, don't grab the mouse
- pts: Add glut as an external dependency to supertuxkart test profile
- pts: Update compress-pbzip2 test profile to use 256MB compression file
- documentation: Add Frequently Asked Questions
- documentation: Add PTS Desktop Live
- documentation: Few small updates
Phoronix Test Suite 2.0.0 Beta 3
July 21, 2009
- pts-core: Small bug fixes and code clean-ups throughout
- pts-core: Add new functionality to reference system comparison function
- pts-core: Fixes for Phoronix Global log-in from GTK2 GUI
- pts-core: More efficient pts_result_file object
- pts-core: Don't let the same reference system result be merged into a test result when it was already merged
- pts-core: Allow unique test run identifiers to be repeated if the new test run contains no repeated tests from result file
- pts-core: Fix bug where tests that use Cascading Test Profiles would not have their extensions installed in a virtual suite
- phodevi: Don't try calling glxinfo when it's not available
- phodevi: Don't report PCI revision for graphics card model string
- phodevi: Fixes for DragonFly BSD support
- phodevi: Add support for reading motherboard information from new ACPI oid with sysctl on *BSD
- phodevi: Add basic file-system detection support on *BSD
- pts: Update unigine-sanctuary test profile to Unigine Sanctuary 2.2
- pts: Update unigine-tropics test profile to Unigine Tropics 1.2
- pts: Update download locations in etqw-demo test profile
- pts: Update vdrift test profile against vDrift 2009-06-15
- pts: Update OpenSuSE External Dependencies
- pts: Add External Dependencies support for DragonflyBSD through the NetBSD pkgsrc support
- pts: Update Mandriva Linux External Dependencies
- pts: Add supertuxkart test profile for SuperTuxKart racing game
Phoronix Test Suite 2.0.0 Beta 2
July 7, 2009
- pts-core: Only show Installed Suites tab in GTK2 GUI when there is at least one suite installed
- pts-core: Fix for undefined variable with test description when calling 2+ suites to run in batch mode
- pts-core: Add notify_send_events module for reporting test installation/run statuses to notification daemon
- pts-core: Add GSID for Phoronix Global usage
- pts-core: Allow suites to override test options / XML values for a test profile from within a suite by using the OverrideTestOptions tag
- pts-core: Add TOTAL_LOOP_TIME environmental variable for having pts-core run a loop of the specified test(s) until certain time is reached
- pts-core: Add TOTAL_LOOP_COUNT environmental variable for having pts-core run a loop of the specified test(s) a specified number of times
- pts-core: Add user-config-set option for allowing user configuration values to be set through PTS instead of modifying XML
- pts-core: Add user-config-get option for reading user configuration option values
- pts-core: Rename initial-config user option to user-config-reset
- pts-core: Build result-info option capabilities into generic info command
- pts-core: Small bug fixes and code clean-ups throughout
- phodevi: Add NILFS2 file-system detection support
- pts: Add tcl to PTS External Dependencies
- pts: Small OpenSolaris updates
- pts: Add perl as an external dependency to build-imagemagick
- pts: Fix lightsmark test profile when running in the test suites
- pts: Update PostgreSQL to version 8.4.0 in pgbench test profile
- pts: Update wine-unstable base test profile to WINE 1.1.25
Phoronix Test Suite 2.0.0 Beta 1
June 14, 2009
- pts-core: Fix system monitoring reporting of values in test results
- pts-core: Proper handling of line graphs in test results
- pts-core: Make all test extensions available through environmental variables, helpful when a test extends a test
- pts-core: Rewrite analyze-batch option entirely and use new pts_result_file_analyze manager engine and other new features
- pts-core: Support setting up the XSL results viewer when running the refresh-graphs command
- pts-core: Disable PCQS suite downloader
- pts-core: With GTK2 GUI, only show "Installed Tests" tab when there are tests installed
- pts-core: Support checking /var/cache/phoronix-test-suite/ as a possible PTS download-cache directory
- pts-core: Fix test options not showing up when selecting a single test to run from the GTK2 GUI
- pts-core: Support different default user-config.xml options when running the PTS live OS
- pts-core: Support different defaults in GTK2 GUI when running the PTS live OS
- pts-core: When selecting multiple tests/suites from GTK2 GUI, support both installing and running tests from the benchmark button click
- pts-core: Set tries to 3 when using wget downloader
- pts-core: Don't overflow the test options window when there are many tests/options to be displayed
- pts-core: Add a colored header bar along the top of the GTK2 GUI for indicating important buttons/events rather than using the main frame
- pts-core: Fix in reference-comparison support for handling reference systems that have multiple result sets
- phodevi: Add a few more video modes to phodevi_gpu to ignore
- pts: Update mpich2 in mrbayes test profile
- pts: Add mplayer-base base test profile for providing installation of new mplayer/mencoder build with XvMC/VDPAU/etc
- pts: Switch video-extensions test profile to using mplayer-base and support testing VDPAU
- pts: Add video-cpu-usage test profile to monitor CPU usage during video playback with different video outputs
- pts: Switch mencoder test profile to using mplayer-base for its mplayer/mencoder build
- pts: Add desktop-graphics suite
- pts: Add cpu suite
- pts: Add workstation-graphics suite
- pts: Add server-motherboard suite
- pts: Update linux-system, netbook test suites
- pts: Support PTS External Dependencies on the PTS Linux OS
- pts: Compiler fix for nero2d test profile
- pts: Update PTS External Dependencies support for Fedora x86_64
Phoronix Test Suite 2.0.0 Alpha 3
June 1, 2009
- pts-core: Add result-file-to-text option for outputting result file/results to the terminal
- pts-core: Add result-file-to-csv option for outputting result file/results to CSV
- pts-core: Add external dependencies window to GTK2 GUI for showing installed/missing test dependencies
- pts-core: Various code cleaning and function enhancements
- pts-core: Only initialize the system tray icon for GTK2 GUI when GtkStatusIcon is available
- pts-core: Add pts_test_notes_manager
- pts-core: Add support for test run scripts to write a test-exit-status where if it's set to a value not 0 it means test run failed
- pts-core: Fix regression in pts_format_time_string() in Alpha 2 that caused the minutes to be calculated wrong
- pts-core: Add estimate-run-time option for providing a detailed estimate of how much time is needed to run a test/suite/result file
- pts-core: Add install-time support for skipping test installations using SKIP_TESTS
- pts-core: Few PHP warning fixes
- pts-core: Updates for OpenSolaris support
- pts-core: When a test install fails based upon install-exit-status, remove pts-install.xml
- pts-core: Add bash auto-completion support for basic PTS commands
- pts-core: Add $PTS_TEST_ARGUMENTS environmental variable during testing that contains a copy of the arguments set for that test run
- pts-core: Output download URL when a download fails / MD5 checksum doesn't match
- pts-core: Add validate-test-profile option to catch common errors/warnings when writing a test profile
- pts-core: Add validate-test-suite option to catch common errors/warnings when writing a test suite
- pts-core: Add menu item to GTK2 GUI for showing tests where all needed test files are available locally or in download cache
- pts-core: When a test installation fails based upon a non-zero exit status, wipe out the files it created during the install process
- pts-core: Support showing suites with and without where all external dependencies are satisfied and where test files available locally
- phodevi: Improve file-system detection, add detection for Btrfs instead of reporting 0x9123683e
- phodevi: Add monitor name detection support when using NVIDIA graphics
- phodevi: Move a few minor properties from phodevi_gpu to phodevi_monitor
- phodevi: Add support for OpenSolaris 2009.06
- pts: Add kernel test suite
- pts: Update jxrendermark test profile against JXRenderMark 1.0.1
- pts: Update OpenSolaris External Dependencies
- pts: Add postmark test profile for NetApp's PostMark disk benchmark
- pts: Add blogbench test profile for testing filesystem / disk performance similar to load produced by a web-blog server
- pts: Add n-queens test profile for N-Queens OpenMP benchmark
- pts: Add openmp test suite for containing tests that use OpenMP
- pts: Update espeak test profile to eSpeak version 1.40.02
- pts: Update nearly all test profiles to take advantage of exit status feature in PTS 2.0
- pts: Trivial clean-ups in the scripts for a majority of the test profiles
- pts: Finish replacing $THIS_DIR with $HOME in test profile installation scripts
- pts: Conserve space in some test profiles by removing files that are not needed
- pts: Add more download mirrors for files in many of the test profiles
- pts: Update md-gromacs test profile to version 4.0.5
- pts: Update mafft test profile to version 6.706
- bilde_renderer: Support interfacing for Phoromatic server usage
Phoronix Test Suite 2.0.0 Alpha 2
May 24, 2009
- pts-core: Fix for showing tests in the GTK2 GUI from Alpha 1
- pts-core: Various GTK2 GUI improvements
- pts-core: Add 1.77 ratio to available modes in phodevi_gpu for supporting 1920 x 1080 resolution
- pts-core: Various code clean-ups
- pts-core: Add DefaultBrowser tag to user-config.xml to allow the user to override the web browser auto detection
- pts-core: Add extract-from-result-file option for extracting a single test run from a merged results file
- pts-core: Various bug fixes from Deanjo
- pts-core: Cleanup and revise PTS installation External Dependency functions
- pts-core: Add list-installed-dependencies option
- pts-core: Add list-missing-dependencies option
- pts-core: Add view option to GTK2 GUI for displaying available tests based upon external dependency criteria
- pts-core: Add SKIP_TESTS environmental variable for specifying test identifier(s) (delimited by comma) to override and skip from testing
- pts-core: Rewrite pts_generate_graphs() so that it can be supported for Phoronix Global / Phoromatic usage
- pts-core: Add UsePhodeviCache option to user-config.xml for toggling whether to enable Phodevi smart cache for PTS
- pts-core: Add support for test install scripts to write an install-exit-status where if it's set to a value not 0 it means install failed
- phodevi: Support monitoring the system temperature from the ACPI TZ00 thermal zone
- phodevi: Fix in Xfce 4 desktop version detection
- phodevi: Report video memory detection for some GPUs, at least when using the xf86-video-ati driver
- phodevi: Report video memory size for GPUs where the driver in use is Mesa
- pts: Add dcraw test profile for RAW image decoding benchmark
- pts: Add sudokut test profile for a Sudoku solver benchmark
- pts: Add fftw3-development external dependency for Fast Fourier Transform 3 library
- pts: Add blas-development external dependency for Basic Linear Algebra Subroutine library
- pts: Add lapack-development external dependency for LAPACK
- pts: Add cmake external dependency for cmake
- pts: Add boost-development external dependency for Boost development libraries
- pts: Add bzip2-development external dependency for BZIP2 development libraries
- pts: Add nero2d test profile for Open FMM Nero2D TM/TE electromagnetic software solver
- pts: Add minion test profile for Minion solver
- pts: Support using multiple threads for FFmpeg test profile
- pts: Update filesystem test suite
- pts: Add External Dependencies support for Zenwalk Linux distribution
- pts: Update disk test suite
- pts: Drop system-disk test suite, since basically the same as the disk test suite
- pts: Update linux-system test suite
- toggle_screensaver: Support using gconftool-2 for toggling GNOME screensaver
Phoronix Test Suite 2.0.0 Alpha 1
May 10, 2009
- pts-core: Support 1.70 mode ratio in hw_gpu_available_modes() which will allow auto-resolution to select 1024x600 on netbooks
- pts-core: Initial support for being able to select multiple test/suite/result entries from the notebook menu area
- pts-core: Fix bug where remove-all-results option would not actually remove the results
- pts-core: Add EnvironmentTestingSize option for test profiles that require extra space on the HDD during testing process
- pts-core: Begin work on Phodevi: Phoronix Device Interface
- pts-core: With auto-* test options for disks, ensure the directory/point is writable
- pts-core: Allow FORCE_TIMES_TO_RUN to be a lower value than what is defined
- pts-core: Do not ask to display web browser when DISPLAY is not set
- pts-core: When launching the GUI from a menu and it fails, show an error message in the web browser
- pts-core: Move contents of pts-core/media/ into pts-core/static/
- pts-core: Add initial Phoromatic module
- pts-core: Provide hard-coded paths when using PTS auto-* run options within a non-client environment
- pts-core: Add OVERRIDE_VIDEO_MODES environmental variable for overriding video modes
- pts-core: Add support for recursive sub-menus in the GTK2 GUI
- pts-core: Reorganize menus in GTK2 GUI
- pts-core: Add support for logging into Phoronix Global from GTK2 GUI
- pts-core: Move sensor functions over to Phodevi framework using phodevi::read_sensor()
- pts-core: Don't let pts_test_run_manager add another test request if the test with identical settings has already been added
- pts-core: Don't enable defauts/check buttons on GTK2 GUI until something is selected
- pts-core: Enable system tray icon for GTK2 GUI
- pts-core: Report number of tests/suites/results in GTK2 notebook area above the select menu
- pts-core: Fix bug that would drop raw results value when merging test results
- pts-core: Provide smart caching for Phodevi to store software/hardware information that will not change between reboots
- pts-core: Add list-installed-suites option
- pts-core: Add list-unsupported-tests option
- pts-core: Allow selecting multiple tests/suites to run at once from GTK2 GUI
- pts-core: Fix GtkComboBox segmentation fault from GTK2 GUI
- pts-core: Fix for NexentaCore operating system detection
- pts-core: Set downloading timeout in pts_download() to 20 seconds
- pts-core: Add finish-run option for completing remaining tests on an incomplete saved results file
- pts-core: Fix file-locking system on tests where tests are not properly installed
- pts: Update build-php test profile to use PHP 5.2.9
- pts: Set bork and compress-* test profiles to use the EnvironmentTestingSize tag
- pts: Add Popt to PTS External Dependencies using popt generic name
- pts: Add dbench test profile for the DBench disk benchmark
- pts: Add dbench test profile to relevant suites
- pts: Update sqlite test profile to SQLite 3.6.13
- pts: Add gmpbench test profile for GMP / GMPbench testing
- pts: Add pgbench test profile for PostgreSQL testing
- pts: Add tiobench test profile for Threaded I/O benchmark
- pts: Add NUMA External Dependencies support using numa-development generic name
- pts: Add crafty test profile for popular chess engine benchmark
- pts: Add opstone-vsp test profile for Opstone Vector Scalar Product benchmark
- pts: Add opstone-svsp test profile for Opstone Sparse-Vector Scalar Product benchmark
- pts: Add opstone-svd test profile for Opstone Singular Value Decomposition benchmark
- pts: Add opstone test suite of all opstone-* test profiles
- pts: Add cachebench test profile
- pts: Add apache test profile for Apache Benchmark
- pts: Add server test suite of server tests
- pts: Update build-mysql test profile download links
- pts: Add curl to PTS External Dependencies for curl and curl library
- pts: Specify SPECViewPerf version within Title for specviewperf9 and specviewperf10 to workaround bug
- pts: Support more test profiles on Mac OS X, OpenSolaris, BSD
- bilde_renderer: Drop integrated TTF font, switch to detecting installed system TTF fonts
- pts_Graph: Tweak bar graph text settings
- install-sh: Copy phoronix-test-suite.desktop to /usr/share/applications/ for the GUI
###
For the change-log from older Phoronix Test Suite releases, visit: http://www.phoronix-test-suite.com/?k=release_history
phoronix-test-suite/pts-core/objects/phodevi/phodevi_vfs.php 000664 001750 001750 00000016446 12307711432 025763 0 ustar 00michael michael 000000 000000 .
*/
class phodevi_vfs
{
private $cache;
private $options = array(
// name => F/C - Cacheable? - File / Command - Additional Checks
// F = File, C = Command
'cpuinfo' => array('type' => 'F', 'F' => '/proc/cpuinfo', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'CPU'),
'lscpu' => array('type' => 'C', 'C' => 'lscpu', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'CPU'),
'lsusb' => array('type' => 'C', 'C' => 'lsusb -v', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'System'),
'sensors' => array('type' => 'C', 'C' => 'sensors', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'System'),
'cc' => array('type' => 'C', 'C' => 'cc -v', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'System'),
'scaling_available_frequencies' => array('type' => 'F', 'F' => '/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'CPU'),
'meminfo' => array('type' => 'F', 'F' => '/proc/meminfo', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'Memory'),
'modules' => array('type' => 'F', 'F' => '/proc/modules', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'System'),
'cmdline' => array('type' => 'F', 'F' => '/proc/cmdline', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'System'),
'kernel_version' => array('type' => 'F', 'F' => '/proc/version', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'System'),
'mounts' => array('type' => 'F', 'F' => '/proc/mounts', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'Disk'),
'glxinfo' => array('type' => 'C', 'C' => 'glxinfo', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'GPU'),
'vdpauinfo' => array('type' => 'C', 'C' => 'vdpauinfo', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'GPU'),
'lspci' => array('type' => 'C', 'C' => 'lspci -mmkvvnn', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'System'),
'radeon_pm_info' => array('type' => 'F', 'F' => '/sys/kernel/debug/dri/0/radeon_pm_info', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'GPU'),
'i915_capabilities' => array('type' => 'F', 'F' => '/sys/kernel/debug/dri/0/i915_capabilities', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'GPU'),
'i915_cur_delayinfo' => array('type' => 'F', 'F' => '/sys/kernel/debug/dri/0/i915_cur_delayinfo', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'GPU'),
'i915_drpc_info' => array('type' => 'F', 'F' => '/sys/kernel/debug/dri/0/i915_drpc_info', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'GPU'),
'xorg_log' => array('type' => 'F', 'F' => '/var/log/Xorg.0.log', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'System', 'remove_timestamps' => true),
'xorg_conf' => array('type' => 'F', 'F' => '/etc/X11/xorg.conf', 'cacheable' => true, 'preserve' => true, 'subsystem' => 'System'),
'dmesg' => array('type' => 'C', 'C' => 'dmesg', 'cacheable' => false, 'preserve' => true, 'subsystem' => 'System', 'remove_timestamps' => true),
);
public function __construct()
{
$this->clear_cache();
}
public function list_cache_nodes($subsystem = null)
{
$nodes = array();
if($subsystem == null)
{
foreach($this->options as $name => $node)
{
if($this->cache_isset_names($name))
{
array_push($nodes, $name);
}
}
}
else
{
$nodes = array();
$subsystem = explode(' ', $subsystem);
foreach($this->options as $name => $node)
{
if(in_array($node['subsystem'], $subsystem) && $this->cache_isset_names($name))
{
array_push($nodes, $name);
}
}
}
return $nodes;
}
public static function cleanse_file(&$file, $name = false)
{
switch($name)
{
case 'mounts':
foreach(array('ecryptfs_cipher=', 'ecryptfs_sig=', 'ecryptfs_fnek_sig=') as $check)
{
if(($x = stripos($file, $check)) !== false)
{
$split_a = substr($file, 0, ($x + strlen($check)));
$y = strlen($file);
foreach(array(',', ' ', '&', PHP_EOL) as $next)
{
if(($z = stripos($file, $next, ($x + strlen($check)))) !== false && $z < $y)
{
$y = $z;
}
}
$file = $split_a . 'XXXX' . substr($file, $y);
}
}
break;
default:
$file = pts_strings::remove_lines_containing($file, array('Serial N', 'S/N', 'Serial #', 'serial:', 'serial='));
break;
}
}
public function clear_cache()
{
$this->cache = array();
}
public function cache_index()
{
return array_keys($this->cache);
}
public function __get($name)
{
// This assumes that isset() has been called on $name prior to actually trying to get it...
if(isset($this->cache[$name]))
{
return PHP_EOL . $this->cache[$name] . PHP_EOL;
}
else if(PTS_IS_CLIENT && isset($this->options[$name]))
{
if($this->options[$name]['type'] == 'F')
{
$contents = file_get_contents($this->options[$name]['F']);
}
else if($this->options[$name]['type'] == 'C')
{
$command = pts_client::executable_in_path(pts_strings::first_in_string($this->options[$name]['C']));
$descriptor_spec = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w')
);
$proc = proc_open($command, $descriptor_spec, $pipes, null, null);
$contents = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($proc);
}
if(isset($this->options[$name]['remove_timestamps']) && $this->options[$name]['remove_timestamps'])
{
// remove leading timestamps such as from dmesg and Xorg.0.log
$contents = pts_strings::remove_line_timestamps($contents);
}
if($this->options[$name]['cacheable'])
{
$this->cache[$name] = $contents;
}
return PHP_EOL . $contents . PHP_EOL;
}
return false;
}
public function __isset($name)
{
return isset($this->cache[$name]) || (PTS_IS_CLIENT && $this->cache_isset_names($name));
}
public function set_cache_item($name, $cache)
{
$this->cache[$name] = $cache;
}
public function cache_isset_names($name)
{
// Cache the isset call names with their values when checking files/commands since Phodevi will likely hit each one potentially multiple times and little overhead to caching them
static $isset_cache;
if(!isset($isset_cache[$name]))
{
$isset_cache[$name] = ($this->options[$name]['type'] == 'F' && is_readable($this->options[$name]['F'])) || ($this->options[$name]['type'] == 'C' && pts_client::executable_in_path(pts_strings::first_in_string($this->options[$name]['C'])));
}
return $isset_cache[$name];
}
}
?>
phoronix-test-suite/pts-core/commands/batch_install.php 000664 001750 001750 00000002705 12307711432 024761 0 ustar 00michael michael 000000 000000 .
*/
class batch_install implements pts_option_interface
{
const doc_section = 'Batch Testing';
const doc_description = 'If you wish to run the install process in the Phoronix Test Suite batch mode but do not wish to run any tests at this time. Running the install process in the batch mode will use the default values and not prompt the user of any possible options, to ensure the process is fully automated.';
public static function argument_checks()
{
return array(
new pts_argument_check('VARIABLE_LENGTH', array('pts_types', 'identifier_to_object'), null)
);
}
public static function run($r)
{
pts_test_installer::standard_install($r, pts_c::batch_mode);
}
}
?>
phoronix-test-suite/pts-core/objects/nye_Xml/nye_XmlReader.php 000664 001750 001750 00000006766 12307711432 026166 0 ustar 00michael michael 000000 000000 .
*/
class nye_XmlReader
{
protected $tag_fallback = false; // Fallback value if tag is not present
protected $file_location = false;
public $dom; // The DOM
public function __construct($xml_file)
{
libxml_use_internal_errors(true);
$this->dom = new DOMDocument();
// TODO: investigate whether using the LIBXML_COMPACT option on loading actually increases performance
if(!isset($xml_file[1024]) && is_file($xml_file))
{
$this->dom->load($xml_file);
$this->file_location = $xml_file;
}
else if($xml_file != null)
{
$this->dom->loadXML($xml_file);
}
}
public function getFileLocation()
{
return $this->file_location;
}
public function getXMLValue($xml_tag, $fallback_value = -1)
{
$steps = explode('/', $xml_tag);
$narrow = $this->dom->getElementsByTagName(array_shift($steps));
foreach($steps as $step)
{
if($narrow->length == 0)
{
break;
}
$narrow = $narrow->item(0)->getElementsByTagName($step);
}
return $narrow->length == 1 ? $narrow->item(0)->nodeValue : $this->handleXmlZeroTagFallback($xml_tag, ($fallback_value === -1 ? $this->tag_fallback : $fallback_value));
}
public function getXMLArrayValues($xml_tag, $break_depth = -1)
{
$steps = explode('/', $xml_tag);
$narrow = $this->dom->getElementsByTagName(array_shift($steps));
$values = $this->processXMLArraySteps($steps, $narrow, 0, $break_depth);
return isset($values[0]) ? $values : $this->handleXmlZeroTagArrayFallback($xml_tag, $values, $break_depth);
}
protected function processXMLArraySteps($steps, $narrow, $steps_offset = 0, $break_depth = -1)
{
$values = array();
for($i = $steps_offset, $c = count($steps); $i < $c && $narrow->length > 0; $i++)
{
$narrow = $narrow->item(0)->getElementsByTagName($steps[$i]);
if($i == $break_depth)
{
for($x = 0; $x < $break_depth || $x == 0; $x++)
{
for($j = 0; $j < $narrow->length; $j++)
{
array_push($values, $this->processXMLArraySteps($steps, $narrow->item($j)->getElementsByTagName($steps[$i + 1]), $i + 2));
}
}
break;
}
else if($i == ($c - 2))
{
for($j = 0; $j < $narrow->length; $j++)
{
$extract = $narrow->item($j)->getElementsByTagName($steps[$i + 1]);
array_push($values, ($extract->length > 0 ? $extract->item(0)->nodeValue : null));
}
break;
}
}
return $values;
}
protected function handleXmlZeroTagFallback($xml_tag, $fallback_value)
{
return $fallback_value;
}
protected function handleXmlZeroTagArrayFallback($xml_tag, $fallback_value, $break_depth = -1)
{
return $fallback_value;
}
public function getXML()
{
return $this->dom->saveXML();
}
}
?>
phoronix-test-suite/pts-core/static/examples/phoromatic-init-starter 000775 001750 001750 00000000723 12307711432 027461 0 ustar 00michael michael 000000 000000 #!/bin/sh
# /etc/init.d/phoromatic-init-starter
# update-rc.d phoromatic-init-starter defaults
case "$1" in
start)
echo "Starting Phoromatic"
rm -f /tmp/phoromatic-output
DISPLAY=:0 phoronix-test-suite phoromatic.start >> /tmp/phoromatic-output
;;
stop)
echo "Stopping Phoromatic"
touch /root/.phoronix-test-suite/halt-testing
;;
*)
echo "Usage: /etc/init.d/phoromatic-init-starter {start|stop}"
exit 1
;;
esac
exit 0
phoronix-test-suite/pts-core/objects/phodevi/sensors/gpu_voltage.php 000664 001750 001750 00000003726 12307711432 027454 0 ustar 00michael michael 000000 000000 .
*/
class gpu_voltage implements phodevi_sensor
{
public static function get_type()
{
return 'gpu';
}
public static function get_sensor()
{
return 'voltage';
}
public static function get_unit()
{
return 'mV';
}
public static function support_check()
{
$test = self::read_sensor();
return is_numeric($test) && $test != -1;
}
public static function read_sensor()
{
$sensor = -1;
// TODO XXX: Nouveau driver exposes GPU voltage on at least some cards via performance_level
if(isset(phodevi::$vfs->radeon_pm_info))
{
// For Radeon power management it should be exposed on a line like:
// voltage: 1140 mV
if(($x = strpos(phodevi::$vfs->radeon_pm_info, 'voltage: ')) !== false)
{
$radeon_pm_info = substr($radeon_pm_info, ($x + 9));
if(($x = stripos($radeon_pm_info, ' mV')) !== false)
{
$sensor = substr($radeon_pm_info, 0, $x);
}
}
if($sensor == null && ($x = strpos(phodevi::$vfs->radeon_pm_info, 'vddc: ')))
{
$x = ltrim(substr(phodevi::$vfs->radeon_pm_info, ($x + strlen('vddc: '))));
$x = substr($x, 0, strpos($x, ' '));
if(is_numeric($x))
{
$sensor = $x;
}
}
}
return $sensor;
}
}
?>
phoronix-test-suite/pts-core/objects/pts_Graph/pts_HeatMapBarGraph.php 000664 001750 001750 00000024413 12307711432 027545 0 ustar 00michael michael 000000 000000 .
*/
class pts_HeatMapBarGraph extends pts_Graph
{
protected $bars;
protected $last_updated;
protected $keys;
public function __construct($keys = array(), $last_updated = null)
{
$this->bars = array();
$this->keys = $keys;
$this->last_updated = $last_updated;
}
public function set_keys($keys = array())
{
$this->keys = $keys;
}
public function add_result_bar($min_value, $max_value, $bin_size, $sections, $lines, $test_data, $results = array())
{
if($min_value == $max_value)
{
return false;
}
array_push($this->bars, array(
'min_value' => $min_value,
'max_value' => $max_value,
'bin_size' => $bin_size,
'sections' => $sections,
'draw_lines' => $lines,
'test_data' => $test_data,
'results' => $results
));
}
public function get_count()
{
return count($this->bars);
}
protected static function compare_bars_by_hardware_subsystem($a, $b)
{
return $a['test_data']['h'] == $b['test_data']['h'] ? strcmp($a['test_data']['t'], $b['test_data']['t']) : strcmp($a['test_data']['h'], $b['test_data']['h']);
}
public function sort_results_by_hardware_subsystem()
{
usort($this->bars, array('self', 'compare_bars_by_hardware_subsystem'));
}
public function generate_display()
{
$bar_width = 580;
$bar_height = 38;
$heading_per_bar = 16;
$title_bar_height = 35;
$footer_bar_height = 14;
$category_offsets = 0;
$category_heights = 30;
$categories = array();
$border = 3;
foreach($this->bars as &$bar)
{
if($bar['test_data']['h'] != null && !in_array($bar['test_data']['h'], $categories))
{
array_push($categories, $bar['test_data']['h']);
}
}
if(empty($this->keys))
{
foreach($this->bars as &$bar_index)
{
foreach(array_keys($bar_index['results']) as $result_identifier)
{
if(!in_array($result_identifier, $this->keys))
{
array_push($this->keys, $result_identifier);
}
}
}
}
if(!empty($this->keys))
{
list($longest_key_width, $key_line_height) = pts_svg_dom::estimate_text_dimensions(pts_strings::find_longest_string($this->keys), '', 10, true);
$key_line_height += 18;
$keys_per_line = max(floor($bar_width / max(1, $longest_key_width + 12)), 1);
$title_key_offset = ceil(count($this->keys) / $keys_per_line) * $key_line_height;
}
else
{
$title_key_offset = 0;
}
$this->i['graph_width'] = $bar_width + ($border * 2);
$this->i['graph_height'] = ($bar_height + $heading_per_bar + $border) * count($this->bars) + $border + (count($categories) * $category_heights) + $title_bar_height + $title_key_offset + $footer_bar_height;
$this->svg_dom = new pts_svg_dom(ceil($this->i['graph_width']), ceil($this->i['graph_height']));
$text_color = '#e12128';
$alt_text_color = '#646464';
// Setup
$start_x = $border;
$end_x = $start_x + $bar_width;
// Title bar
$this->svg_dom->add_element('image', array('xlink:href' => pts_svg_dom::embed_png_image(PTS_CORE_STATIC_PATH . 'images/ob-fulltext-183x32.png'), 'x' => ($end_x - 190), 'y' => 10, 'width' => 183, 'height' => 32));
if(!empty($this->keys))
{
$color_cache = array('e12128', '065695', '007400');
for($i = 0, $c = count($this->keys); $i < $c; $i++)
{
$component_x = $border + ($i % $keys_per_line) * ($longest_key_width + 10);
$component_y = (floor($i / $keys_per_line) * $key_line_height) + $title_bar_height + 3;
$key_color = self::color_cache('opc', $this->keys[$i], $color_cache);
//$key_color = self::color_gradient('e12128', '065695', ($i / $c));
$key_colors[$this->keys[$i]] = $key_color;
$this->svg_dom->add_element('rect', array('x' => ($component_x + 1), 'y' => $component_y, 'width' => 10, 'height' => 10, 'fill' => $key_color, 'stroke' => self::$c['color']['border'], 'stroke-width' => 1));
$this->svg_dom->add_text_element($this->keys[$i], array('x' => ($component_x + 15), 'y' => ($component_y + 5), 'font-size' => 10, 'fill' => $key_color, 'text-anchor' => 'start'));
}
}
$previous_category = null;
foreach($this->bars as $i => &$hmap)
{
$upper_y = ($i * ($bar_height + $border + $heading_per_bar)) + $border + $title_bar_height + $title_key_offset + $category_offsets + $heading_per_bar;
if($hmap['test_data']['h'] != null && $hmap['test_data']['h'] != $previous_category)
{
$this->svg_dom->add_text_element($hmap['test_data']['h'] . ' Tests', array('x' => ($start_x + ($bar_width / 2)), 'y' => $upper_y, 'font-size' => 16, 'fill' => $text_color, 'text-anchor' => 'middle'));
$category_offsets += $category_heights;
$upper_y += $category_heights;
}
$previous_category = $hmap['test_data']['h'];
$lower_y = $upper_y + $bar_height;
$value_size = $bar_width / ($hmap['max_value'] - $hmap['min_value']);
$prev_color = '#ffffff';
$last_plot_x = $start_x;
$this->svg_dom->add_text_element($hmap['test_data']['t'], array('x' => $start_x, 'y' => $upper_y, 'font-size' => 12, 'fill' => $text_color, 'text-anchor' => 'start'));
$this->svg_dom->add_text_element($hmap['test_data']['a'], array('x' => $end_x, 'y' => $upper_y, 'font-size' => 10, 'fill' => $alt_text_color, 'text-anchor' => 'end'));
if($hmap['test_data']['p'] == 'LIB')
{
// Invert results
$new_sections = array();
foreach($hmap['sections'] as $next_section => $next_section_value)
{
$new_sections[($hmap['max_value'] - $next_section)] = $next_section_value;
}
ksort($new_sections);
$hmap['sections'] = $new_sections;
foreach($hmap['draw_lines'] as &$value)
{
$value = $hmap['max_value'] - $value;
}
foreach($hmap['results'] as &$value)
{
$value = $hmap['max_value'] - $value;
}
sort($hmap['draw_lines']);
$hmap['max_value'] -= $hmap['min_value'];
$hmap['min_value'] = 0;
}
$prev_section = $hmap['min_value'];
$max_section_value = max($hmap['sections']);
/*
for($i = $hmap['min_value']; $i <= $hmap['max_size'] && $hmap['bin_size'] > 0; $i += $hmap['bin_size'])
{
}
*/
$color_weight = 0.61 - (0 / $max_section_value * 0.5);
$background_color = self::color_gradient('#FFFFFF', '#000000', $color_weight);
$this->svg_dom->add_element('rect', array('x' => $start_x, 'y' => $upper_y, 'width' => $bar_width, 'height' => $bar_height, 'fill' => $background_color));
foreach($hmap['sections'] as $next_section => $next_section_value)
{
$color_weight = 0.61 - ($next_section_value / $max_section_value * 0.5);
$color = self::color_gradient('#FFFFFF', '#000000', $color_weight);
if($next_section > $hmap['min_value'])
{
$next_section = $next_section > $hmap['max_value'] ? $hmap['max_value'] : $next_section;
$plot_x = floor($last_plot_x + (($next_section - $prev_section) * $value_size));
$plot_x = $plot_x > $end_x ? $end_x : $plot_x;
if($prev_color != $color || ($color != $background_color))
{
// don't uselessly paint background color, it's already painted
$this->svg_dom->draw_rectangle_gradient($last_plot_x, $upper_y, abs($plot_x - $last_plot_x), $bar_height, $prev_color, $color);
}
$last_plot_x = floor($plot_x - 0.6);
$prev_section = $next_section;
if($next_section > $hmap['max_value'])
{
break;
}
}
$prev_color = $color;
}
/*
if($prev_color != $background_color && $plot_x < $end_x)
{
$plot_x = $last_plot_x + $next_section + $hmap['bin_size'];
$plot_x = $plot_x > $end_x ? $end_x : $plot_x;
$this->svg_dom->draw_rectangle_gradient($last_plot_x, $upper_y, ceil($plot_x - $last_plot_x), $bar_height, $prev_color, $background_color);
}
if($last_plot_x < $end_x)
{
// Fill in the blank
$this->svg_dom->add_element('rect', array('x' => $last_plot_x, 'y' => $upper_y, 'width' => ($end_x - $last_plot_x), 'height' => $bar_height, 'fill' => $prev_color));
}
*/
foreach($hmap['draw_lines'] as $line_value)
{
$line_x = $start_x + ($line_value - $hmap['min_value']) * $value_size;
$this->svg_dom->draw_svg_line($line_x, $upper_y, $line_x, $lower_y, self::$c['color']['border'], 1);
}
foreach($hmap['results'] as $identifier => $value)
{
if(!isset($key_colors[$identifier]))
{
continue;
}
$line_x = $start_x + ($value - $hmap['min_value']) * $value_size;
if(false && ($start_x + 10) < $line_x && $line_x < ($end_x - 10))
{
$this->svg_dom->draw_svg_line($line_x, ($lower_y - 10), $line_x, ($lower_y - 1), $key_colors[$identifier], 1);
$this->svg_dom->draw_svg_line($line_x, ($lower_y + 10), $line_x, ($lower_y + 1), $key_colors[$identifier], 1);
}
$this->svg_dom->draw_svg_line($line_x, $upper_y, $line_x, $lower_y, $key_colors[$identifier], 1);
}
$this->svg_dom->add_element('rect', array('x' => $start_x, 'y' => $upper_y, 'width' => $bar_width, 'height' => $bar_height, 'fill' => 'none', 'stroke' => self::$c['color']['border'], 'stroke-width' => 1));
}
// Footer
$this->draw_arrow($start_x + 8, $lower_y + 8, $start_x + 1, $lower_y + 8, $alt_text_color, self::$c['color']['border'], 1);
$this->svg_dom->add_text_element('Percentile Rank' . ($this->last_updated != null ? '; Data As Of ' . pts_strings::time_stamp_to_string($this->last_updated, 'j F Y') . ' For Trailing 200 Days' : null), array('x' => $start_x + 13, 'y' => $lower_y + 8, 'font-size' => 7, 'fill' => $alt_text_color, 'text-anchor' => 'start', 'dominant-baseline' => 'middle'));
$this->svg_dom->add_text_element('OpenBenchmarking.org Performance Classification', array('x' => $end_x, 'y' => $lower_y + 8, 'font-size' => 7, 'fill' => $alt_text_color, 'text-anchor' => 'end', 'dominant-baseline' => 'middle'));
return $this->svg_dom;
}
}
?>
phoronix-test-suite/pts-core/objects/bilde_renderer/bilde_renderer_web.php 000664 001750 001750 00000007063 12307711432 030553 0 ustar 00michael michael 000000 000000 .
*/
class bilde_renderer_web
{
public static function browser_compatibility_check($user_agent)
{
if(isset($_REQUEST['force_format']))
{
return $_REQUEST['force_format'];
}
$user_agent .= ' ';
$selected_renderer = 'SVG';
// Yahoo Slurp, msnbot, and googlebot should always be served SVG so no problems there
if(($p = strpos($user_agent, 'Gecko/')) !== false)
{
// Mozilla Gecko-based browser (Firefox, etc)
$gecko_date = substr($user_agent, ($p + 6));
$gecko_date = substr($gecko_date, 0, 6);
// Around Firefox 3.0 era is best
// Firefox 2.0 mostly works except text might not show...
if($gecko_date < 200702)
{
$selected_renderer = 'PNG';
}
}
else if(($p = strpos($user_agent, 'AppleWebKit/')) !== false)
{
// Safari, Google Chrome, Google Chromium, etc
$webkit_ver = substr($user_agent, ($p + 12));
$webkit_ver = substr($webkit_ver, 0, strpos($webkit_ver, ' '));
// Webkit 532.2 534.6 (WebOS 3.0.2) on WebOS is buggy for SVG
// iPhone OS is using 533 right now
if($webkit_ver < 533 || strpos($user_agent, 'hpwOS') !== false)
{
$selected_renderer = 'PNG';
}
if(($p = strpos($user_agent, 'Android ')) !== false)
{
$android_ver = substr($user_agent, ($p + 8), 3);
// Android browser doesn't support SVG.
// Google bug report 1376 for Android - http://code.google.com/p/android/issues/detail?id=1376
// Looks like it might work though in 3.0 Honeycomb
if($android_ver < 3.0)
{
$selected_renderer = 'PNG';
}
}
}
else if(($p = strpos($user_agent, 'Opera/')) !== false)
{
// Opera
$ver = substr($user_agent, ($p + 6));
$ver = substr($ver, 0, strpos($ver, ' '));
// 9.27, 9.64 displays most everything okay
if($ver < 9.27)
{
$selected_renderer = 'PNG';
}
// text-alignment is still fucked as of 11.50/12.0
$selected_renderer = 'PNG';
}
else if(($p = strpos($user_agent, 'Epiphany/')) !== false)
{
// Older versions of Epiphany. Newer versions should report their Gecko or WebKit appropriately
$ver = substr($user_agent, ($p + 9));
$ver = substr($ver, 0, 4);
if($ver < 2.22)
{
$selected_renderer = 'PNG';
}
}
else if(($p = strpos($user_agent, 'KHTML/')) !== false)
{
// KDE Konqueror as of 4.7 is still broken for SVG
$selected_renderer = 'PNG';
}
else if(($p = strpos($user_agent, 'MSIE ')) !== false)
{
$ver = substr($user_agent, ($p + 5), 1);
// Microsoft Internet Explorer 9.0 finally seems to do SVG right
if($ver < 10 && $ver != 1)
{
$selected_renderer = 'PNG';
}
}
else if(strpos($user_agent, 'facebook') !== false)
{
// Facebook uses this string for its Like/Share crawler, so serve it a PNG so it can use it as an image
$selected_renderer = 'PNG';
}
return $selected_renderer;
}
}
?>
phoronix-test-suite/pts-core/objects/pts_test_result_parser_writer.php 000664 001750 001750 00000015230 12307711432 030212 0 ustar 00michael michael 000000 000000 .
*/
class pts_test_result_parser_writer
{
private $xml_writer = null;
public function __construct()
{
$this->xml_writer = new nye_XmlWriter();
}
public function get_xml()
{
return $this->xml_writer->getXML();
}
public function save_xml($to_save)
{
return $this->xml_writer->saveXMLFile($to_save);
}
public function rebuild_parser_file($xml_file)
{
$xml_parser = new pts_parse_results_nye_XmlReader($xml_file);
$result_template = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/OutputTemplate');
$result_match_test_arguments = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/MatchToTestArguments');
$result_key = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/ResultKey');
$result_line_hint = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/LineHint');
$result_line_before_hint = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/LineBeforeHint');
$result_line_after_hint = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/LineAfterHint');
$result_before_string = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/ResultBeforeString');
$strip_from_result = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/StripFromResult');
$strip_result_postfix = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/StripResultPostfix');
$multi_match = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/MultiMatch');
$result_divide_by = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/DivideResultBy');
$result_multiply_by = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/MultiplyResultBy');
$result_scale = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/ResultScale');
$result_proportion = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/ResultProportion');
$result_precision = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ResultsParser/ResultPrecision');
foreach(array_keys($result_template) as $i)
{
$this->xml_writer->addXmlNode('PhoronixTestSuite/ResultsParser/OutputTemplate', $result_template[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/MatchToTestArguments', $result_match_test_arguments[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/ResultKey', $result_key[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/LineHint', $result_line_hint[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/LineBeforeHint', $result_line_before_hint[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/LineAfterHint', $result_line_after_hint[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/ResultBeforeString', $result_before_string[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/StripFromResult', $strip_from_result[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/StripResultPostfix', $strip_result_postfix[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/MultiMatch', $multi_match[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/DivideResultBy', $result_divide_by[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/MultiplyResultBy', $result_multiply_by[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/ResultScale', $result_scale[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/ResultProportion', $result_proportion[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ResultsParser/ResultPrecision', $result_precision[$i]);
}
$result_iqc_source_file = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ImageParser/SourceImage');
$result_match_test_arguments = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ImageParser/MatchToTestArguments');
$result_iqc_image_x = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ImageParser/ImageX');
$result_iqc_image_y = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ImageParser/ImageY');
$result_iqc_image_width = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ImageParser/ImageWidth');
$result_iqc_image_height = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ImageParser/ImageHeight');
foreach(array_keys($result_iqc_source_file) as $i)
{
$this->xml_writer->addXmlNode('PhoronixTestSuite/ImageParser/SourceImage', $result_iqc_source_file[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ImageParser/MatchToTestArguments', $result_match_test_arguments[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ImageParser/ImageX', $result_iqc_image_x[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ImageParser/ImageY', $result_iqc_image_y[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ImageParser/ImageWidth', $result_iqc_image_width[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/ImageParser/ImageHeight', $result_iqc_image_height[$i]);
}
$monitor_sensor = $xml_parser->getXMLArrayValues('PhoronixTestSuite/SystemMonitor/Sensor');
$monitor_frequency = $xml_parser->getXMLArrayValues('PhoronixTestSuite/SystemMonitor/PollingFrequency');
$monitor_report_as = $xml_parser->getXMLArrayValues('PhoronixTestSuite/SystemMonitor/Report');
foreach(array_keys($monitor_sensor) as $i)
{
$this->xml_writer->addXmlNode('PhoronixTestSuite/SystemMonitor/Sensor', $monitor_sensor[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/SystemMonitor/PollingFrequency', $monitor_frequency[$i]);
$this->xml_writer->addXmlNodeWNE('PhoronixTestSuite/SystemMonitor/Report', $monitor_report_as[$i]);
}
$extra_data_id = $xml_parser->getXMLArrayValues('PhoronixTestSuite/ExtraData/Identifier');
foreach(array_keys($extra_data_id) as $i)
{
$this->xml_writer->addXmlNode('PhoronixTestSuite/ExtraData/Identifier', $extra_data_id[$i]);
}
}
}
?>
phoronix-test-suite/documentation/old-docs/results-parser.xml 000664 001750 001750 00000016131 12307711432 026174 0 ustar 00michael michael 000000 000000
P_RESULTS_PARSER_MATCH_TO_TEST_ARGUMENTSPhoronixTestSuite/ResultsParser/MatchToTestArgumentsIf there are multiple ResulsParser sections within the XML file and this tag is set, the Phoronix Test Suite will see if this string appears within the PTS_TEST_ARGUMENTS in determining if this is the ResultsParser section to use for parsing the results.P_RESULTS_PARSER_TEMPLATEPhoronixTestSuite/ResultsParser/OutputTemplateThe section of the test output to look for the result(s) within.P_RESULTS_PARSER_RESULT_KEYPhoronixTestSuite/ResultsParser/ResultKeyThe key to look for when parsing the OutputTemplate to find where the result should be stored. If this tag is not implemented, the default key will be used.P_RESULTS_PARSER_LINE_HINTPhoronixTestSuite/ResultsParser/LineHintA unique string to search the test result output for to indicate this is the line that contains the result value.P_RESULTS_PARSER_LINE_BEFORE_HINTPhoronixTestSuite/ResultsParser/LineBeforeHintThe LineBeforeHint tag is similar to LineHint but is used to indicate the line before where the test results appear, in the event the LineHint tag cannot be used reliably.P_RESULTS_PARSER_LINE_AFTER_HINTPhoronixTestSuite/ResultsParser/LineAfterHintThe LineAfterHint tag is similar to LineBeforeHint but is used to indicate the line after where the test results appear, in the event the LineHint or LineBeforeHint tags cannot be used reliably.P_RESULTS_PARSER_RESULT_BEFORE_STRINGPhoronixTestSuite/ResultsParser/ResultBeforeStringThe ResultBeforeString tag is optional and can be used if there is a consistient string following the reporting of the result, in the event the result's location is not static within the line string.P_RESULTS_PARSER_STRIP_FROM_RESULTPhoronixTestSuite/ResultsParser/StripFromResultAny string that should be searched for and removed from the result value anywhere within the value string.P_RESULTS_PARSER_STRIP_RESULT_POSTFIXPhoronixTestSuite/ResultsParser/StripResultPostfixThis is similar to the StripFromResult tag but will only look at the end of the value string for this string to be removed. (I.e. if a unit such as 'ms' or 'FPS' is appended to the result by the test without a space.)P_RESULTS_PARSER_MULTI_MATCHPhoronixTestSuite/ResultsParser/MultiMatchIf the result value should be found multiple times within the result file and then some mathematical operation carried out, it should be set using this tag. Setting the value to AVERAGE will find all matches and then calculate the average value based upon matches. While not required, setting the value to NONE will use the default code-path of only looking for one result value.P_RESULTS_PARSER_DIVIDE_BYPhoronixTestSuite/ResultsParser/DivideResultByIf the result value should be divided by some constant (to convert the result to a different unit), the value should be supplied in this tag.P_RESULTS_PARSER_MULTIPLY_BYPhoronixTestSuite/ResultsParser/MultiplyResultByIf the result value should be multiplied by some constant (to convert the result to a different unit), the value should be supplied in this tag.P_IMAGE_PARSER_MATCH_TO_TEST_ARGUMENTSPhoronixTestSuite/ImageParser/MatchToTestArgumentsIf there are multiple ResulsParser sections within the XML file and this tag is set, the Phoronix Test Suite will see if this string appears within the PTS_TEST_ARGUMENTS in determining if this is the ResultsParser section to use for parsing the results.P_IMAGE_PARSER_SOURCE_IMAGEPhoronixTestSuite/ImageParser/SourceImageIf the test profile is for an image quality comparison, the ImageFile tag should contain the file/path of the source file.P_IMAGE_PARSER_IMAGE_XPhoronixTestSuite/ImageParser/ImageXIf the test profile is for an image quality comparison, the ImageX should be the X coordinate of where to begin cropping the source file.P_IMAGE_PARSER_IMAGE_YPhoronixTestSuite/ImageParser/ImageYIf the test profile is for an image quality comparison, the ImageX should be the Y coordinate of where to begin cropping the source file.P_IMAGE_PARSER_IMAGE_WIDTHPhoronixTestSuite/ImageParser/ImageWidthIf the test profile is for an image quality comparison, the ImageWidth should be the produced image width.P_IMAGE_PARSER_IMAGE_HEIGHTPhoronixTestSuite/ImageParser/ImageHeightIf the test profile is for an image quality comparison, the ImageHeight should be the produced image height.P_MONITOR_PARSER_SENSORPhoronixTestSuite/SystemMonitor/SensorIf the test profile is to monitor any system sensors during the testing process, the name of the sensor (via the Phodevi name; i.e. cpu.usage) should be supplied. While not a Phodevi sensor, if passing sys.time as the sensor value, the time it takes to execute the test will be recorded.P_MONITOR_PARSER_FREQUENCYPhoronixTestSuite/SystemMonitor/PollingFrequencyIf the test profile is to monitor any system sensors during the testing process, how often the matched sensor is to be polled (in seconds) should be supplied. Floating values are supported.P_MONITOR_PARSER_REPORTPhoronixTestSuite/SystemMonitor/ReportIf the test profile is to monitor any system sensors during the testing process, this tag provides how the monitored results should be reported. Supported values include MAX, MIN, AVG, and ALL.
phoronix-test-suite/pts-core/objects/client/pts_openbenchmarking_client.php 000664 001750 001750 00000041306 12352546652 031030 0 ustar 00michael michael 000000 000000 .
*/
class pts_openbenchmarking_client
{
private static $openbenchmarking_account = false;
private static $client_settings = null;
public static function upload_test_result(&$object, $return_json_data = false)
{
if($object instanceof pts_test_run_manager)
{
$result_file = new pts_result_file($object->get_file_name());
$local_file_name = $object->get_file_name();
$results_identifier = $object->get_results_identifier();
}
else if($object instanceof pts_result_file)
{
$result_file = &$object;
$local_file_name = $result_file->get_identifier();
$results_identifier = null;
}
// Validate the XML
// Rely upon server-side validation in case of additions to the spec later on as might be a problem with the JSON addition
/*
if($result_file->xml_parser->validate() == false)
{
echo PHP_EOL . 'Errors occurred parsing the result file XML.' . PHP_EOL;
return false;
}
*/
// Ensure the results can be shared
if(self::result_upload_supported($result_file) == false)
{
return false;
}
if(pts_network::network_support_available() == false)
{
echo PHP_EOL . 'No network support available.' . PHP_EOL;
return false;
}
$composite_xml = $result_file->xml_parser->getXML();
$system_log_dir = PTS_SAVE_RESULTS_PATH . $result_file->get_identifier() . '/system-logs/';
if(pts_config::read_bool_config('PhoronixTestSuite/Options/OpenBenchmarking/AlwaysUploadSystemLogs', 'FALSE'))
{
$upload_system_logs = true;
}
else if(isset(self::$client_settings['UploadSystemLogsByDefault']))
{
$upload_system_logs = self::$client_settings['UploadSystemLogsByDefault'];
}
else if(is_dir($system_log_dir))
{
$upload_system_logs = pts_user_io::prompt_bool_input('Would you like to attach the system logs (lspci, dmesg, lsusb, etc) to the test result', true, 'UPLOAD_SYSTEM_LOGS');
}
$system_logs = null;
$system_logs_hash = null;
if(is_dir($system_log_dir) && $upload_system_logs)
{
$is_valid_log = true;
$finfo = function_exists('finfo_open') ? finfo_open(FILEINFO_MIME_TYPE) : false;
foreach(pts_file_io::glob($system_log_dir . '*') as $log_dir)
{
if($is_valid_log == false || !is_dir($log_dir))
{
$is_valid_log = false;
break;
}
foreach(pts_file_io::glob($log_dir . '/*') as $log_file)
{
if(!is_file($log_file))
{
$is_valid_log = false;
break;
}
if($finfo && substr(finfo_file($finfo, $log_file), 0, 5) != 'text/')
{
$is_valid_log = false;
break;
}
}
}
if($is_valid_log)
{
$system_logs_zip = pts_client::create_temporary_file();
pts_compression::zip_archive_create($system_logs_zip, $system_log_dir);
if(filesize($system_logs_zip) < 2097152)
{
// If it's over 2MB, probably too big
$system_logs = base64_encode(file_get_contents($system_logs_zip));
$system_logs_hash = sha1($system_logs);
}
else
{
trigger_error('The systems log attachment is too large to upload to OpenBenchmarking.org.', E_USER_WARNING);
}
unlink($system_logs_zip);
}
}
$composite_xml_hash = sha1($composite_xml);
$composite_xml_type = 'composite_xml';
// Compress the result file XML if it's big
if(isset($composite_xml[50000]) && function_exists('gzdeflate'))
{
$composite_xml_gz = gzdeflate($composite_xml);
if($composite_xml_gz != false)
{
$composite_xml = $composite_xml_gz;
$composite_xml_type = 'composite_xml_gz';
}
}
$to_post = array(
$composite_xml_type => base64_encode($composite_xml),
'composite_xml_hash' => $composite_xml_hash,
'local_file_name' => $local_file_name,
'this_results_identifier' => $results_identifier,
'system_logs_zip' => $system_logs,
'system_logs_hash' => $system_logs_hash
);
if(isset(self::$client_settings['ResultUploadsDefaultDisplayStatus']) && is_numeric(self::$client_settings['ResultUploadsDefaultDisplayStatus']))
{
$to_post['display_status'] = self::$client_settings['ResultUploadsDefaultDisplayStatus'];
}
$json_response = pts_openbenchmarking::make_openbenchmarking_request('upload_test_result', $to_post);
$json_response = json_decode($json_response, true);
if(!is_array($json_response))
{
trigger_error('Unhandled Exception', E_USER_ERROR);
return false;
}
if(isset($json_response['openbenchmarking']['upload']['error']))
{
trigger_error($json_response['openbenchmarking']['upload']['error'], E_USER_ERROR);
}
if(isset($json_response['openbenchmarking']['upload']['url']))
{
echo PHP_EOL . 'Results Uploaded To: ' . $json_response['openbenchmarking']['upload']['url'] . PHP_EOL;
pts_module_manager::module_process('__event_openbenchmarking_upload', $json_response);
}
//$json['openbenchmarking']['upload']['id']
if(isset(self::$client_settings['RemoveLocalResultsOnUpload']) && self::$client_settings['RemoveLocalResultsOnUpload'] && $local_file_name != null)
{
pts_client::remove_saved_result_file($local_file_name);
}
if($return_json_data)
{
return isset($json_response['openbenchmarking']['upload']) ? $json_response['openbenchmarking']['upload'] : false;
}
return isset($json_response['openbenchmarking']['upload']['url']) ? $json_response['openbenchmarking']['upload']['url'] : false;
}
public static function recently_updated_tests($limit = -1)
{
$available_tests = array();
foreach(pts_openbenchmarking::linked_repositories() as $repo)
{
$repo_index = pts_openbenchmarking::read_repository_index($repo);
if(isset($repo_index['tests']) && is_array($repo_index['tests']))
{
foreach(array_keys($repo_index['tests']) as $identifier)
{
if($repo_index['tests'][$identifier]['title'] == null)
{
continue;
}
$version = array_shift($repo_index['tests'][$identifier]['versions']);
$update_time = $repo_index['tests'][$identifier]['last_updated'];
$available_tests[$update_time] = $repo . '/' . $identifier . '-' . $version;
}
}
}
krsort($available_tests);
if($limit > 0)
{
$available_tests = array_slice($available_tests, 0, $limit);
}
return $available_tests;
}
public static function popular_tests($limit = -1, $test_type = null)
{
$available_tests = array();
foreach(pts_openbenchmarking::linked_repositories() as $repo)
{
$repo_index = pts_openbenchmarking::read_repository_index($repo);
if(isset($repo_index['tests']) && is_array($repo_index['tests']))
{
foreach(array_keys($repo_index['tests']) as $identifier)
{
if($repo_index['tests'][$identifier]['title'] == null)
{
continue;
}
$popularity = $repo_index['tests'][$identifier]['popularity'];
if($popularity < 1 || ($test_type != null && $repo_index['tests'][$identifier]['test_type'] != $test_type))
{
continue;
}
$available_tests[$repo . '/' . $identifier] = $popularity;
}
}
}
asort($available_tests);
if($limit > 0)
{
$available_tests = array_slice($available_tests, 0, $limit);
}
return array_keys($available_tests);
}
public static function search_tests($search, $test_titles_only = true)
{
$matching_tests = array();
foreach(pts_openbenchmarking::linked_repositories() as $repo)
{
$repo_index = pts_openbenchmarking::read_repository_index($repo);
if(isset($repo_index['tests']) && is_array($repo_index['tests']))
{
foreach(array_keys($repo_index['tests']) as $identifier)
{
if(stripos($identifier, $search) !== false || stripos($repo_index['tests'][$identifier]['title'], $search) !== false)
{
array_push($matching_tests, $repo . '/' . $identifier);
}
else if($test_titles_only == false && (stripos(implode(' ', $repo_index['tests'][$identifier]['internal_tags']), $search) !== false || stripos($repo_index['tests'][$identifier]['test_type'], $search) !== false || stripos($repo_index['tests'][$identifier]['description'], $search) !== false))
{
array_push($matching_tests, $repo . '/' . $identifier);
}
}
}
}
return $matching_tests;
}
public static function tests_available()
{
$test_count = 0;
foreach(pts_openbenchmarking::linked_repositories() as $repo)
{
$repo_index = pts_openbenchmarking::read_repository_index($repo);
if(isset($repo_index['tests']) && is_array($repo_index['tests']))
{
$test_count += count($repo_index['tests']);
}
}
return $test_count;
}
public static function init_account($openbenchmarking, $settings)
{
if(isset($openbenchmarking['user_name']) && isset($openbenchmarking['communication_id']) && isset($openbenchmarking['sav']))
{
if(IS_FIRST_RUN_TODAY && pts_network::network_support_available())
{
// Might as well make sure OpenBenchmarking.org account has the latest system info
// But don't do it everytime to preserve bandwidth
$openbenchmarking['s_s'] = base64_encode(phodevi::system_software(true));
$openbenchmarking['s_h'] = base64_encode(phodevi::system_hardware(true));
$return_state = pts_openbenchmarking::make_openbenchmarking_request('account_verify', $openbenchmarking);
$json = json_decode($return_state, true);
if(isset($json['openbenchmarking']['account']['valid']))
{
// The account is valid
self::$openbenchmarking_account = $openbenchmarking;
self::$client_settings = $json['openbenchmarking']['account']['settings'];
pts_storage_object::set_in_file(PTS_CORE_STORAGE, 'openbenchmarking_account_settings', $json['openbenchmarking']['account']['settings']);
}
else
{
pts_storage_object::set_in_file(PTS_CORE_STORAGE, 'openbenchmarking', false);
trigger_error('Invalid OpenBenchmarking.org account supplied, please re-login.', E_USER_ERROR);
}
}
else
{
self::$openbenchmarking_account = $openbenchmarking;
self::$client_settings = $settings;
}
}
}
public static function get_openbenchmarking_account()
{
return self::$openbenchmarking_account;
}
public static function auto_upload_results()
{
return isset(self::$client_settings['AutoUploadResults']) && self::$client_settings['AutoUploadResults'];
}
public static function override_client_setting($key, $value)
{
self::$client_settings[$key] = $value;
}
protected static function result_upload_supported(&$result_file)
{
foreach($result_file->get_result_objects() as $result_object)
{
$test_profile = new pts_test_profile($result_object->test_profile->get_identifier());
if($test_profile->allow_results_sharing() == false)
{
echo PHP_EOL . $result_object->test_profile->get_identifier() . ' does not allow test results to be uploaded.' . PHP_EOL . PHP_EOL;
return false;
}
}
return true;
}
public static function read_repository_test_profile_attribute($test_profile, $attribute)
{
list($repo, $tp) = explode('/', $test_profile);
$tp = substr($tp, 0, strrpos($tp, '-'));
$repo_index = pts_openbenchmarking::read_repository_index($repo);
return isset($repo_index['tests'][$tp][$attribute]) ? $repo_index['tests'][$tp][$attribute] : null;
}
public static function popular_openbenchmarking_results()
{
$index_file = PTS_OPENBENCHMARKING_SCRATCH_PATH . 'popular.results';
if(!is_file($index_file) || filemtime($index_file) < (time() - 1800))
{
// Refresh the repository change-log just once a day should be fine
$server_index = pts_openbenchmarking::make_openbenchmarking_request('interesting_results');
if(json_decode($server_index) != false)
{
file_put_contents($index_file, $server_index);
}
}
$results = is_file($index_file) ? json_decode(file_get_contents($index_file), true) : false;
return $results ? $results['results'] : false;
}
public static function fetch_repository_changelog($repo_name)
{
$index_file = PTS_OPENBENCHMARKING_SCRATCH_PATH . $repo_name . '.changes';
if(!is_file($index_file) || filemtime($index_file) < (time() - 86400))
{
// Refresh the repository change-log just once a day should be fine
$server_index = pts_openbenchmarking::make_openbenchmarking_request('repo_changes', array('repo' => $repo_name));
if(json_decode($server_index) != false)
{
file_put_contents($index_file, $server_index);
}
}
return is_file($index_file) ? json_decode(file_get_contents($index_file), true) : false;
}
public static function user_name()
{
return isset(self::$openbenchmarking_account['user_name']) ? self::$openbenchmarking_account['user_name'] : false;
}
public static function upload_usage_data($task, $data)
{
switch($task)
{
case 'test_install':
list($test_install, $time_elapsed) = $data;
$upload_data = array('test_identifier' => $test_install->test_profile->get_identifier(), 'test_version' => $test_install->test_profile->get_test_profile_version(), 'elapsed_time' => $time_elapsed);
pts_network::http_upload_via_post(pts_openbenchmarking::openbenchmarking_host() . 'extern/statistics/report-test-install.php', $upload_data);
break;
case 'test_complete':
list($test_result, $time_elapsed) = $data;
$upload_data = array('test_identifier' => $test_result->test_profile->get_identifier(), 'test_version' => $test_result->test_profile->get_test_profile_version(), 'elapsed_time' => $time_elapsed);
pts_network::http_upload_via_post(pts_openbenchmarking::openbenchmarking_host() . 'extern/statistics/report-test-completion.php', $upload_data);
break;
case 'test_install_failure':
list($test_install, $error) = $data;
$upload_data = array('test_identifier' => $test_install->test_profile->get_identifier(), 'error' => $error, 'os' => phodevi::read_property('system', 'vendor-identifier'));
pts_network::http_upload_via_post(pts_openbenchmarking::openbenchmarking_host() . 'extern/statistics/report-test-install-failure.php', $upload_data);
break;
}
}
public static function upload_hwsw_data($to_report)
{
if(!defined('PTS_GSID'))
{
return false;
}
foreach($to_report as $component => &$value)
{
if(empty($value))
{
unset($to_report[$component]);
continue;
}
$value = $component . '=' . $value;
}
$upload_data = array('report_hwsw' => implode(';', $to_report), 'gsid' => PTS_GSID);
pts_network::http_upload_via_post(pts_openbenchmarking::openbenchmarking_host() . 'extern/statistics/report-installed-hardware-software.php', $upload_data);
}
public static function upload_pci_data($to_report)
{
if(!defined('PTS_GSID'))
{
return false;
}
if(!is_array($to_report))
{
return false;
}
$to_report = base64_encode(serialize($to_report));
$upload_data = array('report_pci_data' => $to_report, 'gsid' => PTS_GSID);
pts_network::http_upload_via_post(pts_openbenchmarking::openbenchmarking_host() . 'extern/statistics/report-pci-data.php', $upload_data);
}
public static function upload_usb_data($to_report)
{
if(!defined('PTS_GSID'))
{
return false;
}
if(!is_array($to_report))
{
return false;
}
$to_report = base64_encode(serialize($to_report));
$upload_data = array('report_usb_data' => $to_report, 'gsid' => PTS_GSID);
pts_network::http_upload_via_post(pts_openbenchmarking::openbenchmarking_host() . 'extern/statistics/report-usb-data.php', $upload_data);
}
public static function request_gsid()
{
$payload = array(
'client_version' => PTS_VERSION,
'client_os' => phodevi::read_property('system', 'vendor-identifier')
);
$json = pts_openbenchmarking::make_openbenchmarking_request('request_gsid', $payload);
$json = json_decode($json, true);
return isset($json['openbenchmarking']['gsid']) ? $json['openbenchmarking']['gsid'] : false;
}
public static function update_gsid()
{
$payload = array(
'client_version' => PTS_VERSION,
'client_os' => phodevi::read_property('system', 'vendor-identifier')
);
pts_openbenchmarking::make_openbenchmarking_request('update_gsid', $payload);
}
public static function retrieve_gsid()
{
// If the GSID_E and GSID_P are not known due to being from an old client
$json = pts_openbenchmarking::make_openbenchmarking_request('retrieve_gsid', array());
$json = json_decode($json, true);
return isset($json['openbenchmarking']['gsid']) ? $json['openbenchmarking']['gsid'] : false;
}
}
?>
phoronix-test-suite/pts-core/objects/nye_Xml/pts_results_nye_XmlReader.php 000664 001750 001750 00000007556 12307711432 030633 0 ustar 00michael michael 000000 000000 .
*/
class pts_results_nye_XmlReader extends nye_XmlReader
{
public function __construct($read_xml)
{
if(!isset($read_xml[1024]) && defined('PTS_SAVE_RESULTS_PATH') && is_file(PTS_SAVE_RESULTS_PATH . $read_xml . '/composite.xml'))
{
$read_xml = PTS_SAVE_RESULTS_PATH . $read_xml . '/composite.xml';
}
if(defined('PHOROMATIC_BUILD') && !isset($read_xml[1024]) && is_file($read_xml))
{
// Work around a nye_XmlReader parsing bug with early Phoromatic versions where \' was done
$read_xml = file_get_contents($read_xml);
$read_xml = substr($read_xml, strpos($read_xml, ''));
}
parent::__construct($read_xml);
}
public function validate()
{
// on failure get errors from libxml_get_errors();
return $this->dom->schemaValidate(PTS_OPENBENCHMARKING_PATH . 'schemas/result-file.xsd');
}
protected function handleXmlZeroTagFallback($xml_tag, $value)
{
$legacy_spec = array(
/* New Tag => Old Tag */
// The below tags were changed during Phoronix Test Suite 3.0 Iveland
'PhoronixTestSuite/Generated/Title' => 'PhoronixTestSuite/Suite/Title',
'PhoronixTestSuite/Generated/Description' => 'PhoronixTestSuite/Suite/Description'
);
return isset($legacy_spec[$xml_tag]) ? $this->getXMLValue($legacy_spec[$xml_tag], $value) : $value;
}
protected function handleXmlZeroTagArrayFallback($xml_tag, $value, $break_depth = -1)
{
$legacy_spec = array(
/* New Tag => Old Tag */
// The below tags were changed during Phoronix Test Suite 3.0 Iveland
'PhoronixTestSuite/System/User' => 'PhoronixTestSuite/System/Author',
'PhoronixTestSuite/System/Identifier' => 'PhoronixTestSuite/System/AssociatedIdentifiers',
'PhoronixTestSuite/System/TimeStamp' => 'PhoronixTestSuite/System/TestDate',
'PhoronixTestSuite/System/Notes' => 'PhoronixTestSuite/System/TestNotes',
'PhoronixTestSuite/System/TestClientVersion' => 'PhoronixTestSuite/System/Version',
'PhoronixTestSuite/Result/Identifier' => 'PhoronixTestSuite/Benchmark/TestName',
'PhoronixTestSuite/Result/Title' => 'PhoronixTestSuite/Benchmark/Name',
'PhoronixTestSuite/Result/Scale' => 'PhoronixTestSuite/Benchmark/Scale',
'PhoronixTestSuite/Result/AppVersion' => 'PhoronixTestSuite/Benchmark/Version',
'PhoronixTestSuite/Result/DisplayFormat' => 'PhoronixTestSuite/Benchmark/ResultFormat',
'PhoronixTestSuite/Result/Proportion' => 'PhoronixTestSuite/Benchmark/Proportion',
'PhoronixTestSuite/Result/Arguments' => 'PhoronixTestSuite/Benchmark/TestArguments',
'PhoronixTestSuite/Result/Description' => 'PhoronixTestSuite/Benchmark/Attributes',
'PhoronixTestSuite/Result/Data' => 'PhoronixTestSuite/Benchmark/Results',
'PhoronixTestSuite/Result/Data/Entry/Identifier' => 'PhoronixTestSuite/Benchmark/Results/Group/Entry/Identifier',
'PhoronixTestSuite/Result/Data/Entry/Value' => 'PhoronixTestSuite/Benchmark/Results/Group/Entry/Value',
'PhoronixTestSuite/Result/Data/Entry/RawString' => 'PhoronixTestSuite/Benchmark/Results/Group/Entry/RawString'
);
return isset($legacy_spec[$xml_tag]) ? $this->getXMLArrayValues($legacy_spec[$xml_tag], $break_depth) : $value;
}
}
?>
phoronix-test-suite/pts-core/external-test-dependencies/xml/dragonfly-packages.xml 000664 001750 001750 00000017223 12341155742 032153 0 ustar 00michael michael 000000 000000
DragonFlyBSDcommon-dependenciesarchivers/unzipunzipgtk-developmentx11/gtk2/usr/pkg/include/gtk-2.0/sdl-developmentdevel/SDL devel/SDL_gfx devel/SDL_image/usr/pkg/include/SDL/SDL.h, /usr/pkg/include/SDL/SDL_image.hsdl2-developmentdevel/SDL2 devel/SDL2_gfx devel/SDL2_image/usr/pkg/include/SDL2/SDL.h, /usr/pkg/include/SDL2/SDL_image.hlibpng-developmentgraphics/png/usr/pkg/include/png.hopenssl-developmentsecurity/openssl/usr/pkg/include/openssl/ssl.hbuild-utilitiesdevel/autoconf/usr/pkg/bin/autoconfpcredevel/pcre/usr/pkg/include/pcre.hcairo-developmentgraphics/cairo/usr/pkg/include/cairo/cairo.hbisondevel/bison/usr/pkg/bin/bisonimlib2-developmentgraphics/imlib2/usr/pkg/lib/imlib2/portaudio-developmentaudio/portaudio/usr/pkg/include/portaudio.hfortran-compilerlang/g95/usr/pkg/bin/g95glewgraphics/glew/usr/pkg/include/GL/glew.hlib3dsgraphics/lib3ds/usr/pkg/include/lib3ds/io.hsconsdevel/scons/usr/pkg/bin/sconsjpeg-developmentgraphics/jpeg/usr/pkg/include/jpeglib.hperllang/perl5/usr/pkg/bin/perlopenal-developmentaudio/openal/usr/pkg/include/AL/al.hvorbis-developmentaudio/libvorbis/usr/pkg/include/vorbis/vorbisfile.hjamdevel/jam/usr/pkg/bin/jamp7ziparchivers/p7zip/usr/pkg/bin/7zaqt4-developmentx11/qt4/usr/pkg/include/qt4/Qt/qgl.hautoconfdevel/autoconf/usr/pkg/bin/autoconflibtooldevel/libtool/usr/pkg/bin/libtoolncurses-developmentdevel/ncurses/usr/pkg/include/ncurses/ncurses.hpoptdevel/popt/usr/pkg/include/popt.hfftw3-developmentmath/fftw/usr/pkg/include/fftw3.hblas-developmentmath/blas/usr/pkg/lib/libblas.solapack-developmentmath/lapack/usr/pkg/lib/liblapack.socmakedevel/cmake/usr/pkg/bin/cmakeboost-developmentdevel/boost-build devel/boost-headers devel/boost-libs/usr/pkg/include/boost/iostreams/write.hppbzip2-developmentarchivers/bzip2/usr/pkg/include/bzlib.htcldevel/tcllib/usr/pkg/bin/tclsh8.5pythonlang/python33/usr/pkg/bin/pythonpython-boost-developmentdevel/boost-python/usr/pkg/include/boost/python.hppyasmdevel/yasm/usr/pkg/bin/yasmgmp-librarymath/fgmp/usr/pkg/include/gmp.hsubversiondevel/subversion/usr/pkg/bin/svnsuperlumath/superlu/usr/pkg/include/superlu/glutgraphics/glut/usr/pkg/include/GL/glut.hcshshells/tcsh/usr/local/bin/tcshflexdevel/flex/usr/pkg/bin/flexcurlwww/curl/usr/pkg/bin/curlopenmpi-developmentparallel/openmpi parallel/mpi-ch/usr/pkg/mpi/openmpi/lib, /usr/pkg/include/mpicxx.hgitmisc/git/usr/pkg/bin/git
phoronix-test-suite/pts-core/objects/pts_test_result.php 000664 001750 001750 00000013731 12307711432 025246 0 ustar 00michael michael 000000 000000 .
*/
class pts_test_result
{
// Note in most pts-core code the initialized var is called $result_object
// Note in pts-core code the initialized var is also called $test_run_request
private $result = 0;
private $result_min = 0;
private $result_max = 0;
private $used_arguments;
private $used_arguments_description;
private $result_precision = 2;
public $test_profile;
public $test_result_buffer;
public $active_result = null;
public $active_min_result = null;
public $active_max_result = null;
public $secondary_linked_results = null;
public function __construct(&$test_profile)
{
$this->test_profile = $test_profile;
$this->result = 0;
}
public function __clone()
{
$this->test_profile = clone $this->test_profile;
}
public function set_test_result_buffer($test_result_buffer)
{
$this->test_result_buffer = $test_result_buffer;
}
public function set_used_arguments_description($arguments_description)
{
$this->used_arguments_description = $arguments_description;
}
public function set_result_precision($precision = 2)
{
$this->result_precision = $precision;
}
public function get_result_precision()
{
return $this->result_precision;
}
public function set_used_arguments($used_arguments)
{
$this->used_arguments = $used_arguments;
}
public function get_arguments()
{
return $this->used_arguments;
}
public function get_arguments_description()
{
return $this->used_arguments_description;
}
public function set_result($result)
{
$this->result = $result;
}
public function set_min_result($result)
{
$this->result_min = $result;
}
public function set_max_result($result)
{
$this->result_max = $result;
}
public function get_result()
{
return $this->result;
}
public function get_min_result()
{
return $this->result_min;
}
public function get_max_result()
{
return $this->result_max;
}
public function get_comparison_hash($show_version_and_attributes = true)
{
if($show_version_and_attributes)
{
$tp = $this->test_profile->get_identifier(true);
// remove the last segment of the test profile version that should be in xx.yy.zz format
// this removal is done since the zz segment should be maintainable between comparisons
$tp = substr($tp, 0, strrpos($tp, '.'));
return pts_test_profile::generate_comparison_hash($tp, $this->get_arguments(), $this->get_arguments_description(), $this->test_profile->get_app_version());
}
else
{
return pts_test_profile::generate_comparison_hash($this->test_profile->get_identifier(false), $this->get_arguments());
}
}
public function __toString()
{
return $this->test_profile->get_identifier(false) . ' ' . $this->get_arguments() . ' ' . $this->get_arguments_description() . ' ' . $this->test_profile->get_override_values();
}
public function normalize_buffer_values($normalize_against = false)
{
if($this->test_profile->get_display_format() != 'BAR_GRAPH') // BAR_ANALYZE_GRAPH is currently unsupported
{
return false;
}
$is_multi_way = pts_render::multi_way_identifier_check($this->test_result_buffer->get_identifiers());
$keys = array_keys($this->test_result_buffer->buffer_items);
if($is_multi_way)
{
$key_sets = array();
foreach($keys as $k)
{
$identifier_r = pts_strings::trim_explode(': ', $this->test_result_buffer->buffer_items[$k]->get_result_identifier());
if(!isset($key_sets[$identifier_r[0]]))
{
$key_sets[$identifier_r[0]] = array();
}
array_push($key_sets[$identifier_r[0]], $k);
}
}
else
{
$key_sets = array($keys);
}
foreach($key_sets as $keys)
{
if($this->test_profile->get_result_proportion() == 'LIB')
{
// Invert values for LIB
foreach($keys as $k)
{
$this->test_result_buffer->buffer_items[$k]->reset_result_value((1 / $this->test_result_buffer->buffer_items[$k]->get_result_value()));
}
}
$divide_value = -1;
if($normalize_against != false)
{
foreach($keys as $k)
{
if($is_multi_way && strpos($this->test_result_buffer->buffer_items[$k]->get_result_identifier(), ': ' . $normalize_against) !== false)
{
// This allows it to just normalize against part of the string
$divide_value = $this->test_result_buffer->buffer_items[$k]->get_result_value();
break;
}
else if($this->test_result_buffer->buffer_items[$k]->get_result_identifier() == $normalize_against)
{
$divide_value = $this->test_result_buffer->buffer_items[$k]->get_result_value();
break;
}
}
}
if($divide_value == -1)
{
foreach($keys as $k)
{
if($this->test_result_buffer->buffer_items[$k]->get_result_value() < $divide_value || $divide_value == -1)
{
$divide_value = $this->test_result_buffer->buffer_items[$k]->get_result_value();
}
}
}
foreach($keys as $k)
{
$normalized = pts_math::set_precision(($this->test_result_buffer->buffer_items[$k]->get_result_value() / $divide_value), $this->result_precision);
$this->test_result_buffer->buffer_items[$k]->reset_result_value($normalized);
$this->test_result_buffer->buffer_items[$k]->reset_raw_value(0);
}
}
$this->test_profile->set_result_proportion('HIB');
$this->test_profile->set_result_scale('Relative Performance');
return true;
}
}
?>
phoronix-test-suite/pts-core/commands/start_phoromatic_server.php 000664 001750 001750 00000011044 12341156552 027122 0 ustar 00michael michael 000000 000000 .
*/
class start_phoromatic_server implements pts_option_interface
{
const doc_section = 'GUI / Web Support';
const doc_description = 'Start the Phoromatic web server for controlling local Phoronix Test Suite client systems to facilitate automated and repeated test orchestration and other automated features targeted at the enterprise.';
public static function run($r)
{
pts_file_io::unlink(PTS_USER_PATH . 'phoromatic-server-launcher');
if(PHP_VERSION_ID < 50400)
{
echo 'Running an unsupported PHP version. PHP 5.4+ is required to use this feature.' . PHP_EOL . PHP_EOL;
return false;
}
$server_launcher = '#!/bin/sh' . PHP_EOL;
$web_port = 0;
$remote_access = pts_config::read_user_config('PhoronixTestSuite/Options/Server/RemoteAccessPort', 'FALSE');
$remote_access = is_numeric($remote_access) && $remote_access > 1 ? $remote_access : false;
$blocked_ports = array(2049, 3659, 4045, 6000);
if($remote_access)
{
// ALLOWING SERVER TO BE REMOTELY ACCESSIBLE
$server_ip = '0.0.0.0';
$fp = false;
$errno = null;
$errstr = null;
if(($fp = fsockopen('127.0.0.1', $remote_access, $errno, $errstr, 5)) != false)
{
trigger_error('Port ' . $remote_access . ' is already in use by another server process. Close that process or change the Phoronix Test Suite server port via ~/.phoronix-test-suite/user-config.xml to proceed.', E_USER_ERROR);
fclose($fp);
return false;
}
else
{
$web_port = $remote_access;
$web_socket_port = pts_config::read_user_config('PhoronixTestSuite/Options/Server/WebSocketPort', '');
if($web_socket_port == null || !is_numeric($web_socket_port))
{
$web_socket_port = $web_port - 1;
}
}
}
else
{
echo PHP_EOL . PHP_EOL . 'You must first configure the remote web / Phoromatic settings via:' . PHP_EOL . ' ~/.phoronix-test-suite/user-config.xml.' . PHP_EOL . PHP_EOL . 'The RemoteAccessPort should be a network port to use for HTTP communication while WebSocketPort should be set to another available network port.' . PHP_EOL . PHP_EOL;
return false;
}
if(!extension_loaded('sqlite3'))
{
echo PHP_EOL . PHP_EOL . 'PHP SQLite3 support must first be enabled before accessing the Phoromatic server (e.g. installing the php5-sqlite package).' . PHP_EOL . PHP_EOL;
return false;
}
// WebSocket Server Setup
$server_launcher .= 'export PTS_WEBSOCKET_PORT=' . $web_socket_port . PHP_EOL;
$server_launcher .= 'cd ' . getenv('PTS_DIR') . ' && PTS_MODE="CLIENT" ' . getenv('PHP_BIN') . ' pts-core/phoronix-test-suite.php start-ws-server &' . PHP_EOL;
$server_launcher .= 'websocket_server_pid=$!'. PHP_EOL;
// HTTP Server Setup
if(strpos(getenv('PHP_BIN'), 'hhvm'))
{
$server_launcher .= 'cd ' . PTS_CORE_PATH . 'phoromatic/public_html/ && ' . getenv('PHP_BIN') . ' --config ' . PTS_CORE_PATH . 'static/hhvm-server.hdf -m server -vServer.Port=' . $web_port . ' -vServer.IP=' . $server_ip . ' -vServer.SourceRoot=' . PTS_CORE_PATH . 'phoromatic/' . ' &' . PHP_EOL;
}
else
{
$server_launcher .= getenv('PHP_BIN') . ' -S ' . $server_ip . ':' . $web_port . ' -t ' . PTS_CORE_PATH . 'phoromatic/public_html/ &' . PHP_EOL; //2> /dev/null
}
$server_launcher .= 'http_server_pid=$!'. PHP_EOL;
$server_launcher .= 'sleep 1' . PHP_EOL;
$server_launcher .= 'echo "The Phoromatic Web Interface Is Accessible At: http://localhost:' . $web_port . '"' . PHP_EOL;
$server_launcher .= PHP_EOL . 'echo -n "Press [ENTER] to kill server..."' . PHP_EOL . 'read var_name';
// Shutdown / Kill Servers
$server_launcher .= PHP_EOL . 'kill $http_server_pid';
$server_launcher .= PHP_EOL . 'kill $websocket_server_pid';
$server_launcher .= PHP_EOL . 'rm -f ~/.phoronix-test-suite/run-lock*';
file_put_contents(PTS_USER_PATH . 'phoromatic-server-launcher', $server_launcher);
}
}
?>
phoronix-test-suite/pts-core/static/bash_completion 000664 001750 001750 00000000442 12307711432 024214 0 ustar 00michael michael 000000 000000 have phoronix-test-suite &&
_phoronix-test-suite-show()
{
local cur
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($( compgen -W "$(phoronix-test-suite dump-possible-options)" -- "$cur" ))
}
complete -F _phoronix-test-suite-show phoronix-test-suite
phoronix-test-suite/pts-core/web-interface/assets/ 000775 001750 001750 00000000000 12307711432 023651 5 ustar 00michael michael 000000 000000 phoronix-test-suite/pts-core/commands/build_suite.php 000664 001750 001750 00000007421 12307711432 024462 0 ustar 00michael michael 000000 000000 .
*/
class build_suite implements pts_option_interface
{
const doc_section = 'Other';
const doc_description = 'This option will guide the user through the process of generating their own test suite, which they can then run. Optionally, passed as arguments can be the test(s) or suite(s) to add to the suite to be created, instead of being prompted through the process.';
public static function run($r)
{
pts_client::$display->generic_heading('Test Suite Creation');
$suite_name = pts_user_io::prompt_user_input('Enter name of suite');
$suite_test_type = pts_user_io::prompt_text_menu('Select test type', pts_types::subsystem_targets());
$suite_maintainer = pts_user_io::prompt_user_input('Enter suite maintainer name');
$suite_description = pts_user_io::prompt_user_input('Enter suite description');
$possible_suites = pts_openbenchmarking::available_suites();
$possible_tests = pts_openbenchmarking::available_tests();
$suite_writer = new pts_test_suite_writer();
$suite_writer->add_suite_information($suite_name, '1.0.0', $suite_maintainer, $suite_test_type, $suite_description);
foreach($r as $test_object)
{
$test_object = pts_types::identifier_to_object($test_object);
if($test_object instanceof pts_test_profile)
{
list($args, $description) = pts_test_run_options::prompt_user_options($test_object);
for($i = 0; $i < count($args); $i++)
{
// Not binding the test profile version to this suite, otherwise change false to true
$suite_writer->add_to_suite($test_object->get_identifier(false), $args[$i], $description[$i]);
}
}
else if($test_object instanceof pts_test_suite)
{
$suite_writer->add_to_suite($test_object->get_identifier(), null, null);
}
}
$input_option = null;
do
{
switch($input_option)
{
case 'Add Test':
$test_to_add = pts_user_io::prompt_text_menu('Enter test name', $possible_tests);
$test_profile = new pts_test_profile($test_to_add);
list($args, $description) = pts_test_run_options::prompt_user_options($test_profile);
for($i = 0; $i < count($args); $i++)
{
$suite_writer->add_to_suite($test_to_add, $args[$i], $description[$i]);
}
break;
case 'Add Sub-Suite':
$suite_to_add = pts_user_io::prompt_text_menu('Enter test suite', $possible_suites);
$suite_writer->add_to_suite($suite_to_add, null, null);
break;
}
echo PHP_EOL . 'Available Options:' . PHP_EOL;
$input_option = pts_user_io::prompt_text_menu('Select next operation', array('Add Test', 'Add Sub-Suite', 'Save & Exit'));
}
while($input_option != 'Save & Exit');
$suite_identifier = pts_test_run_manager::clean_save_name($suite_name);
$save_to = PTS_TEST_SUITE_PATH . 'local/' . $suite_identifier . '/suite-definition.xml';
mkdir(dirname($save_to));
if($suite_writer->save_xml($save_to) != false)
{
echo PHP_EOL . PHP_EOL . 'Saved To: ' . $save_to . PHP_EOL . 'To run this suite, type: phoronix-test-suite benchmark ' . $suite_identifier . PHP_EOL . PHP_EOL;
}
}
}
?>
phoronix-test-suite/pts-core/objects/bilde_renderer/ 000755 001750 001750 00000000000 12307711432 024230 5 ustar 00michael michael 000000 000000 phoronix-test-suite/pts-core/phoromatic/ 000775 001750 001750 00000000000 12341156552 022005 5 ustar 00michael michael 000000 000000 phoronix-test-suite/pts-core/objects/pts_result_merge_select.php 000664 001750 001750 00000003466 12307711432 026731 0 ustar 00michael michael 000000 000000 .
*/
class pts_result_merge_select
{
private $result_file;
private $selected_identifiers;
private $rename_identifier;
public function __construct($result_file, $selected_identifiers = null)
{
$this->result_file = $result_file;
$this->selected_identifiers = ($selected_identifiers != null ? pts_arrays::to_array($selected_identifiers) : null);
$this->rename_identifier = null;
}
public function get_result_file()
{
return $this->result_file;
}
public function get_selected_identifiers()
{
return $this->selected_identifiers;
}
public function __toString()
{
return $this->get_result_file() . ':' . $this->get_selected_identifiers();
}
public function rename_identifier($new_name)
{
// $this->selected_identifers should either contain just the single identifer of what is being renamed or it should be null if being handled through Phoromatic
$this->rename_identifier = (count($this->selected_identifiers) < 2 ? $new_name : null);
}
public function get_rename_identifier()
{
return $this->rename_identifier;
}
}
?>
phoronix-test-suite/pts-core/phoromatic/public_html/event.php 000664 001750 001750 00000005174 12341156552 026150 0 ustar 00michael michael 000000 000000 .
*/
// INIT
define('PHOROMATIC_SERVER', true);
define('REMOTE_ACCESS', true); // XXX TODO: Is this still used with new Phoromatic?
//ini_set('memory_limit', '64M');
define('PTS_MODE', 'WEB_CLIENT');
define('PTS_AUTO_LOAD_OBJECTS', true);
error_reporting(E_ALL);
include('../../pts-core.php');
pts_client::init();
phoromatic_server::prepare_database();
if(!isset($_GET['type']))
{
echo 'Missing type.';
return;
}
switch($_GET['type'])
{
case 'trigger':
if(!isset($_GET['user']) || !isset($_GET['public_key']) || !isset($_GET['trigger']))
{
echo 'Missing user, public_key, or trigger.';
return;
}
$stmt = phoromatic_server::$db->prepare('SELECT AccountID FROM phoromatic_users WHERE UserName = :user_name');
$stmt->bindValue(':user_name', $_GET['user']);
$result = $stmt->execute();
if(empty($result))
{
echo 'Incorrect user information.';
return;
}
$user_row = $result->fetchArray();
$stmt = phoromatic_server::$db->prepare('SELECT ScheduleID FROM phoromatic_schedules WHERE AccountID = :account_id AND PublicKey = :public_key');
$stmt->bindValue(':account_id', $user_row['AccountID']);
$stmt->bindValue(':public_key', $_GET['public_key']);
$result = $stmt->execute();
if(empty($result))
{
echo 'Incorrect schedule information.';
return;
}
$schedule_row = $result->fetchArray();
$stmt = phoromatic_server::$db->prepare('INSERT INTO phoromatic_schedules_triggers (AccountID, ScheduleID, Trigger, TriggeredOn) VALUES (:account_id, :schedule_id, :trigger, :triggered_on)');
$stmt->bindValue(':account_id', $user_row['AccountID']);
$stmt->bindValue(':schedule_id', $schedule_row['ScheduleID']);
$stmt->bindValue(':trigger', $_GET['trigger']);
$stmt->bindValue(':triggered_on', phoromatic_server::current_time());
if($stmt->execute())
{
echo 'Trigger ' . $_GET['trigger'] . ' added!';
}
break;
}
?>
phoronix-test-suite/pts-core/commands/rename_identifier_in_result_file.php 000664 001750 001750 00000005243 12316572662 030720 0 ustar 00michael michael 000000 000000 .
*/
class rename_identifier_in_result_file implements pts_option_interface
{
const doc_section = 'Result Management';
const doc_description = 'This option is used if you wish to change the name of the identifier in a test results file that is shown in the Phoronix Test Suite Results Viewer and the contained graphs.';
public static function argument_checks()
{
return array(
new pts_argument_check(0, array('pts_types', 'is_result_file'), null)
);
}
public static function invalid_command($passed_args = null)
{
pts_tests::recently_saved_results();
}
public static function run($r)
{
$result = $r[0];
$result_file = new pts_result_file($result);
$result_file_identifiers = $result_file->get_system_identifiers();
$rename_identifier = pts_user_io::prompt_text_menu('Select the test run to rename', $result_file_identifiers);
$rename_identifier_new = pts_user_io::prompt_user_input('Enter the new identifier');
$merge_selects = array();
foreach($result_file_identifiers as $identifier)
{
$this_merge_select = new pts_result_merge_select($result, $identifier);
if($identifier == $rename_identifier && $rename_identifier != $rename_identifier_new)
{
$this_merge_select->rename_identifier($rename_identifier_new);
}
array_push($merge_selects, $this_merge_select);
}
foreach(array('test-logs', 'system-logs', 'installation-logs') as $dir_name)
{
if(is_dir(PTS_SAVE_RESULTS_PATH . $r[0] . '/' . $dir_name . '/' . $rename_identifier))
{
rename(PTS_SAVE_RESULTS_PATH . $r[0] . '/' . $dir_name . '/' . $rename_identifier, PTS_SAVE_RESULTS_PATH . $r[0] . '/' . $dir_name . '/' . $rename_identifier_new);
}
}
$extract_result = pts_merge::merge_test_results_array($merge_selects);
pts_client::save_test_result($r[0] . '/composite.xml', $extract_result);
pts_client::display_web_page(PTS_SAVE_RESULTS_PATH . $r[0] . '/index.html');
}
}
?>
phoronix-test-suite/pts-core/objects/pts_web_socket_client.php 000664 001750 001750 00000016523 12307711432 026356 0 ustar 00michael michael 000000 000000 .
*/
// TODO XXX: Something is still not reliable in pts_web_socket_client or pts_web_socket with sometimes junk being passed
class pts_web_socket_client
{
private $socket_master;
private $user_master;
public static $debug_mode = false;
public function __construct($address = 'localhost', $port = 80)
{
ob_implicit_flush();
$this->socket_master = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
//socket_set_option($this->socket_master, SOL_SOCKET, SO_REUSEADDR, 1);
//socket_bind($this->socket_master, $address, $port);
//echo socket_strerror(socket_last_error());
//socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 2, 'usec' => 0));
socket_connect($this->socket_master, $address, $port);
// socket_listen($this->socket_master);
//echo socket_strerror(socket_last_error());
$this->make_hand_shake($this->socket_master);
$this->connect($this->socket_master);
echo 'WebSocket Client Connected: ' . $address . ':' . $port . PHP_EOL;
$this->send_message('ping');
return;
}
public function send_message($msg)
{
return $this->send_data($this->socket_master, $msg);
}
public function receive_message()
{
$buffer = null;
$bytes = socket_recv($this->socket_master, $buffer, 8192, 0);
if($bytes > 0)
{
return $this->decode_data($this->user_master, $buffer);
}
else if($bytes === false)
{
echo PHP_EOL . socket_strerror(socket_last_error()) . PHP_EOL;
}
else
{
// NO DATA RECEIVED
// $this->disconnect($this->socket_master);
}
}
protected function debug_msg(&$socket, $msg)
{
echo PHP_EOL;
if($socket && is_resource($socket))
{
$address = null;
socket_getpeername($socket, $address);
echo $address . ': ';
}
echo $msg . PHP_EOL;
}
protected function decode_data(&$user, &$data)
{
$msg_opcode = bindec(substr(sprintf('%08b', ord($data[0])), 4, 4));
$data_length = ord($data[1]) & 127;
// TODO XXX: sometimes the opcode is 8 (close)... figure out why....
if($data_length === 126)
{
$mask = substr($data, 4, 4);
$encoded_data = substr($data, 4);
}
else if($data_length === 127)
{
$mask = substr($data, 10, 4);
$encoded_data = substr($data, 4);
}
else
{
$mask = substr($data, 2, 4);
$encoded_data = substr($data, 2, $data_length);
}
$decoded_data = null;
if(true || $user->user_agent == 'phoronix-test-suite')
{
// The PTS WebSocket client isn't currently masking data due to bug it seems
$decoded_data .= $encoded_data;
}
else
{
for($i = 0; $i < strlen($encoded_data); $i++)
{
$decoded_data .= $encoded_data[$i] ^ $mask[($i % 4)];
}
}
return $decoded_data;
}
protected function send_json_data($socket, $json)
{
$data = json_encode($json, JSON_UNESCAPED_SLASHES);
$this->send_data($socket, $data);
}
protected function send_data($socket, $data, $masked = true)
{
if(self::$debug_mode)
{
$this->debug_msg($socket, 'Sending: ' . $data);
}
$data_length = strlen($data);
$encoded = null;
// FRAME THE MESSAGE
$encoded .= chr(0x81);
if(false && $data_length <= 125)
{
$encoded .= chr($data_length);
}
else if($data_length <= 65535)
{
$encoded .= chr(126) . chr($data_length >> 8) . chr($data_length & 0xFF);
}
else
{
$encoded .= chr(127) . pack('N', 0) . pack('N', $data_length);
}
// XXX:
if($masked)
{
$mask = null;
for($i = 0; $i < 4; $i++)
{
$mask .= chr(rand(0, 255));
}
$encoded .= $mask;
// MESSAGE DATA
for($i = 0; $i < strlen($data); $i++)
{
$encoded .= $data[$i] ^ $mask[$i % 4];
}
}
else
{
$encoded .= $data;
}
// SEND
return socket_write($socket, $encoded, strlen($encoded));
}
public function send_json_data_by_user_id($user_id, $msg)
{
foreach($this->users as &$u)
{
if($u->id == $user_id)
{
$this->send_json_data($u->socket, $msg);
break;
}
}
}
private function connect($socket)
{
$user = new pts_web_socket_user();
$user->id = uniqid();
$user->socket = $socket;
return $user;
}
public function disconnect()
{
socket_close($this->socket_master);
}
protected function make_hand_shake(&$socket)
{
$this->send_data($socket, 'GET /mychat HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: phoronixtestsuite
Sec-WebSocket-Version: 13
User-Agent: phoronix-test-suite
Date: ' . date('D, d M Y H:i:s e'));
$bytes = socket_recv($socket, $buffer, 2048, 0);
$user = $this->connect($socket);
$this->process_hand_shake($user, $buffer);
}
protected function process_hand_shake($user, $buffer)
{
//echo 'HANDSHAKE = ' . PHP_EOL; var_dump($buffer);
list($resource, $host, $origin, $key, $version, $user_agent) = $this->extract_headers($buffer);
$protocol_handshake = array(
'HTTP/1.1 101 WebSocket Protocol Handshake',
'Date: ' . date('D, d M Y H:i:s e'),
'Connection: Upgrade',
'Upgrade: WebSocket',
'Sec-WebSocket-Origin: ' . $origin,
'Access-Control-Allow-Origin: ' . $origin,
'Access-Control-Allow-Credentials: true',
'Sec-WebSocket-Location: ws://' . $host . $resource,
// 'Sec-WebSocket-Version: ' . $version,
// 'Sec-WebSocket-Protocol: phoronixtestsuite',
'Server: phoronix-test-suite',
'Sec-WebSocket-Accept: ' . base64_encode(pack('H*', sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')))
);
$protocol_handshake = implode("\r\n", $protocol_handshake) . "\r\n" . "\r\n";
//echo 'HANDSHAKE RESPONSE = ' . PHP_EOL; var_dump($protocol_handshake);
$wrote = socket_write($user->socket, $protocol_handshake, strlen($protocol_handshake));
$user->handshake = true;
$user->res = $resource;
$user->user_agent = $user_agent;
return $wrote;
}
private function extract_headers($request)
{
$resource = strstr(substr(strstr($request, 'GET '), 4), ' HTTP/1.1', true);
$host = trim(strstr(substr(strstr($request, 'Host: '), 6), PHP_EOL, true));
$origin = trim(strstr(substr(strstr($request, 'Origin: '), 8), PHP_EOL, true));
$key = trim(strstr(substr(strstr($request, 'Sec-WebSocket-Key: '), 19), PHP_EOL, true));
$version = trim(strstr(substr(strstr($request, 'Sec-WebSocket-Version: '), 23), PHP_EOL, true));
$user_agent = trim(strstr(substr(strstr($request, 'User-Agent: '), 12), PHP_EOL, true));
if($user_agent == null)
{
$user_agent = trim(strstr(substr(strstr($request, 'Server: '), 8), PHP_EOL, true));
}
return array($resource, $host, $origin, $key, $version, $user_agent);
}
}
?>
phoronix-test-suite/documentation/includes/ 000755 001750 001750 00000000000 12307711432 022555 5 ustar 00michael michael 000000 000000 phoronix-test-suite/pts-core/objects/nye_Xml/pts_test_nye_XmlReader.php 000664 001750 001750 00000006477 12307711432 030112 0 ustar 00michael michael 000000 000000 .
*/
class pts_test_nye_XmlReader extends nye_XmlReader
{
protected $override_values;
protected $block_test_extension_support = false;
public function __construct($read_xml)
{
if(!isset($read_xml[512]))
{
if(defined('PTS_TEST_PROFILE_PATH') && is_file(PTS_TEST_PROFILE_PATH . $read_xml . '/test-definition.xml'))
{
$read_xml = PTS_TEST_PROFILE_PATH . $read_xml . '/test-definition.xml';
}
else if(substr($read_xml, -4) == '.zip' && is_file($read_xml))
{
$zip = new ZipArchive();
if($zip->open($read_xml) === true)
{
$read_xml = $zip->getFromName('test-definition.xml');
$zip->close();
}
}
}
$this->override_values = array();
parent::__construct($read_xml);
}
public function validate()
{
return $this->dom->schemaValidate(PTS_OPENBENCHMARKING_PATH . 'schemas/test-profile.xsd');
}
public function block_test_extension_support()
{
$this->block_test_extension_support = true;
}
public function overrideXMLValues($test_options)
{
foreach($test_options as $xml_tag => $value)
{
$this->overrideXMLValue($xml_tag, $value);
}
}
public function overrideXMLValue($xml_tag, $value)
{
$this->override_values[$xml_tag] = $value;
}
public function getOverrideValues()
{
return $this->override_values;
}
public function getXMLValue($xml_tag, $fallback_value = false)
{
if(isset($this->override_values[$xml_tag]) && !empty($this->override_values[$xml_tag]))
{
return $this->override_values[$xml_tag];
}
else
{
$tag_name = basename($xml_tag);
if(isset($this->override_values[$tag_name]) && !empty($this->override_values[$tag_name]))
{
return $this->override_values[$tag_name];
}
}
return parent::getXmlValue($xml_tag, $fallback_value);
}
public function handleXmlZeroTagFallback($xml_tag, $fallback_value)
{
// Cascading Test Profiles for finding a tag within an XML file being extended by another XML file
if($xml_tag == 'PhoronixTestSuite/TestProfile/Extends' || $this->block_test_extension_support)
{
// Otherwise we'd have an infinite loop
return $fallback_value;
}
$test_extends = $this->getXmlValue('PhoronixTestSuite/TestProfile/Extends');
if(!empty($test_extends) && PTS_IS_CLIENT)
{
$test_extends = pts_openbenchmarking::evaluate_string_to_qualifier($test_extends, true, 'test');
$test_below_parser = new pts_test_nye_XmlReader($test_extends);
$test_below_tag = $test_below_parser->getXMLValue($xml_tag);
if(!empty($test_below_tag))
{
$fallback_value = $test_below_tag;
}
}
return $fallback_value;
}
}
?>
phoronix-test-suite/pts-core/static/phoronix-test-suite-launcher.desktop 000664 001750 001750 00000000322 12307711432 030264 0 ustar 00michael michael 000000 000000 [Desktop Entry]
Name=Phoronix Test Suite Launcher
Exec=phoronix-test-suite openbenchmarking-launcher %f
NoDisplay=true
StartupNotify=true
MimeType=application/x-openbenchmarking;
Terminal=true
Type=Application
phoronix-test-suite/pts-core/objects/phodevi/sensors/hdd_temp.php 000664 001750 001750 00000002337 12307711432 026721 0 ustar 00michael michael 000000 000000 .
*/
class hdd_temp implements phodevi_sensor
{
public static function get_type()
{
return 'hdd';
}
public static function get_sensor()
{
return 'temp';
}
public static function get_unit()
{
return 'Celsius';
}
public static function support_check()
{
$test = self::read_sensor();
return is_numeric($test) && $test != -1;
}
public static function read_sensor()
{
return phodevi_parser::read_hddtemp(null);
}
}
?>
phoronix-test-suite/pts-core/objects/phodevi/parsers/phodevi_linux_parser.php 000664 001750 001750 00000044215 12307711432 031352 0 ustar 00michael michael 000000 000000 .
*/
class phodevi_linux_parser
{
public static function read_ipmitool_sensor($sensor)
{
$value = false;
$ipmitool = shell_exec('ipmitool sdr list 2>&1');
$hit = stripos($ipmitool, $sensor);
if($hit !== false)
{
$trimmed = substr($ipmitool, ($hit + strlen($sensor)));
$trimmed = substr($trimmed, 0, strpos($trimmed, PHP_EOL));
$trimmed = explode('|', $trimmed);
if(count($trimmed) == 3)
{
$value = explode(' ', trim($trimmed[1]));
$value = $value[0];
}
}
return $value;
}
public static function read_sysfs_node($search, $type = 'NUMERIC', $node_dir_check = null, $find_position = 1)
{
static $sysfs_file_cache = null;
$arg_hash = crc32(serialize(func_get_args()));
if(!isset($sysfs_file_cache[$arg_hash]))
{
$find_count = 0;
foreach(pts_file_io::glob($search) as $sysfs_file)
{
if(is_array($node_dir_check))
{
$skip_to_next = false;
$sysfs_dir = dirname($sysfs_file) . '/';
foreach($node_dir_check as $node_check => $value_check)
{
if(!is_file($sysfs_dir . $node_check))
{
$skip_to_next = true;
break;
}
else if($value_check !== true)
{
$value_check_value = pts_file_io::file_get_contents($sysfs_dir . $node_check);
foreach(explode(',', $value_check) as $check)
{
if(isset($check[0]) && $check[0] == '!')
{
if($value_check_value == substr($check, 1))
{
$skip_to_next = true;
break;
}
}
else if($value_check_value != $check)
{
$skip_to_next = true;
break;
}
}
}
if($skip_to_next)
{
break;
}
}
if($skip_to_next)
{
continue;
}
}
$sysfs_value = pts_file_io::file_get_contents($sysfs_file);
switch($type)
{
case 'NUMERIC':
if(is_numeric($sysfs_value))
{
$sysfs_file_cache[$arg_hash] = $sysfs_file;
}
break;
case 'POSITIVE_NUMERIC':
if(is_numeric($sysfs_value) && $sysfs_value > 0)
{
$sysfs_file_cache[$arg_hash] = $sysfs_file;
}
break;
case 'NOT_EMPTY':
if(!empty($sysfs_value))
{
$sysfs_file_cache[$arg_hash] = $sysfs_file;
}
break;
case 'NO_CHECK':
$sysfs_file_cache[$arg_hash] = $sysfs_file;
break;
}
$find_count++;
if($find_count < $find_position)
{
unset($sysfs_file_cache[$arg_hash]);
}
if(isset($sysfs_file_cache[$arg_hash]))
{
break;
}
}
if(!isset($sysfs_file_cache[$arg_hash]))
{
$sysfs_file_cache[$arg_hash] = false;
}
}
return $sysfs_file_cache[$arg_hash] == false ? -1 : pts_file_io::file_get_contents($sysfs_file_cache[$arg_hash]);
}
public static function read_dmidecode($type, $sub_type, $object, $find_once = false, $ignore = null)
{
// Read Linux dmidecode
$value = array();
if(is_readable('/dev/mem') && pts_client::executable_in_path('dmidecode'))
{
$ignore = pts_arrays::to_array($ignore);
$dmidecode = shell_exec('dmidecode --type ' . $type . ' 2>&1');
$sub_type = "\n" . $sub_type . "\n";
do
{
$sub_type_start = strpos($dmidecode, $sub_type);
if($sub_type_start !== false)
{
$dmidecode = substr($dmidecode, ($sub_type_start + strlen($sub_type)));
$dmidecode_section = substr($dmidecode, 0, strpos($dmidecode, "\n\n"));
$dmidecode = substr($dmidecode, strlen($dmidecode_section));
$dmidecode_elements = explode("\n", $dmidecode_section);
$found_in_section = false;
for($i = 0; $i < count($dmidecode_elements) && $found_in_section == false; $i++)
{
$dmidecode_r = pts_strings::colon_explode($dmidecode_elements[$i]);
if($dmidecode_r[0] == $object && isset($dmidecode_r[1]) && !in_array($dmidecode_r[1], $ignore))
{
array_push($value, $dmidecode_r[1]);
$found_in_section = true;
}
}
}
}
while($sub_type_start !== false && ($find_once == false || $found_in_section == false));
}
if(count($value) == 0)
{
$value = false;
}
else if($find_once && count($value) == 1)
{
$value = $value[0];
}
return $value;
}
public static function read_sys_disk_speed($path, $to_read)
{
$speed = -1; // in MB/s
if(is_file($path))
{
switch($to_read)
{
case 'WRITE':
$sector = 6;
$time = 7;
break;
case 'READ':
$sector = 2;
$time = 3;
break;
default:
return $speed;
break;
}
$start_stat = pts_strings::trim_spaces(file_get_contents($path));
usleep(500000);
$end_stat = pts_strings::trim_spaces(file_get_contents($path));
$start_stat = explode(' ', $start_stat);
$end_stat = explode(' ', $end_stat);
$delta_sectors = $end_stat[$sector] - $start_stat[$sector];
$delta_ms_spent = $end_stat[$time] - $start_stat[$time];
// assuming 512 byte sectors
$delta_mb = $delta_sectors * 512 / 1048576;
$delta_seconds = $delta_ms_spent / 1000;
$speed = $delta_seconds != 0 ? $delta_mb / $delta_seconds : 0;
}
return pts_math::set_precision($speed, 2);
}
public static function read_sys_dmi($identifier)
{
$dmi = false;
if(is_dir('/sys/class/dmi/id/'))
{
$ignore_words = phodevi_parser::hardware_values_to_remove();
foreach(pts_arrays::to_array($identifier) as $id)
{
if(is_readable('/sys/class/dmi/id/' . $id))
{
$dmi_file = pts_file_io::file_get_contents('/sys/class/dmi/id/' . $id);
if(!empty($dmi_file) && !in_array(strtolower($dmi_file), $ignore_words))
{
$dmi = $dmi_file;
break;
}
}
}
}
return $dmi;
}
public static function read_ati_overdrive($attribute, $adapter = 0)
{
// Read ATI OverDrive information
// OverDrive supported in fglrx 8.52+ drivers
$value = false;
if(($amdconfig = self::find_amdconfig()))
{
if($attribute == 'Temperature')
{
$info = shell_exec($amdconfig . ' --adapter=' . $adapter . ' --od-gettemperature 2>&1');
if(($start = strpos($info, 'Temperature -')) !== false)
{
$info = substr($info, $start + 14);
$value = substr($info, 0, strpos($info, ' C'));
}
}
else if($attribute == 'FanSpeed')
{
// Right now there is no standardized interface to get the fan speed through besides the pplib command
$info = shell_exec($amdconfig . ' --adapter=' . $adapter . ' --pplib-cmd \'get fanspeed 0\' 2>&1');
if(($start = strpos($info, 'Fan Speed:')) !== false)
{
$info = substr($info, $start + 11);
$info = substr($info, 0, strpos($info, '%'));
if(is_numeric($info))
{
$value = $info;
}
}
}
else
{
$info = shell_exec($amdconfig . ' --adapter=' . $adapter . ' --od-getclocks 2>&1');
if(strpos($info, 'GPU') !== false)
{
foreach(explode("\n", $info) as $line)
{
$line_r = pts_strings::colon_explode($line);
if(count($line_r) == 2)
{
$od_option = str_replace(' ', null, $line_r[0]);
if($od_option == $attribute)
{
$od_value = pts_strings::trim_spaces($line_r[1]);
$od_value = str_replace(array('%'), null, $od_value);
$od_value_r = explode(' ', $od_value);
$value = (count($od_value_r) == 1 ? $od_value_r[0] : $od_value_r);
}
}
}
}
}
}
return $value;
}
public static function read_amd_pcsdb($attribute)
{
// Read AMD's AMDPCSDB, AMD Persistent Configuration Store Database
static $try_aticonfig = true;
static $is_first_read = true;
$ati_info = null;
if($try_aticonfig)
{
if(($amdconfig = self::find_amdconfig()))
{
$info = shell_exec($amdconfig . ' --get-pcs-key=' . $attribute . ' 2>&1');
if($is_first_read && strpos($info, 'No supported adapters') != false)
{
$try_aticonfig = false;
}
else
{
if(($pos = strpos($info, ':')) > 0 && strpos($info, 'Error') === false)
{
$ati_info = substr($info, $pos + 2);
$ati_info = substr($ati_info, 0, strpos($ati_info, ' '));
}
}
}
else
{
$try_aticonfig = false;
}
$is_first_read = false;
}
if($ati_info == null && is_file('/etc/ati/amdpcsdb'))
{
// Using aticonfig --get-pcs-key failed, switch to the PTS direct parser of AMDPCSDB
$ati_info = phodevi_linux_parser::read_amd_pcsdb_direct_parser($attribute);
}
return $ati_info;
}
public static function read_amd_pcsdb_direct_parser($attribute, $find_once = false)
{
// Read AMD's AMDPCSDB, AMD Persistent Configuration Store Database but using our own internal parser instead of relying upon aticonfig/amdconfig
$amdpcsdb_file = null;
$last_found_section_count = -1;
$this_section_count = 0;
$attribute_values = array();
$attribute = pts_strings::comma_explode($attribute);
if(count($attribute) == 2)
{
$attribute_prefix = array_reverse(explode('/', $attribute[0]));
$attribute_key = $attribute[1];
$is_in_prefix = false;
if(is_file('/etc/ati/amdpcsdb'))
{
$amdpcsdb_file = explode("\n", file_get_contents('/etc/ati/amdpcsdb'));
}
for($l = 0; $l < count($amdpcsdb_file) && ($find_once == false || $last_found_section_count == -1); $l++)
{
$line = trim($amdpcsdb_file[$l]);
if(substr($line, 0, 1) == '[' && substr($line, -1) == ']')
{
// AMDPCSDB Header
$prefix_matches = true;
$header = array_reverse(explode('/', substr($line, 1, -1)));
for($i = 0; $i < count($attribute_prefix) && $i < count($header) && $prefix_matches; $i++)
{
if($attribute_prefix[$i] != $header[$i] && pts_strings::proximity_match($attribute_prefix[$i], $header[$i]) == false)
{
$prefix_matches = false;
}
}
if($prefix_matches)
{
$is_in_prefix = true;
$this_section_count++;
}
else
{
$is_in_prefix = false;
}
}
else if($is_in_prefix && $this_section_count != $last_found_section_count && count(($key_components = explode('=', $line))) == 2)
{
// AMDPCSDB Value
if($key_components[0] == $attribute_key)
{
$value_type = substr($key_components[1], 0, 1);
$value = substr($key_components[1], 1);
switch($value_type)
{
case 'V':
// Value
if(is_numeric($value) && strlen($value) < 9)
{
$value = dechex($value);
$value = '0x' . str_repeat(0, 8 - strlen($value)) . strtoupper($value);
}
break;
case 'R':
// Raw
break;
case 'S':
// String
break;
}
array_push($attribute_values, $value);
$last_found_section_count = $this_section_count;
}
}
}
}
if(count($attribute_values) == 0)
{
$attribute_values = null;
}
else if(count($attribute_values) == 1)
{
$attribute_values = $attribute_values[0];
}
return $attribute_values;
}
public static function find_amdconfig()
{
$amdconfig = false;
if(($t = pts_client::executable_in_path('aticonfig')))
{
$amdconfig = $t;
}
else if(($t = pts_client::executable_in_path('amdconfig')))
{
$amdconfig = $t;
}
return $amdconfig;
}
public static function read_amd_graphics_adapters()
{
// Read ATI/AMD graphics hardware using aticonfig
$adapters = array();
if(($amdconfig = self::find_amdconfig()))
{
$info = trim(shell_exec($amdconfig . ' --list-adapters 2>&1'));
foreach(explode("\n", $info) as $line)
{
if(($last_point = strrpos($line, '.')) > 0)
{
array_push($adapters, substr($line, $last_point + 3));
}
}
}
return $adapters;
}
public static function read_cpuinfo($attribute, $cpuinfo = false)
{
// Read CPU information
$cpuinfo_matches = array();
if($cpuinfo == false)
{
if(is_file('/proc/cpuinfo'))
{
$cpuinfo = file_get_contents('/proc/cpuinfo');
}
else
{
return $cpuinfo_matches;
}
}
foreach(pts_arrays::to_array($attribute) as $attribute_check)
{
$cpuinfo_lines = explode("\n", $cpuinfo);
foreach($cpuinfo_lines as $line)
{
$line = pts_strings::trim_explode(': ', $line);
if(!isset($line[0]))
{
continue;
}
$this_attribute = $line[0];
$this_value = (count($line) > 1 ? $line[1] : null);
if($this_attribute == $attribute_check)
{
array_push($cpuinfo_matches, $this_value);
}
}
if(count($cpuinfo_matches) != 0)
{
break;
}
}
return $cpuinfo_matches;
}
public static function read_lsb_distributor_id()
{
$vendor = phodevi_linux_parser::read_lsb('Distributor ID');
// Quirks for derivative distributions that don't know how to handle themselves properly
if($vendor == 'MandrivaLinux' && phodevi_linux_parser::read_lsb('Description') == 'PCLinuxOS')
{
// PC Linux OS only stores its info in /etc/pclinuxos-release
$vendor = false;
}
return $vendor;
}
public static function read_lsb($desc)
{
// Read LSB Release information, Linux Standards Base
$info = false;
if(pts_client::executable_in_path('lsb_release'))
{
static $output = null;
if($output == null)
{
$output = shell_exec('lsb_release -a 2>&1');
}
if(($pos = strrpos($output, $desc . ':')) !== false)
{
$info = substr($output, $pos + strlen($desc) + 1);
$info = trim(substr($info, 0, strpos($info, "\n")));
}
if(strtolower($info) == 'n/a')
{
$info = false;
}
}
return $info;
}
public static function read_acpi($point, $match)
{
// Read ACPI - Advanced Configuration and Power Interface
$value = false;
$point = pts_arrays::to_array($point);
for($i = 0; $i < count($point) && empty($value); $i++)
{
if(is_file('/proc/acpi' . $point[$i]))
{
$acpi_lines = explode("\n", file_get_contents('/proc/acpi' . $point[$i]));
for($i = 0; $i < count($acpi_lines) && $value == false; $i++)
{
$line = pts_strings::trim_explode(': ', $acpi_lines[$i]);
if(!isset($line[0]))
{
continue;
}
$this_attribute = $line[0];
$this_value = (count($line) > 1 ? $line[1] : null);
if($this_attribute == $match)
{
$value = $this_value;
}
}
}
}
return $value;
}
public static function read_pci_subsystem_value($desc)
{
$lspci = shell_exec('lspci -v 2> /dev/null');
$subsystem = null;
foreach(pts_arrays::to_array($desc) as $check)
{
if(($hit = strpos($lspci, $check)) !== false)
{
$lspci = substr($lspci, $hit);
if(($hit = strpos($lspci, 'Subsystem: ')) !== false)
{
$lspci = substr($lspci, ($hit + strlen('Subsystem: ')));
$lspci = substr($lspci, 0, strpos($lspci, PHP_EOL));
$vendors = array(
'Sapphire Technology' => 'Sapphire',
'PC Partner' => 'Sapphire',
'Micro-Star International' => 'MSI',
'XFX' => 'XFX',
'ASUS' => 'ASUS',
'Gigabyte' => 'Gigabyte',
'Elitegroup' => 'ECS',
'eVga' => 'eVGA',
'Hightech Information System' => 'HIS',
'Zotac' => 'Zotac'
);
foreach($vendors as $vendor => $clean_vendor)
{
if(stripos($lspci, $vendor) !== false)
{
$subsystem = $clean_vendor;
break;
}
}
}
}
}
return $subsystem;
}
public static function read_pci($desc, $clean_string = true)
{
// Read PCI bus information
static $pci_info = null;
$info = false;
$desc = pts_arrays::to_array($desc);
if($pci_info == null)
{
if(!is_executable('/usr/bin/lspci') && is_executable('/sbin/lspci'))
{
$lspci_cmd = '/sbin/lspci';
}
else if(($lspci = pts_client::executable_in_path('lspci')))
{
$lspci_cmd = $lspci;
}
else
{
return false;
}
$pci_info = shell_exec($lspci_cmd . ' 2> /dev/null');
}
for($i = 0; $i < count($desc) && empty($info); $i++)
{
if(substr($desc[$i], -1) != ':')
{
$desc[$i] .= ':';
}
if(($pos = strpos($pci_info, $desc[$i])) !== false)
{
$sub_pci_info = str_replace(array('[AMD]', '[AMD/ATI]'), null, substr($pci_info, $pos + strlen($desc[$i])));
$EOL = strpos($sub_pci_info, "\n");
if($clean_string)
{
if(($temp = strpos($sub_pci_info, '/')) < $EOL && $temp > 0)
{
if(($temp = strpos($sub_pci_info, ' ', ($temp + 2))) < $EOL && $temp > 0)
{
$EOL = $temp;
}
}
if(($temp = strpos($sub_pci_info, '(')) < $EOL && $temp > 0)
{
$EOL = $temp;
}
if(($temp = strpos($sub_pci_info, '[')) < $EOL && $temp > 0)
{
$EOL = $temp;
}
}
$sub_pci_info = trim(substr($sub_pci_info, 0, $EOL));
if(($strlen = strlen($sub_pci_info)) >= 6 && $strlen < 128)
{
$info = pts_strings::strip_string($sub_pci_info);
}
}
}
return $info;
}
public static function read_sensors($attributes)
{
// Read LM_Sensors
$value = false;
if(isset(phodevi::$vfs->sensors))
{
$sensors = phodevi::$vfs->sensors;
$sensors_lines = explode("\n", $sensors);
$attributes = pts_arrays::to_array($attributes);
for($j = 0; $j < count($attributes) && empty($value); $j++)
{
$attribute = $attributes[$j];
for($i = 0; $i < count($sensors_lines) && $value == false; $i++)
{
$line = pts_strings::trim_explode(': ', $sensors_lines[$i]);
if(!isset($line[0]))
{
continue;
}
$this_attribute = $line[0];
if($this_attribute == $attribute)
{
$this_remainder = trim(str_replace(array('+', '°'), ' ', $line[1]));
$this_value = substr($this_remainder, 0, strpos($this_remainder, ' '));
if(is_numeric($this_value) && $this_value > 0)
{
$value = $this_value;
}
}
}
}
}
return $value;
}
}
?>
phoronix-test-suite/pts-core/objects/pts_Graph/pts_OverviewGraph.php 000664 001750 001750 00000017155 12341661506 027420 0 ustar 00michael michael 000000 000000 .
*/
class pts_OverviewGraph extends pts_Graph
{
protected $result_file;
protected $system_identifiers;
protected $test_titles;
protected $graphs_per_row;
protected $graph_item_width;
protected $graph_row_height = 120;
protected $graph_row_count;
public $skip_graph = false;
public function __construct($result_file)
{
$result_object = null;
parent::__construct($result_object, $result_file);
// System Identifiers
if($result_file->is_multi_way_comparison())
{
// Multi way comparisons currently render the overview graph as blank
$this->skip_graph = true;
return;
}
$this->system_identifiers = $result_file->get_system_identifiers();
if(count($this->system_identifiers) < 2)
{
// No point in generating this when there is only one identifier
$this->skip_graph = true;
return;
}
$result_objects = array();
foreach($result_file->get_result_objects() as $result_object)
{
if($result_object->test_profile->get_display_format() == 'BAR_GRAPH')
{
array_push($result_objects, $result_object);
}
}
$result_object_count = count($result_objects);
if($result_object_count < 3)
{
// No point in generating this if there aren't many tests
$this->skip_graph = true;
return;
}
$result_file->override_result_objects($result_objects);
// Test Titles
$this->i['identifier_size'] = 6.5;
$this->i['graph_width'] = 1000;
$titles = $result_file->get_test_titles();
list($longest_title_width, $longest_title_height) = pts_svg_dom::estimate_text_dimensions(pts_strings::find_longest_string($titles), $this->i['identifier_size']);
$this->i['left_start'] += 20;
$this->graphs_per_row = min((count($this->system_identifiers) > 10 ? 6 : 10), floor(($this->i['graph_width'] - $this->i['left_start'] - $this->i['left_end_right']) / ($longest_title_width + 4)));
$this->graph_item_width = floor(($this->i['graph_width'] - $this->i['left_start'] - $this->i['left_end_right']) / $this->graphs_per_row);
$this->graph_row_count = ceil($result_object_count / $this->graphs_per_row);
$this->i['top_start'] += 20 + (count($this->system_identifiers) / 3 * $this->i['identifier_size']);
$height = $this->i['top_start'] + ($this->graph_row_count * ($this->graph_row_height + 15));
$this->graph_title = $result_file->get_title();
$this->graph_y_title = null;
$this->i['graph_proportion'] = 'HIB';
$this->i['show_background_lines'] = true;
$this->update_graph_dimensions($this->i['graph_width'], $height, true);
$this->result_file = $result_file;
return true;
}
public function doSkipGraph()
{
return $this->skip_graph;
}
public function renderGraph()
{
$this->graph_data_title = &$this->system_identifiers;
$this->i['graph_max_value'] = 1.0;
$l_height = 15;
$this->i['key_line_height'] = $l_height;
if(($key_count = count($this->graph_data_title)) > 8)
{
$this->update_graph_dimensions(-1, $this->i['graph_height'] + (floor(($key_count - 8) / 4) * 14), true);
}
// Do the actual work
$this->render_graph_init();
$this->render_graph_key();
for($i = 0; $i < $this->graph_row_count; $i++)
{
$this->render_graph_base($this->i['left_start'], $this->i['top_start'] + ($i * ($this->graph_row_height + $l_height)), $this->i['graph_left_end'], $this->i['top_start'] + ($i * ($this->graph_row_height + $l_height)) + $this->graph_row_height);
$this->render_graph_value_ticks($this->i['left_start'], $this->i['top_start'] + ($i * ($this->graph_row_height + $l_height)), $this->i['graph_left_end'], $this->i['top_start'] + ($i * ($this->graph_row_height + $l_height)) + $this->graph_row_height, false);
}
$row = 0;
$col = 0;
$bar_count = count($this->system_identifiers);
$inter_width = $this->graph_item_width * 0.1;
$bar_width = floor(($this->graph_item_width - ($inter_width * 2)) / $bar_count);
$has_graphed_a_bar = false;
foreach($this->result_file->get_result_objects() as $i => $result_object)
{
$top_start = $this->i['top_start'] + ($row * ($this->graph_row_height + $l_height));
$top_end = round($this->i['top_start'] + ($row * ($this->graph_row_height + $l_height)) + $this->graph_row_height);
$px_bound_left = $this->i['left_start'] + ($this->graph_item_width * ($col % $this->graphs_per_row));
$px_bound_right = $px_bound_left + $this->graph_item_width;
$this->svg_dom->add_text_element($result_object->test_profile->get_title(), array('x' => ($px_bound_left + ($this->graph_item_width * 0.5)), 'y' => ($top_end + 3), 'font-size' => $this->i['identifier_size'], 'fill' => self::$c['color']['headers'], 'text-anchor' => 'middle', 'dominant-baseline' => 'text-before-edge'));
if($result_object->test_profile->get_display_format() == 'BAR_GRAPH')
{
$all_values = $result_object->test_result_buffer->get_values();
switch($result_object->test_profile->get_result_proportion())
{
case 'HIB':
$divide_value = max($all_values);
break;
case 'LIB':
$divide_value = min($all_values);
break;
}
foreach($result_object->test_result_buffer->get_buffer_items() as $x => $buffer_item)
{
$paint_color = $this->get_paint_color($buffer_item->get_result_identifier());
switch($result_object->test_profile->get_result_proportion())
{
case 'HIB':
$value = $buffer_item->get_result_value() / $divide_value;
break;
case 'LIB':
$value = $divide_value / $buffer_item->get_result_value();
break;
}
$graph_size = round(($value / $this->i['graph_max_value']) * ($top_end - $top_start));
$value_plot_top = $top_end + 1 - $graph_size;
$px_left = $px_bound_left + $inter_width + ($bar_width * $x);
$px_right = $px_left + $bar_width;
$this->svg_dom->add_element('rect', array('x' => $px_left, 'y' => $value_plot_top, 'width' => $bar_width, 'height' => ($top_end - $value_plot_top), 'fill' => $paint_color, 'stroke' => self::$c['color']['body_light'], 'stroke-width' => 1));
}
$has_graphed_a_bar = true;
}
if(($i + 1) % $this->graphs_per_row == 0 && $i != 0)
{
$this->svg_dom->draw_svg_line($this->i['left_start'] + $this->graph_item_width, $top_end, $this->i['graph_left_end'] - ($this->i['graph_width'] % $this->graph_item_width), $top_end, self::$c['color']['notches'], 10, array('stroke-dasharray' => '1,' . ($this->graph_item_width - 1)));
$this->svg_dom->draw_svg_line($this->i['left_start'], $top_end, $this->i['graph_left_end'], $top_end, self::$c['color']['notches'], 1);
$row++;
}
$col++;
}
if($has_graphed_a_bar == false)
{
// Don't show an empty overview graph...
$this->skip_graph = true;
}
//$this->render_graph_base($this->i['left_start'], $this->i['top_start'], $this->i['graph_left_end'], $this->i['graph_top_end']);
$this->render_graph_heading();
//$this->render_graph_watermark();
}
}
?>
phoronix-test-suite/pts-core/external-test-dependencies/scripts/install-opensuse-packages.sh 000775 001750 001750 00000000340 12307711432 034163 0 ustar 00michael michael 000000 000000 #!/bin/sh
# OpenSuSE package installation
echo "Please enter your root password below:" 1>&2
if [ -x /usr/bin/zypper ]; then
su root -c "zypper install -l -y --force-resolution $*"
else
su root -c "yast -i $*"
fi
exit
phoronix-test-suite/documentation/stubs/ 000755 001750 001750 00000000000 12341156552 022113 5 ustar 00michael michael 000000 000000 phoronix-test-suite/pts-core/objects/client/pts_module_interface.php 000664 001750 001750 00000012616 12307711432 027455 0 ustar 00michael michael 000000 000000 .
*/
class pts_module_interface
{
const module_name = "Generic Module";
const module_version = "1.0.0";
const module_description = "A description of the module.";
const module_author = "Module Creator";
public static $module_store_vars = array();
public static function module_info()
{
}
public static function module_setup()
{
return array();
}
public static function module_setup_validate($module_options_array)
{
return $module_options_array;
}
public static function module_environmental_variables()
{
return array();
}
public static function user_commands()
{
return array();
}
//
// The below methods are optional and can be implemented by any module
//
/*
//
// General Functions
//
public static function __startup($obj = null)
{
return;
}
public static function __shutdown($obj = null)
{
return;
}
//
// Option Functions
//
public static function __pre_option_process($obj = null)
{
// Passed is a string containing the name of the option command about to be run
return;
}
public static function __post_option_process($obj = null)
{
// Passed is a string containing the name of the option after it has run
return;
}
//
// Installation Functions
//
public static function __pre_install_process($obj = null)
{
// Passed is the pts_test_install_manager
return;
}
public static function __pre_test_download($obj = null)
{
// Passed is an array where as the first element is the test identifier for the name of the test about to have its files downloaded
// The second element in this array is an additional array containing the pts_test_file_download objects that will be downloaded
return;
}
public static function __interim_test_download($obj = null)
{
// Passed is an array where as the first element is the test identifier for the name of the test about to have its files downloaded
// The second element in this array is an additional array containing the pts_test_file_download objects that will be downloaded
return;
}
public static function __post_test_download($obj = null)
{
// Passed as the first argument to this function is the test identifier for the name of the test where the file(s) were just downloaded
return;
}
public static function __pre_test_install($obj = null)
{
// Passed as the first argument to this function is the test identifier for the name of the test about to be installed
return;
}
public static function __post_test_install($obj = null)
{
// Passed as the first argument to this function is the test identifier for the name of the test just installed
return;
}
public static function __post_install_process($obj = null)
{
// Passed is the pts_test_install_manager
return;
}
//
// Run Functions
//
public static function __run_manager_setup($obj = null)
{
// Passed is the current pts_test_run_manager
return;
}
public static function __pre_run_process($obj = null)
{
// Passed is the current pts_test_run_manager, where accessible is an array of pts_test_result objects for all tests scheduled to run
return;
}
public static function __pre_test_run($obj = null)
{
// Passed is a read-only copy of the current pts_test_result for the given test
return;
}
public static function __interim_test_run($obj = null)
{
// Passed is a read-only copy of the current pts_test_result for the given test
return;
}
public static function __post_test_run($obj = null)
{
// Passed is a read-only copy of the current pts_test_result for the given test
return;
}
public static function __post_test_run_success($obj = null)
{
// Passed is a copy of the pts_test_result when the run was successful
return;
}
public static function __post_test_run_process($obj = null)
{
// Passed is a copy of the pts_result_file_writer
return;
}
public static function __post_run_process($obj = null)
{
// Passed is the current pts_test_run_manager, where accessible is an array of pts_test_result objects for all tests scheduled to run
return;
}
//
// Event-driven Functions
//
public static function __event_openbenchmarking_upload($obj = null)
{
// Passed is the decoded JSON response from OpenBenchmarking.org
return;
}
public static function __event_results_process($obj = null)
{
// Passed is the pts_test_run_manager
return;
}
public static function __event_results_saved($obj = null)
{
// Passed is a copy of the pts_test_run_manager
return;
}
public static function __event_user_error($obj = null)
{
// TODO use __event_user_error
return;
}
*/
}
?>
phoronix-test-suite/pts-core/objects/nye_Xml/nye_XmlWriter.php 000664 001750 001750 00000006572 12307711432 026233 0 ustar 00michael michael 000000 000000 .
*/
class nye_XmlWriter
{
protected $items;
public $dom;
public function __construct($xsl_binding = null, $nice_formatting = true)
{
$this->dom = new DOMDocument('1.0');
$this->dom->formatOutput = PTS_IS_CLIENT && $nice_formatting;
//$this->dom->preserveWhiteSpace = false;
$this->items = array();
if(PTS_IS_CLIENT && stripos(PTS_PHP_VERSION, 'hiphop') === false)
{
$pts_comment = $this->dom->createComment(pts_title(true));
$this->dom->appendChild($pts_comment);
}
if($xsl_binding != null)
{
$xslt = $this->dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="' . $xsl_binding . '"');
$this->dom->appendChild($xslt);
}
}
public function addXmlNodeWNE($xml_location, $xml_value = null)
{
// When Not Empty, add the XML node
return $xml_value === null || $xml_value === false ? false : $this->addXmlNode($xml_location, $xml_value);
}
public function addXmlNode($xml_location, $xml_value = null)
{
$nodes = explode('/', $xml_location);
$pointer = &$this->items;
for($i = 0, $node_count = count($nodes); $i < $node_count; $i++)
{
if(!isset($pointer[$nodes[$i]]) || ($i == ($node_count - 2) && isset($pointer[$nodes[$i]][$nodes[($i + 1)]])))
{
$pointer[$nodes[$i]] = array();
$pointer[$nodes[$i]][0] = $this->dom->createElement($nodes[$i]);
if($i == 0)
{
$this->dom->appendChild($pointer[$nodes[$i]][0]);
}
else
{
$pointer[0]->appendChild($pointer[$nodes[$i]][0]);
if($i == ($node_count - 1))
{
$t = $this->dom->createTextNode($xml_value);
$pointer[$nodes[$i]][0]->appendChild($t);
}
}
}
$pointer = &$pointer[$nodes[$i]];
}
}
public function addXmlNodeFromReader($xml_location, &$xml, $default_value = null)
{
$value = $xml->getXmlValue($xml_location);
$this->addXmlNode($xml_location, (empty($value) ? $default_value : $value));
}
public function addXmlNodeFromReaderWNE($xml_location, &$xml)
{
$value = $xml->getXmlValue($xml_location);
$this->addXmlNodeWNE($xml_location, $value);
}
public function saveXMLFile($to_file)
{
return $this->dom->save($to_file);
}
public function getXML()
{
return $this->dom->saveXML();
}
}
?>
phoronix-test-suite/pts-core/objects/phodevi/parsers/phodevi_parser.php 000664 001750 001750 00000016210 12307711432 030125 0 ustar 00michael michael 000000 000000 .
*/
class phodevi_parser
{
public static function read_nvidia_extension($attribute)
{
// Read NVIDIA's NV Extension
$nv_info = false;
if(pts_client::executable_in_path('nvidia-settings'))
{
$info = shell_exec('nvidia-settings --query ' . $attribute . ' 2> /dev/null');
if(($pos = strpos($info, pts_strings::last_in_string($attribute, '/'))) > 0 && strpos($info, 'ERROR:') === false)
{
$nv_info = substr($info, strpos($info, '):') + 3);
$nv_info = trim(substr($nv_info, 0, strpos($nv_info, "\n")));
if(substr($nv_info, -1) == '.')
{
$nv_info = substr($nv_info, 0, -1);
}
}
}
return $nv_info;
}
public static function read_xdpy_monitor_info()
{
// Read xdpyinfo monitor information
return array();
static $monitor_info = null;
if($monitor_info == null)
{
$monitor_info = array();
if(pts_client::executable_in_path('xdpyinfo'))
{
$info = trim(shell_exec('xdpyinfo -ext XINERAMA 2>&1 | grep head'));
foreach(explode("\n", $info) as $xdpyinfo_line)
{
if(!empty($xdpyinfo_line) && strpos($xdpyinfo_line, '0x0') == false)
{
array_push($monitor_info, $xdpyinfo_line);
}
}
}
}
return $monitor_info;
}
public static function read_glx_renderer()
{
if(isset(phodevi::$vfs->glxinfo))
{
$info = phodevi::$vfs->glxinfo;
}
else if(PTS_IS_CLIENT && pts_client::executable_in_path('fglrxinfo'))
{
$info = shell_exec('fglrxinfo 2>&1');
}
else
{
return false;
}
if(($pos = strpos($info, 'OpenGL renderer string:')) !== false)
{
$info = substr($info, $pos + 24);
$info = trim(substr($info, 0, strpos($info, "\n")));
}
else
{
$info = false;
}
if(stripos($info, 'Software Rasterizer') !== false)
{
$info = false;
}
return $info;
}
public static function read_hddtemp($disk = null)
{
// Read hard drive temperature using hddtemp
$hdd_temperature = -1;
if(pts_client::executable_in_path('hddtemp'))
{
if(empty($disk))
{
$disks = glob('/dev/sd*');
if(count($disks) > 0)
{
$disk = array_shift($disks);
}
}
// For most situations this won't work since hddtemp usually requires root access
$info = trim(shell_exec('hddtemp ' . $disk . ' 2>&1'));
if(($start_pos = strrpos($info, ': ')) > 0 && ($end_pos = strrpos($info, '°')) > $start_pos)
{
$temperature = substr($info, ($start_pos + 2), ($end_pos - $start_pos - 2));
if(is_numeric($temperature))
{
$unit = substr($info, $end_pos + 2, 1);
if($unit == 'F')
{
$temperature = round((($temperature - 32) * 5 / 9), 2);
}
$hdd_temperature = $temperature;
}
}
}
return $hdd_temperature;
}
public static function read_xorg_module_version($module)
{
$module_version = false;
if(isset(phodevi::$vfs->xorg_log))
{
$xorg_log = phodevi::$vfs->xorg_log;
if(($module_start = strpos($xorg_log, $module)) > 0)
{
$xorg_log = substr($xorg_log, $module_start);
$temp_version = substr($xorg_log, strpos($xorg_log, 'module version =') + 17);
$temp_version = substr($temp_version, 0, strpos($temp_version, "\n"));
if(is_numeric(str_replace('.', null, $temp_version)))
{
$module_version = $temp_version;
}
}
}
return $module_version;
}
public static function parse_equal_delimited_file($file, $key)
{
$return_value = false;
foreach(explode("\n", pts_file_io::file_get_contents($file)) as $build_line)
{
list($descriptor, $value) = pts_strings::trim_explode('=', $build_line);
if($descriptor == $key)
{
$return_value = $value;
break;
}
}
return $return_value;
}
public static function hardware_values_to_remove()
{
return array(
'empty',
'null',
'unknown',
'unknow',
'system manufacturer',
'system version',
'system name',
'system product name',
'to be filled by o.e.m.',
'not applicable',
'not specified',
'not available',
'oem',
'00',
'none',
'1234567890'
);
}
public static function software_glxinfo_version()
{
$info = false;
if(isset(phodevi::$vfs->glxinfo))
{
$glxinfo = phodevi::$vfs->glxinfo;
}
else if(PTS_IS_CLIENT && pts_client::executable_in_path('fglrxinfo'))
{
$glxinfo = shell_exec('fglrxinfo 2> /dev/null');
}
foreach(array('OpenGL core profile version string:', 'OpenGL version string:') as $gl_v_string)
{
if($info == false && isset($glxinfo) && ($pos = strpos($glxinfo, $gl_v_string)) !== false)
{
$info = substr($glxinfo, $pos + strlen($gl_v_string));
$info = substr($info, 0, strpos($info, "\n"));
$info = trim(str_replace(array(' Release', '(Core Profile)'), null, $info));
// The Catalyst Linux Driver now does something stupid for this string like:
// 1.4 (2.1 (3.3.11005 Compatibility Profile Context))
if(($pos = strrpos($info, 'Compatibility Profile Context')) !== false && strpos($info, '(') != ($last_p = strrpos($info, '(')))
{
if(is_numeric(str_replace(array('(', '.', ' '), null, substr($info, 0, $last_p))))
{
// This looks like a stupid Catalyst driver string, so grab the last GL version reported
$info = str_replace(array('(', ')'), null, substr($info, ($last_p + 1)));
break;
}
}
}
}
return $info;
}
public static function software_glxinfo_glsl_version()
{
$info = false;
if(isset(phodevi::$vfs->glxinfo))
{
$glxinfo = phodevi::$vfs->glxinfo;
}
else if(PTS_IS_CLIENT && pts_client::executable_in_path('fglrxinfo'))
{
$glxinfo = shell_exec('fglrxinfo 2> /dev/null');
}
foreach(array('OpenGL core profile shading language version string:', 'OpenGL shading language version string:') as $shader_v_string)
{
if(isset($glxinfo) && $info == false && ($pos = strpos($glxinfo, $shader_v_string)) !== false)
{
$info = substr($glxinfo, $pos + strlen($shader_v_string));
$info = substr($info, 0, strpos($info, "\n"));
$info = trim($info);
}
}
return $info;
}
public static function software_glxinfo_opengl_extensions()
{
$info = false;
if(isset(phodevi::$vfs->glxinfo))
{
$glxinfo = phodevi::$vfs->glxinfo;
if(($pos = strpos($glxinfo, 'OpenGL extensions:')) !== false)
{
$info = substr($glxinfo, $pos + 19);
$info = substr($info, 0, strpos($info, PHP_EOL . PHP_EOL));
$info = trim($info);
}
}
return $info;
}
}
?>
phoronix-test-suite/pts-core/results-viewer/pts-results-viewer.xsl 000664 001750 001750 00000012722 12307711432 027174 0 ustar 00michael michael 000000 000000
- - Results
phoronix-test-suite/pts-core/modules/graphics_event_checker.php 000664 001750 001750 00000014206 12307711432 026505 0 ustar 00michael michael 000000 000000 .
*/
class graphics_event_checker extends pts_module_interface
{
const module_name = 'Graphics Event Checker';
const module_version = '1.0.0';
const module_description = 'This module checks a number of events prior to and and after running a test to make sure the graphics sub-system was not put in a sour or unintended state by the application. For instance, it makes sure syncing to vBlank is not forced through the driver and that a graphics test has not left the display in an unintended mode.';
const module_author = 'Michael Larabel';
static $start_video_resolution = array(-1, -1);
static $driver_forced_vsync = false;
// GPU Errors
static $error_pointer = 0;
static $error_count = 0; // Number of GPU errors that were detected
static $error_analysis = array(); // Array of error break down. For each array index is for a test where an error happened, it's TEST_NAME => ERROR_COUNT
public static function __startup()
{
/*
// Right now Phodevi is just using xrandr to set display modes, so if that's not present, this module will be useless
if(!pts_client::executable_in_path('xrandr'))
{
return pts_module::MODULE_UNLOAD;
}
*/
if(count(phodevi_parser::read_xdpy_monitor_info()) > 1)
{
// No multi-monitor support right now
return pts_module::MODULE_UNLOAD;
}
}
public static function __pre_run_process()
{
self::$error_count = 0;
self::$error_pointer = 0;
self::$error_analysis = array();
// Store the video resolution
// Access the xrandr resolution directly to ensure it's not polling the FB size or one of the KMS modes
self::$start_video_resolution = phodevi_gpu::gpu_xrandr_resolution();
if(phodevi::is_linux() && phodevi::is_ati_graphics())
{
$vsync_val = phodevi_linux_parser::read_amd_pcsdb('AMDPCSROOT/SYSTEM/BUSID-*/OpenGL,VSyncControl'); // Check for vSync
if($vsync_val == '0x00000002' || $vsync_val == '0x00000003')
{
self::$driver_forced_vsync = true;
}
//$catalyst_ai_val = phodevi_linux_parser::read_amd_pcsdb('AMDPCSROOT/SYSTEM/BUSID-*/OpenGL,CatalystAI'); // Check for Catalyst AI
//if($catalyst_ai_val == '0x00000001' || $catalyst_ai_val == '0x00000002')
// echo '\nCatalyst AI is enabled, which will use driver-specific optimizations in some tests that may offer extra performance enhancements.\n';
}
else if(phodevi::is_nvidia_graphics())
{
self::$error_pointer = self::nvidia_gpu_error_count(); // Set the error pointer
if(phodevi_parser::read_nvidia_extension('SyncToVBlank') == '1')
{
shell_exec('nvidia-settings -a SyncToVBlank=0 2>&1');
self::$driver_forced_vsync = true;
}
}
if(self::$driver_forced_vsync == true)
{
// echo '\nYour video driver is forcing vertical sync to be enabled. This will limit the system's frame-rate performance potential in any graphical tests!\n';
}
// vblank_mode=0 has long been set within pts-core, but put it here too just since there's these other checks here
putenv('vblank_mode=0');
}
public static function __post_test_run(&$test_result)
{
if($test_result->test_profile->get_test_hardware_type() != 'Graphics')
{
return;
}
// Check for video resolution changes
// Access the xrandr resolution directly to ensure it's not polling the FB size or one of the KMS modes
$current_res = phodevi_gpu::gpu_xrandr_resolution();
if($current_res != self::$start_video_resolution && self::$start_video_resolution != array(-1, -1))
{
$video_width = $current_res[0];
$video_height = $current_res[1];
$reset = self::$start_video_resolution;
$reset_width = $reset[0];
$reset_height = $reset[1];
// echo '\nThe video resolution had changed during testing and it was not properly reset! Now resetting to $reset_width x $reset_height from $video_width x $video_height.\n';
phodevi::set_property('gpu', 'screen-resolution', array($reset_width, $reset_height));
// Sleep for three seconds to allow time for display to settle after mode-set
sleep(3);
}
if(phodevi::is_nvidia_graphics())
{
$current_error_position = self::nvidia_gpu_error_count();
if($current_error_position > self::$error_pointer && $test_result instanceof pts_test_result)
{
// GPU Error(s) Happened During The Test
$this_test = $test_result->test_profile->get_identifier();
$this_error_count = $current_error_position - self::$error_pointer;
if(isset(self::$error_analysis[$this_test]))
{
$this_error_count += self::$error_analysis[$this_test];
}
self::$error_analysis[$this_test] = $this_error_count; // Tally up errors for this test
self::$error_count += $this_error_count; // Add to total error count
self::$error_pointer = $current_error_position; // Reset the pointer
}
}
}
public static function __post_option_process()
{
if(self::$error_count > 0)
{
$error_breakdown = PHP_EOL;
foreach(self::$error_analysis as $test => $error_count)
{
$error_breakdown .= PHP_EOL . $test . ': ' . $error_count;
}
echo PHP_EOL . 'GPU Errors: ' . $error_count . $error_breakdown . PHP_EOL;
}
if(phodevi::is_nvidia_graphics() && self::$driver_forced_vsync)
{
shell_exec('nvidia-settings -a SyncToVBlank=1 2>&1');
}
}
protected static function nvidia_gpu_error_count()
{
$count = phodevi_parser::read_nvidia_extension('GPUErrors');
return $count == null || !is_numeric($count) ? 0 : $count;
}
}
?>
phoronix-test-suite/pts-core/commands/result_file_to_pdf.php 000664 001750 001750 00000007404 12352547013 026025 0 ustar 00michael michael 000000 000000 .
*/
class result_file_to_pdf implements pts_option_interface
{
const doc_section = 'Result Management';
const doc_description = 'This option will read a saved test results file and output the system hardware and software information along with the results to a PDF file.';
public static function argument_checks()
{
return array(
new pts_argument_check(0, array('pts_types', 'is_result_file'), null)
);
}
public static function run($r)
{
if(is_file('/usr/share/php/fpdf/fpdf.php'))
{
include_once('/usr/share/php/fpdf/fpdf.php');
}
else
{
echo PHP_EOL . 'The FPDF library must be installed.' . PHP_EOL;
return false;
}
$_REQUEST['force_format'] = 'PNG'; // Force to PNG renderer
$_REQUEST['svg_dom_gd_no_interlacing'] = true; // Otherwise FPDF will fail
pts_client::generate_result_file_graphs($r[0], PTS_SAVE_RESULTS_PATH . $r[0] . '/');
$result_file = new pts_result_file($r[0]);
$pdf = new pts_pdf_template($result_file->get_title(), null);
$pdf->AddPage();
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/pts-308x160.png', 69, 85, 73, 38);
$pdf->Ln(120);
$pdf->WriteStatementCenter('www.phoronix-test-suite.com');
$pdf->Ln(15);
$pdf->WriteBigHeaderCenter($result_file->get_title());
$pdf->WriteText($result_file->get_description());
$pdf->AddPage();
$pdf->Ln(15);
$identifiers = $result_file->get_system_identifiers();
$hardware_r = $result_file->get_system_hardware();
$software_r = $result_file->get_system_software();
$notes_r = $result_file->get_system_notes();
$tests = $result_file->get_test_titles();
$pdf->SetSubject($result_file->get_title() . ' Benchmarks');
$pdf->SetKeywords(implode(', ', $identifiers));
$pdf->WriteHeader('Test Systems:');
for($i = 0; $i < count($identifiers); $i++)
{
$pdf->WriteMiniHeader($identifiers[$i]);
$pdf->WriteText($hardware_r[$i]);
$pdf->WriteText($software_r[$i]);
//$pdf->WriteText($notes_r[$i]);
}
/*
if(count($identifiers) > 1 && is_file(PTS_SAVE_RESULTS_PATH . $r[0] . '/result-graphs/overview.jpg'))
{
$pdf->AddPage();
$pdf->Ln(100);
$pdf->Image(PTS_SAVE_RESULTS_PATH . $r[0] . '/result-graphs/overview.jpg', 15, 40, 180);
}
*/
$pdf->AddPage();
$placement = 1;
for($i = 1; $i <= count($tests); $i++)
{
if(is_file(PTS_SAVE_RESULTS_PATH . $r[0] . '/result-graphs/' . $i . '.png'))
{
$pdf->Ln(100);
$pdf->Image(PTS_SAVE_RESULTS_PATH . $r[0] . '/result-graphs/' . $i . '.png', 50, 40 + (($placement - 1) * 120), 120);
}
if($placement == 2)
{
$placement = 0;
if($i != count($tests))
{
$pdf->AddPage();
}
}
$placement++;
}
// To save:
/*
$pdf_file = 'SAVE_TO';
if(substr($pdf_file, -4) != '.pdf')
{
$pdf_file .= '.pdf';
}
*/
$pdf_file = pts_client::user_home_directory() . $r[0] . '.pdf';
$pdf->Output($pdf_file);
echo PHP_EOL . 'Saved To: ' . $pdf_file . PHP_EOL;
}
public static function invalid_command($passed_args = null)
{
pts_tests::recently_saved_results();
}
}
?>
phoronix-test-suite/documentation/stubs/99_development_credits.html 000664 001750 001750 00000003763 12341156552 027374 0 ustar 00michael michael 000000 000000
Development Credits
The Phoronix Test Suite is based upon the extensive testing and internal tools developed by Phoronix.com since 2004 along with support from leading tier-one computer hardware and software vendors. The principal architects of the Phoronix Test Suite are Michael Larabel and Matthew Tippett. The phoronix-test-suite, pts_Graph, bilde_renderer, Phodevi, tandem_Xml, and nye_Xml are some of the related open-source projects provided by Phoronix Media.
Below is a list of individuals and organizations that have contributed upstream patches, test profiles, and/or made other contributions to the Phoronix Test Suite that Phoronix Media would like to thank.
Achim Gottinger
Achim Lange
Andrew Schofield
Apaige
Ben Kero
Bryan Quigley
Chris Campbell
Daniel Díaz
Daniel Stodden / Citrix
Dean Hilkewich
ESET s.r.o.
Fatima Sheremetyeva
Fujitsu
Hans Ulrich Niedermann
Intel Open-Source Technology Center
Jeroen van Rijn
Johannes Obermayr
Juan Aguado
Jörg Schirottke
Kenney Phillis
Kim Bisgaard
Laminar Research
Marco Poletti
Matthew Tippett
Michael Larabel
Michael Opdenacker
Michael Ploujnikov
Michal Zatloukal
Mufasa72
Nicholas Omann
NickZ
Nils Kneuper
NVIDIA Corporation
Pekka Panula
Peter Kraus
Rainer König
SOMA Networks, Inc.
Stefan Doesinger
Stepan Hrbek
Stéphane Teletchéa
Sun Microsystems
Tao Zhang
Thomas Klausner
Unigine Corp
Vadim Peretokin
Zachary Powers
phoronix-test-suite/pts-core/static/examples/update-kernel-from-ubuntu-daily-ppa 000775 001750 001750 00000000412 12307711432 031563 0 ustar 00michael michael 000000 000000 #!/bin/sh
# Example script for Phoromatic Kernel Tracker
# http://kernel-tracker.phoromatic.com/
# Toss into /etc/cron.hourly/
hour=`date +%k`
# hour=7
if [ $hour -ne 7 ] ; then
exit
fi
/etc/phoromatic-tracker-update-kernel > /tmp/update-kernel-log 2>&1
phoronix-test-suite/pts-core/external-test-dependencies/scripts/install-angstrom-packages.sh 000775 001750 001750 00000000032 12307711432 034152 0 ustar 00michael michael 000000 000000 #!/bin/sh
opkg install $*
phoronix-test-suite/pts-core/phoromatic/pages/phoromatic_main.php 000664 001750 001750 00000021160 12341156552 026766 0 ustar 00michael michael 000000 000000 .
*/
class phoromatic_main implements pts_webui_interface
{
public static function page_title()
{
return 'Main';
}
public static function page_header()
{
return null;
}
public static function preload($PAGE)
{
return true;
}
public static function render_page_process($PATH)
{
echo phoromatic_webui_header_logged_in();
$main .= '
Phoromatic is currently under development with the Phoronix Test Suite 5.2-Khanino release. With the 5.2 release the public Phoromatic code is intended as a "technical preview" and is a work-in-progress. All basic functionality should be implemented while other features are forthcoming (see the TODO list for more details). Your code contributions are welcome via our GitHub. We also accept custom engineering work / commercial sponsorship and other forms of support to continue its public, open-source development.
Phoromatic is the remote management and test orchestration component to the Phoronix Test Suite. Phoromatic allows you to exploit the Phoronix Test Suite\'s vast feature-set across multiple systems over the LAN/WAN, manage entire test farms of systems for benchmarking via a centralized interface, centrally collect test results, and carry out other enteprise-focused tasks. To get started with your new account, the basic steps to get started include:
Connect/sync the Phoronix Test Suite client systems (the systems to be benchmarked) to this account. In the simplest form, you just need to run the following command on the test systems: phoronix-test-suite phoromatic.connect ' . phoromatic_web_socket_server_addr() . '. For more information view the instructions on the systems page.
Create a test schedule. A schedule is for running test(s) on selected system(s) on a routine, timed basis or whenever a custom trigger is passed to the Phoromatic server. A test schedule could be for running benchmarks on a daily basis, whenever a new Git commit is applied to a code-base, or other events occurred. You can also enrich the potential by adding pre/post-test hooks for ensuring the system is set to a proper state for benchmarking.
If you like Phoromatic and the Phoronix Test Suite for enterprise testing, please contact us for commercial support, our behind-the-firewall licensed versions of Phoromatic and OpenBenchmarking.org, custom engineering services, and other professional services. It\'s not without corporate support that we can continue to develop this leading Linux benchmarking software in our Phoronix mission of enriching the Linux hardware experience. If you run into any problems with our open-source software or would like to contribute patches, you can do so via our GitHub.
';
// ACTIVE TEST SCHEDULES
$main .= '
Active Test Schedules
';
$stmt = phoromatic_server::$db->prepare('SELECT Title, ScheduleID, Description FROM phoromatic_schedules WHERE AccountID = :account_id AND State >= 1 ORDER BY Title ASC');
$stmt->bindValue(':account_id', $_SESSION['AccountID']);
$result = $stmt->execute();
$row = $result->fetchArray();
if($row == false)
{
$main .= '