From e5d4a7a8345c3e77e7829f4be45337ad4a711365 Mon Sep 17 00:00:00 2001 From: Lukas Barth Date: Wed, 31 Oct 2018 01:30:40 +0100 Subject: [PATCH 1/5] Add CMake module (#128) * Add CMake module * Mark root as advanced, use hint instead of path --- cmake/FindCelero.cmake | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 cmake/FindCelero.cmake diff --git a/cmake/FindCelero.cmake b/cmake/FindCelero.cmake new file mode 100644 index 0000000..5290126 --- /dev/null +++ b/cmake/FindCelero.cmake @@ -0,0 +1,52 @@ +# Try to find Celero headers and libraries. +# +# Usage of this module as follows: +# +# find_package(Celero) +# +# Variables used by this module, they can change the default behaviour and need +# to be set before calling find_package: +# +# CELERO_PREFIX Set this variable to the root installation of +# celero if the module has problems finding the +# proper installation path. +# +# Note that you can set the CELERO_PREFIX variable as environment variable. +# +# Variables defined by this module: +# +# CELERO_FOUND System has the Celero library and headers +# CELERO_LIBRARIES The Celero library +# CELERO_INCLUDE_DIRS The location of Celero headers + +if(NOT CELRO_PREFIX) + set(CELERO_PREFIX $ENV{CELERO_PREFIX}) +endif() + +set(CELERO_HINTS ${CELERO_PREFIX} $ENV{CELERO_PREFIX}) +find_path(CELERO_ROOT + NAMES include/celero/Celero.h + HINTS "${CELERO_HINTS}" +) + +find_library(CELERO_LIBRARIES + NAMES libcelero.so + HINTS ${CELERO_ROOT}/lib ${CELERO_ROOT}/lib64 +) + +find_path(CELERO_INCLUDE_DIRS + NAMES celero/Celero.h + HINTS ${CELERO_ROOT}/include +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CELERO DEFAULT_MSG + CELERO_LIBRARIES + CELERO_INCLUDE_DIRS +) + +mark_as_advanced( + CELERO_LIBRARIES + CELERO_INCLUDE_DIRS + CELERO_ROOT +) From 0d2b6209980c1886cdb4536f4b838abd3070aa68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20=C5=BBabi=C5=84ski?= Date: Wed, 20 Mar 2019 01:04:51 +0100 Subject: [PATCH 2/5] #131 Correct color for columns bar (#132) * Added Coverity Scan badge. * Installs the dll on windows (#122) Needed a "RUNTIME DESTINATION" to ensure the dll is copied on install * Updated JUnit.cpp (#124) Fixed a small typo, resulting in invalid XML output. * Add missing include to use std::string (#129) * Update README.md * Update license.txt * Make columns bars default color --- README.md | 2 +- include/celero/TestFixture.h | 1 + license.txt | 2 +- src/JUnit.cpp | 2 +- src/Print.cpp | 22 +++++++++++++++++----- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ca47e8e..90879fa 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ### C++ Benchmarking Library -Copyright 2017-2018 John Farrier +Copyright 2017-2019 John Farrier Apache 2.0 License diff --git a/include/celero/TestFixture.h b/include/celero/TestFixture.h index 31520d3..d5f54bd 100644 --- a/include/celero/TestFixture.h +++ b/include/celero/TestFixture.h @@ -24,6 +24,7 @@ #include #include #include +#include #include // This must be included last. diff --git a/license.txt b/license.txt index d53349d..4a94728 100644 --- a/license.txt +++ b/license.txt @@ -2,7 +2,7 @@ Celero C++ Benchmarking Library -Copyright 2017 John Farrier. +Copyright 2019 John Farrier. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/JUnit.cpp b/src/JUnit.cpp index 6e82793..e89fb20 100644 --- a/src/JUnit.cpp +++ b/src/JUnit.cpp @@ -141,7 +141,7 @@ void JUnit::save() } } - *os << "" << std::endl; } ofs.close(); diff --git a/src/Print.cpp b/src/Print.cpp index a680556..45555e2 100644 --- a/src/Print.cpp +++ b/src/Print.cpp @@ -87,7 +87,7 @@ std::string PrintColumn(const double x, const size_t decDigits = PrintConstants: // set # places after decimal ss.precision(decDigits); - ss << x << " | "; + ss << x; return ss.str(); } @@ -265,23 +265,35 @@ namespace celero { celero::console::SetConsoleColor(celero::console::ConsoleColor_Default); + celero::console::ConsoleColor temp_color; // Slower than Baseline if(x->getBaselineMeasurement() > 1.0) { - celero::console::SetConsoleColor(celero::console::ConsoleColor_Yellow); + temp_color = celero::console::ConsoleColor_Yellow; } else if(x->getBaselineMeasurement() < 1.0) { - celero::console::SetConsoleColor(celero::console::ConsoleColor_Green); + temp_color = celero::console::ConsoleColor_Green; } else { - celero::console::SetConsoleColor(celero::console::ConsoleColor_Cyan); + temp_color = celero::console::ConsoleColor_Cyan; } - std::cout << PrintColumn(x->getBaselineMeasurement()) << PrintColumn(x->getUsPerCall()) << PrintColumn(x->getCallsPerSecond(), 2); + celero::console::SetConsoleColor(temp_color); + std::cout << PrintColumn(x->getBaselineMeasurement()); + celero::console::SetConsoleColor(celero::console::ConsoleColor_Default); + std::cout << " | "; + + celero::console::SetConsoleColor(temp_color); + std::cout << PrintColumn(x->getUsPerCall()); + celero::console::SetConsoleColor(celero::console::ConsoleColor_Default); + std::cout << " | "; + celero::console::SetConsoleColor(temp_color); + std::cout << PrintColumn(x->getCallsPerSecond(), 2); celero::console::SetConsoleColor(celero::console::ConsoleColor_Default); + std::cout << " | "; std::unordered_map udmValues; From 9408d3dd2dde1067623c59c43b616a145399f65e Mon Sep 17 00:00:00 2001 From: John Farrier Date: Sat, 8 Jun 2019 22:00:25 -0400 Subject: [PATCH 3/5] Improved automated iteration counting, added total time to complete. Also updated all copyright notices and the readme.md. --- CMakeLists.txt | 34 +++++------ CMakeLists.txt.in | 2 +- README.md | 60 +++++++++++++++---- include/celero/Archive.h | 2 +- include/celero/Benchmark.h | 2 +- include/celero/Callbacks.h | 2 +- include/celero/Celero.h | 2 +- include/celero/Console.h | 2 +- include/celero/Distribution.h | 2 +- include/celero/Exceptions.h | 2 +- include/celero/Executor.h | 2 +- include/celero/Experiment.h | 2 +- include/celero/ExperimentResult.h | 2 +- include/celero/Export.h | 2 +- include/celero/Factory.h | 2 +- include/celero/FileReader.h | 2 +- include/celero/GenericFactory.h | 2 +- include/celero/JUnit.h | 2 +- include/celero/Pimpl.h | 2 +- include/celero/PimplImpl.h | 2 +- include/celero/Print.h | 2 +- include/celero/ResultTable.h | 2 +- include/celero/Statistics.h | 2 +- include/celero/TestFixture.h | 2 +- include/celero/TestVector.h | 2 +- include/celero/ThreadLocal.h | 2 +- include/celero/ThreadTestFixture.h | 2 +- include/celero/Timer.h | 2 +- include/celero/UserDefinedMeasurement.h | 2 +- .../celero/UserDefinedMeasurementCollector.h | 2 +- .../celero/UserDefinedMeasurementTemplate.h | 2 +- include/celero/Utilities.h | 2 +- src/Archive.cpp | 2 +- src/Benchmark.cpp | 2 +- src/Callbacks.cpp | 2 +- src/Celero.cpp | 27 ++++++++- src/Console.cpp | 2 +- src/Distribution.cpp | 2 +- src/Executor.cpp | 8 +-- src/Experiment.cpp | 16 ++--- src/ExperimentResult.cpp | 2 +- src/JUnit.cpp | 2 +- src/Memory.cpp | 2 +- src/Print.cpp | 2 +- src/ResultTable.cpp | 2 +- src/TestFixture.cpp | 2 +- src/TestVector.cpp | 2 +- src/ThreadTestFixture.cpp | 2 +- src/Timer.cpp | 2 +- src/UserDefinedMeasurementCollector.cpp | 2 +- src/Utilities.cpp | 2 +- 51 files changed, 147 insertions(+), 90 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d60b42..2dc31d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,10 +30,6 @@ include(CheckFunctionExists) include(CheckCXXSourceCompiles) include(CheckIncludeFile) -if(POLICY CMP0042) - cmake_policy(SET CMP0042 OLD) # MACOSX_RPATH migration -endif() - # # User Options # @@ -231,23 +227,18 @@ export(EXPORT ${PROJECT_NAME}-target # --------------------------------------------------------------------------- if(CELERO_ENABLE_TESTS) - # Pull in Google Test - # https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project - - # Download and unpack googletest at configure time + set(gtest_repository "https://github.com/google/googletest.git" CACHE STRING "") configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt) - - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download ) - + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download ) if(result) message(FATAL_ERROR "CMake step for googletest failed: ${result}") endif() - + execute_process(COMMAND ${CMAKE_COMMAND} --build . RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download ) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download ) if(result) message(FATAL_ERROR "Build step for googletest failed: ${result}") @@ -259,11 +250,16 @@ if(CELERO_ENABLE_TESTS) # Add googletest directly to our build. This defines # the gtest and gtest_main targets. - add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src - ${CMAKE_BINARY_DIR}/googletest-build - EXCLUDE_FROM_ALL) - - include_directories("${gtest_SOURCE_DIR}/include") + add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src + ${CMAKE_CURRENT_BINARY_DIR}/googletest-build + EXCLUDE_FROM_ALL) + + # The gtest/gtest_main targets carry header search path + # dependencies automatically when using CMake 2.8.11 or + # later. Otherwise we have to add them here ourselves. + if (CMAKE_VERSION VERSION_LESS 2.8.11) + include_directories("${gtest_SOURCE_DIR}/include") + endif() set(PROJECT_NAME CeleroTest) diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index 4c67ef5..a166136 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -4,7 +4,7 @@ project(googletest-download NONE) include(ExternalProject) ExternalProject_Add(googletest - GIT_REPOSITORY https://github.com/google/googletest.git + GIT_REPOSITORY ${gtest_repository} GIT_TAG master SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" diff --git a/README.md b/README.md index e455fce..9407148 100644 --- a/README.md +++ b/README.md @@ -214,21 +214,49 @@ Running Celero's simple example experiment (`celeroDemoSimple.exe`) benchmark ga ``` Celero -Timer resolution: 0.069841 us ------------------------------------------------------------------------------------------------------------------------------------------------ - Group | Experiment | Prob. Space | Samples | Iterations | Baseline | us/Iteration | Iterations/sec | ------------------------------------------------------------------------------------------------------------------------------------------------ -DemoSimple | Baseline | 0 | 10 | 1000000 | 1.00000 | 0.28789 | 3473512.73 | -DemoSimple | Complex1 | 0 | 1 | 710000 | 1.11028 | 0.31964 | 3128497.53 | -DemoSimple | Complex2 | 0 | 30 | 710000 | 1.10749 | 0.31884 | 3136388.74 | -DemoSimple | Complex3 | 0 | 60 | 710000 | 1.10678 | 0.31863 | 3138398.97 | -Complete. +Timer resolution: 0.277056 us +| Group | Experiment | Prob. Space | Samples | Iterations | Baseline | us/Iteration | Iterations/sec | +|:--------------:|:---------------:|:---------------:|:---------------:|:---------------:|:---------------:|:---------------:|:---------------:| +|DemoSimple | Baseline | Null | 30 | 1000000 | 1.00000 | 0.09320 | 10729498.61 | +|DemoSimple | Complex1 | Null | 1 | 710000 | 0.99833 | 0.09305 | 10747479.64 | +|DemoSimple | Complex2 | Null | 30 | 710000 | 0.97898 | 0.09124 | 10959834.52 | +|DemoSimple | Complex3 | Null | 60 | 710000 | 0.98547 | 0.09185 | 10887733.66 | +Completed in 00:00:10.315012 ``` -The first test that executes will be the group's baseline. Celero took 10 samples of 1000000 iterations of the code in our test. (Each set of 1000000 iterations was measured, and this was done 10 times and the smallest time was taken.) The "Baseline" value for the baseline measurement itself will always be 1.0. +The first test that executes will be the group's baseline. Celero took 30 samples of 1000000 iterations of the code in our test. (Each set of 1000000 iterations was measured, and this was done 10 times and the smallest time was taken.) The "Baseline" value for the baseline measurement itself will always be 1.0. After the baseline is complete, each individual test is ran. Each test is executed and measured in the same way, however, there is an additional metric reported: Baseline. This compares the time it takes to compute the benchmark to the baseline. The data here shows that `CeleroBenchTest.Complex1` takes 1.007949 times longer to execute than the baseline. +### Automatically computing the number of Iterations and Samples + +If you do want Celero to figure out a reasonable number of iterations to run, you can set the iteration value to ```0``` for your experiment. You can also set the number of samples to ```0``` to have it compute a statistically valid number of samples. (Note that the current implementation uses ```30``` as the default number of samples, but does compute a reasonable number of iterations.) + +Update the previous "DemoSimple" code's ```Complex1``` case to use this feature as follows: + +```cpp +/// Run a test consisting of 0 samples of 0 iterations per measurement. +/// Since the sample size is equal to 0, celero will compute a number to use for both samples and iterations. +BENCHMARK(DemoSimple, Complex1, 0, 0) +{ + celero::DoNotOptimizeAway(static_cast(sin(fmod(UniformDistribution(RandomDevice), 3.14159265)))); +} +``` + +Now, when this executes, you will see a different number automatically computed for the number of iterations and the sample size has been increased. + +``` +Celero +Timer resolution: 0.277056 us +| Group | Experiment | Prob. Space | Samples | Iterations | Baseline | us/Iteration | Iterations/sec | +|:--------------:|:---------------:|:---------------:|:---------------:|:---------------:|:---------------:|:---------------:|:---------------:| +|DemoSimple | Baseline | Null | 30 | 1000000 | 1.00000 | 0.09177 | 10897044.72 | +|DemoSimple | Complex1 | Null | 30 | 8388608 | 1.01211 | 0.09288 | 10766703.67 | +|DemoSimple | Complex2 | Null | 30 | 710000 | 0.99559 | 0.09136 | 10945304.31 | +|DemoSimple | Complex3 | Null | 60 | 710000 | 0.99671 | 0.09147 | 10933000.72 | +Completed in 00:00:37.583872 +``` + #### Statistically Sound Results In order to use Celero for real science, there are three primary factors to consider when reviewing results. Firstly, you MUST check the generated assembly for your test. There are different paths to viewing the assembly for different compilers, but essentially this must be done to ensure that you did not optimize out critical code. You must also verify, via assembly, that you are comparing apples to apples. @@ -384,6 +412,16 @@ You will now be reporting statistics on the number of page faults that occurred A note on User Defined Measurements: This capability was introduced well after the creation of Celero. While it is a great enhancement to the library, it was not designed-in to the library. As such, the next major release of the library (v3.x) may change the way this is implemented and exposed to the library's users. +### Frequency Scaling + +CPU Frequency Scaling should be disabled if possible when executing benchmarks. While there is code in Celero to attempt to do this, it may not have sufficient privileges to be effective. On Linux systems, this can be accomplished as follows: + +```bash +sudo cpupower frequency-set --governor performance +./celeroBenchmarkExecutable +sudo cpupower frequency-set --governor powersave +``` + ### Notes - Benchmarks should always be performed on Release builds. Never measure the performance of a Debug build and make changes based on the results. The (optimizing) compiler is your friend with respect to code performance. @@ -462,7 +500,7 @@ public: }; ``` -Before the test fixture is utilized by a benchmark, Celero will create an instanciation of the class and call its "getExperimentValues()" function. The test fixture can then build a vector of TestFixture::ExperimentValue values. For each value added to this array, benchmarks will be executed following calls to the "setUp" virtual function. A new test fixture is created for each measurement. +Before the test fixture is utilized by a benchmark, Celero will create an instantiation of the class and call its "getExperimentValues()" function. The test fixture can then build a vector of TestFixture::ExperimentValue values. For each value added to this array, benchmarks will be executed following calls to the "setUp" virtual function. A new test fixture is created for each measurement. The `SetUp()` virtual function is called before each benchmark test is executed. When using a problem space values vector, the function will be given a value that was previously pushed into the array within the constructor. The function's code can then decide what to do with it. Here, we are using the value to indicate how many elements should be in the array that we intend to sort. For each of the array elements, we simply add a pseudo-random integer. diff --git a/include/celero/Archive.h b/include/celero/Archive.h index ad01e8a..866a0ca 100644 --- a/include/celero/Archive.h +++ b/include/celero/Archive.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Benchmark.h b/include/celero/Benchmark.h index d853e5f..7a357d1 100644 --- a/include/celero/Benchmark.h +++ b/include/celero/Benchmark.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Callbacks.h b/include/celero/Callbacks.h index 7f58ea9..f5545a7 100644 --- a/include/celero/Callbacks.h +++ b/include/celero/Callbacks.h @@ -6,7 +6,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Celero.h b/include/celero/Celero.h index ce241be..2ef20db 100644 --- a/include/celero/Celero.h +++ b/include/celero/Celero.h @@ -6,7 +6,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Console.h b/include/celero/Console.h index 4af5523..302b387 100644 --- a/include/celero/Console.h +++ b/include/celero/Console.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Distribution.h b/include/celero/Distribution.h index 31e9ad5..5ab01ba 100644 --- a/include/celero/Distribution.h +++ b/include/celero/Distribution.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Exceptions.h b/include/celero/Exceptions.h index 7f334d5..78ca817 100644 --- a/include/celero/Exceptions.h +++ b/include/celero/Exceptions.h @@ -4,7 +4,7 @@ /// /// \author Peter Azmanov /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Executor.h b/include/celero/Executor.h index 969bd22..892667f 100644 --- a/include/celero/Executor.h +++ b/include/celero/Executor.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Experiment.h b/include/celero/Experiment.h index f7202b8..964116f 100644 --- a/include/celero/Experiment.h +++ b/include/celero/Experiment.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/ExperimentResult.h b/include/celero/ExperimentResult.h index 6486125..77b2ed8 100644 --- a/include/celero/ExperimentResult.h +++ b/include/celero/ExperimentResult.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Export.h b/include/celero/Export.h index 532962f..b672b15 100644 --- a/include/celero/Export.h +++ b/include/celero/Export.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Factory.h b/include/celero/Factory.h index d737b05..c485065 100644 --- a/include/celero/Factory.h +++ b/include/celero/Factory.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/FileReader.h b/include/celero/FileReader.h index a24bb2e..f9b5f7b 100644 --- a/include/celero/FileReader.h +++ b/include/celero/FileReader.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/GenericFactory.h b/include/celero/GenericFactory.h index 9aec47e..776bf69 100644 --- a/include/celero/GenericFactory.h +++ b/include/celero/GenericFactory.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/JUnit.h b/include/celero/JUnit.h index f643161..bb7534d 100644 --- a/include/celero/JUnit.h +++ b/include/celero/JUnit.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Pimpl.h b/include/celero/Pimpl.h index f148df9..c330c69 100644 --- a/include/celero/Pimpl.h +++ b/include/celero/Pimpl.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/PimplImpl.h b/include/celero/PimplImpl.h index b3fb405..e145351 100644 --- a/include/celero/PimplImpl.h +++ b/include/celero/PimplImpl.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Print.h b/include/celero/Print.h index ddf178b..a5be2a6 100644 --- a/include/celero/Print.h +++ b/include/celero/Print.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/ResultTable.h b/include/celero/ResultTable.h index 82934e7..470e624 100644 --- a/include/celero/ResultTable.h +++ b/include/celero/ResultTable.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Statistics.h b/include/celero/Statistics.h index 6c1ccb0..f6189c6 100644 --- a/include/celero/Statistics.h +++ b/include/celero/Statistics.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/TestFixture.h b/include/celero/TestFixture.h index d5f54bd..7159005 100644 --- a/include/celero/TestFixture.h +++ b/include/celero/TestFixture.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/TestVector.h b/include/celero/TestVector.h index cdf2362..aabad34 100644 --- a/include/celero/TestVector.h +++ b/include/celero/TestVector.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/ThreadLocal.h b/include/celero/ThreadLocal.h index 372d525..1ed8aa6 100644 --- a/include/celero/ThreadLocal.h +++ b/include/celero/ThreadLocal.h @@ -4,7 +4,7 @@ /// /// \author Ivan Shynkarenka /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/ThreadTestFixture.h b/include/celero/ThreadTestFixture.h index 424fb58..ccf1d4c 100644 --- a/include/celero/ThreadTestFixture.h +++ b/include/celero/ThreadTestFixture.h @@ -4,7 +4,7 @@ /// /// \author Ivan Shynkarenka /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Timer.h b/include/celero/Timer.h index 66f1b05..f5825ba 100644 --- a/include/celero/Timer.h +++ b/include/celero/Timer.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/UserDefinedMeasurement.h b/include/celero/UserDefinedMeasurement.h index d2eef73..3c2e313 100644 --- a/include/celero/UserDefinedMeasurement.h +++ b/include/celero/UserDefinedMeasurement.h @@ -4,7 +4,7 @@ /// /// \author Lukas Barth /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/UserDefinedMeasurementCollector.h b/include/celero/UserDefinedMeasurementCollector.h index 3289301..2ca3c9d 100644 --- a/include/celero/UserDefinedMeasurementCollector.h +++ b/include/celero/UserDefinedMeasurementCollector.h @@ -4,7 +4,7 @@ /// /// \author Lukas Barth /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/UserDefinedMeasurementTemplate.h b/include/celero/UserDefinedMeasurementTemplate.h index 26d85a8..6a78e94 100644 --- a/include/celero/UserDefinedMeasurementTemplate.h +++ b/include/celero/UserDefinedMeasurementTemplate.h @@ -4,7 +4,7 @@ /// /// \author Lukas Barth, John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/include/celero/Utilities.h b/include/celero/Utilities.h index 58fd139..4f409e5 100644 --- a/include/celero/Utilities.h +++ b/include/celero/Utilities.h @@ -4,7 +4,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Archive.cpp b/src/Archive.cpp index 0d83912..338d385 100644 --- a/src/Archive.cpp +++ b/src/Archive.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Benchmark.cpp b/src/Benchmark.cpp index 6f9fb3d..f035726 100644 --- a/src/Benchmark.cpp +++ b/src/Benchmark.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Callbacks.cpp b/src/Callbacks.cpp index a99973b..5edb46b 100644 --- a/src/Callbacks.cpp +++ b/src/Callbacks.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Celero.cpp b/src/Celero.cpp index ab72a47..da9df1a 100644 --- a/src/Celero.cpp +++ b/src/Celero.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. @@ -237,6 +237,8 @@ void celero::Run(int argc, char** argv) Printer::get().initialize(userDefinedFieldsOrder); Printer::get().TableBanner(); + const auto startTime = celero::timer::GetSystemTime(); + if(argument.empty() == false) { executor::Run(argument); @@ -246,11 +248,32 @@ void celero::Run(int argc, char** argv) executor::RunAll(); } + const auto totalTime = celero::timer::ConvertSystemTime(celero::timer::GetSystemTime() - startTime); + if(mustCloseFile == true) { celero::ResultTable::Instance().closeFile(); } // Final output. - std::cout << "Complete." << std::endl; + auto hours = std::to_string(static_cast(totalTime) / 3600); + auto minutes = std::to_string((static_cast(totalTime) % 3600) / 60); + auto seconds = std::to_string(fmod(totalTime, 60.0)); + + if(hours.length() < 2) + { + hours = std::string("0") + hours; + } + + if(minutes.length() < 2) + { + minutes = std::string("0") + minutes; + } + + if(fmod(totalTime, 60.0) < 10.0) + { + seconds = std::string("0") + seconds; + } + + std::cout << "Completed in " << hours << ":" << minutes << ":" << seconds << std::endl; } diff --git a/src/Console.cpp b/src/Console.cpp index 1ca1414..1c271e1 100644 --- a/src/Console.cpp +++ b/src/Console.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Distribution.cpp b/src/Distribution.cpp index 2d9218b..66bc9a3 100644 --- a/src/Distribution.cpp +++ b/src/Distribution.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Executor.cpp b/src/Executor.cpp index 1794311..45ba316 100644 --- a/src/Executor.cpp +++ b/src/Executor.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. @@ -40,8 +40,8 @@ bool AdjustSampleAndIterationSize(std::shared_ptr r) if(r->getExperiment()->getSamples() == 0) { // The smallest test should take at least 10x as long as our timer's resolution. - // I chose "10x" arbitrarily. - const auto minTestTime = static_cast(celero::timer::CachePerformanceFrequency(true) * 1e6) * 10; + // I chose "2x" arbitrarily. + const auto minTestTime = static_cast(celero::timer::CachePerformanceFrequency(true) * 1e6) * 2; // Compute a good number to use for iterations and set the sample size to 30. auto test = r->getExperiment()->getFactory()->Create(); @@ -68,7 +68,7 @@ bool AdjustSampleAndIterationSize(std::shared_ptr r) const auto iterations = static_cast(std::max(static_cast(testIterations), 1000000.0 / testTime)); auto experiment = r->getExperiment(); - experiment->setIterations(iterations); + experiment->setIterations(std::max(iterations, uint64_t(30))); experiment->setSamples(30); r->setProblemSpaceValue(r->getProblemSpaceValue(), r->getProblemSpaceValueScale(), iterations); diff --git a/src/Experiment.cpp b/src/Experiment.cpp index 996b04d..7dbe61f 100644 --- a/src/Experiment.cpp +++ b/src/Experiment.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. @@ -90,24 +90,24 @@ class Experiment::Impl std::string name; /// The number of microseconds per test (which makes up one baseline unit). - double baselineUnit; + double baselineUnit{0}; /// Used to pass/fail benchmarks when outputting JUnit. - double baselineTarget; + double baselineTarget{0}; /// Test samples to complete. - uint64_t samples; + uint64_t samples{0}; /// Iterations per test run. (Size of each sample.) - uint64_t iterations; + uint64_t iterations{0}; /// Threads per test run. - uint64_t threads; + uint64_t threads{0}; /// The best run time for this test - uint64_t totalRunTime; + uint64_t totalRunTime{0}; - bool isBaselineCase; + bool isBaselineCase{false}; }; Experiment::Experiment() : pimpl() diff --git a/src/ExperimentResult.cpp b/src/ExperimentResult.cpp index 32cc1e3..4a2766b 100644 --- a/src/ExperimentResult.cpp +++ b/src/ExperimentResult.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/JUnit.cpp b/src/JUnit.cpp index e89fb20..9eb2e2e 100644 --- a/src/JUnit.cpp +++ b/src/JUnit.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Memory.cpp b/src/Memory.cpp index 5fc3696..50599e7 100644 --- a/src/Memory.cpp +++ b/src/Memory.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Print.cpp b/src/Print.cpp index 45555e2..28d7c5c 100644 --- a/src/Print.cpp +++ b/src/Print.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/ResultTable.cpp b/src/ResultTable.cpp index b3bd5b2..366dc66 100644 --- a/src/ResultTable.cpp +++ b/src/ResultTable.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/TestFixture.cpp b/src/TestFixture.cpp index 355f804..580565d 100644 --- a/src/TestFixture.cpp +++ b/src/TestFixture.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/TestVector.cpp b/src/TestVector.cpp index cfca2b9..013ff41 100644 --- a/src/TestVector.cpp +++ b/src/TestVector.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/ThreadTestFixture.cpp b/src/ThreadTestFixture.cpp index 6b5f1cf..d8a17d7 100644 --- a/src/ThreadTestFixture.cpp +++ b/src/ThreadTestFixture.cpp @@ -1,7 +1,7 @@ /// /// \author Ivan Shynkarenka /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Timer.cpp b/src/Timer.cpp index 39f4d7e..c3f7a62 100644 --- a/src/Timer.cpp +++ b/src/Timer.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/UserDefinedMeasurementCollector.cpp b/src/UserDefinedMeasurementCollector.cpp index e189638..68788c8 100644 --- a/src/UserDefinedMeasurementCollector.cpp +++ b/src/UserDefinedMeasurementCollector.cpp @@ -1,7 +1,7 @@ /// /// \author Lukas Barth /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. diff --git a/src/Utilities.cpp b/src/Utilities.cpp index f1995be..6d9a266 100644 --- a/src/Utilities.cpp +++ b/src/Utilities.cpp @@ -1,7 +1,7 @@ /// /// \author John Farrier /// -/// \copyright Copyright 2015, 2016, 2017, 2018 John Farrier +/// \copyright Copyright 2015, 2016, 2017, 2018. 2019 John Farrier /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. From f5938f6d2c31e88665f2e0bd996991bd3fb8ce78 Mon Sep 17 00:00:00 2001 From: John Farrier Date: Sun, 9 Jun 2019 10:52:54 -0400 Subject: [PATCH 4/5] Attempt to update .travis.yml --- .travis.yml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2ab2765..631bf3f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ addons: packages: - g++-6 - g++-7 + - g++-8 sources: &sources - ubuntu-toolchain-r-test @@ -30,6 +31,7 @@ cache: directories: - ${TRAVIS_BUILD_DIR}/deps/llvm-3.9.0 - ${TRAVIS_BUILD_DIR}/deps/llvm-5.0.1 + - ${TRAVIS_BUILD_DIR}/deps/llvm-7.0.0 matrix: exclude: @@ -43,16 +45,21 @@ matrix: # speed up Travis builds. ########################################################################## - # Clang 3.8 + # Clang 3.9 - os: linux env: LLVM_VERSION=3.9.0 compiler: clang - # Clang 3.9 + # Clang 5.0.1 - os: linux env: LLVM_VERSION=5.0.1 compiler: clang + # Clang 7.0.0 + - os: linux + env: LLVM_VERSION=7.0.0 + compiler: clang + # GCC 6 - os: linux env: COMPILER=g++-6 @@ -63,6 +70,11 @@ matrix: env: COMPILER=g++-7 compiler: gcc + # GCC 8 + - os: linux + env: COMPILER=g++-8 + compiler: gcc + ########################################################################## # Build with variations in the configuration ########################################################################## @@ -71,6 +83,9 @@ matrix: env: LLVM_VERSION=default CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=DEBUG" compiler: clang + - os: osx + osx_image: xcode10.1 + install: ############################################################################ # All the dependencies are installed in ${TRAVIS_BUILD_DIR}/deps/ From b9db3d9e7ae190776210f59f4d3001140cd26e14 Mon Sep 17 00:00:00 2001 From: John Farrier Date: Sun, 9 Jun 2019 11:11:41 -0400 Subject: [PATCH 5/5] Updated README.md --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 9407148..4cd60cd 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,15 @@ Copyright 2017-2019 John Farrier Apache 2.0 License +#### Community Support + +A Special Thanks to the following corporations for their support: +- [Hellebore Consulting Group](http://www.hellebore.com) +- [Araxis](https://www.araxis.com/) +- [Axosoft](https://www.gitkraken.com/) +- [Microsoft](https://www.microsoft.com) +- [Travis.CI](https://travis-ci.org) + #### Builds and Testing Branch | Status @@ -13,6 +22,17 @@ Branch | Status ```origin/master: ``` | [![Build Status (Master)](https://travis-ci.org/DigitalInBlue/Celero.svg?branch=master)](https://travis-ci.org/DigitalInBlue/Celero) ```origin/develop: ``` | [![Build Status (Develop)](https://travis-ci.org/DigitalInBlue/Celero.svg?branch=develop)](https://travis-ci.org/DigitalInBlue/Celero) +Celero has been successfully built on the following platforms during development. See [Travis.CI](https://travis-ci.org/DigitalInBlue/Celero) for more details. +- GCC v6.0.0 +- GCC v7.0.0 +- GCC v8.0.0 +- LLVM v3.9.0 +- LLVM v5.0.1 +- LLVM v7.0.0 +- Visual Studio 2017 +- Visual Studio 2019 +- XCode v10.1 + ### Overview Developing consistent and meaningful benchmark results for code is a complex task. Measurement tools exist (Intel® VTune™ Amplifier, SmartBear AQTime, Valgrind, etc.) external to applications, but they are sometimes expensive for small teams or cumbersome to utilize. This project, Celero, aims to be a small library which can be added to a C++ project and perform benchmarks on code in a way which is easy to reproduce, share, and compare among individual runs, developers, or projects. Celero uses a framework similar to that of GoogleTest to make its API easier to use and integrate into a project. Make automated benchmarking as much a part of your development process as automated testing.