1. 26 Apr, 2018 1 commit
    • Issue 571: Allow support for negative regex filtering (#576) · ed1bac84
      Tim Bradgate authored
      * Allow support for negative regex filtering
      
      This patch allows one to apply a negation to the entire regex filter
      by appending it with a '-' character, much in the same style as
      GoogleTest uses.
      
      * Address issues in PR
      
      * Add unit tests for negative filtering
  2. 23 Apr, 2018 2 commits
  3. 19 Apr, 2018 1 commit
    • Report the actual iterations run. (#572) · c4858d80
      Dominic Hamon authored
      Before this change, we would report the number of requested iterations
      passed to the state. After, we will report the actual number run. As a
      side-effect, instead of multiplying the expected iterations by the
      number of threads to get the total number, we can report the actual
      number of iterations across all threads, which takes into account the
      situation where some threads might run more iterations than others.
  4. 12 Apr, 2018 1 commit
  5. 09 Apr, 2018 1 commit
  6. 06 Apr, 2018 1 commit
  7. 03 Apr, 2018 1 commit
    • Allow AddRange to work with int64_t. (#548) · 9913418d
      Dominic Hamon authored
      * Allow AddRange to work with int64_t.
      
      Fixes #516
      
      Also, tweak how we manage per-test build needs, and create a standard
      _gtest suffix for googletest to differentiate from non-googletest tests.
      
      I also ran clang-format on the files that I changed (but not the
      benchmark include or main src as they have too many clang-format
      issues).
      
      * Add benchmark_gtest to cmake
      
      * Set(Items|Bytes)Processed now take int64_t
  8. 25 Mar, 2018 1 commit
  9. 23 Mar, 2018 2 commits
    • Add tests to verify assembler output -- Fix DoNotOptimize. (#530) · 7b03df7f
      Eric authored
      * Add tests to verify assembler output -- Fix DoNotOptimize.
      
      For things like `DoNotOptimize`, `ClobberMemory`, and even `KeepRunning()`,
      it is important exactly what assembly they generate. However, we currently
      have no way to test this. Instead it must be manually validated every
      time a change occurs -- including a change in compiler version.
      
      This patch attempts to introduce a way to test the assembled output automatically.
      It's mirrors how LLVM verifies compiler output, and it uses LLVM FileCheck to run
      the tests in a similar way.
      
      The tests function by generating the assembly for a test in CMake, and then
      using FileCheck to verify the // CHECK lines in the source file are found
      in the generated assembly.
      
      Currently, the tests only run on 64-bit x86 systems under GCC and Clang,
      and when FileCheck is found on the system.
      
      Additionally, this patch tries to improve the code gen from DoNotOptimize.
      This should probably be a separate change, but I needed something to test.
      
      * Disable assembly tests on Bazel for now
      
      * Link FIXME to github issue
      
      * Fix Tests on OS X
      
      * fix strip_asm.py to work on both Linux and OS X like targets
    • Rely on compiler intrinsics to identify regex engine. (#555) · df60aeb2
      Dominic Hamon authored
      Having the copts set on a per-target level can lead to ODR violations
      in some cases. Avoid this by ensuring the regex engine is picked
      through compiler intrinsics in the header directly.
  10. 21 Mar, 2018 2 commits
    • Fix #552 - GCC and Clang warn on possibly invalid offsetof usage. · e668e2a1
      Eric Fiselier authored
      This patch disables the -Winvalid-offsetof warning for GCC and Clang
      when using it to check the cache lines of the State object.
      
      Technically this usage of offsetof is undefined behavior until C++17.
      However, all major compilers support this application as an extension,
      as demonstrated by the passing static assert (If a compiler encounters UB
      during evaluation of a constant expression, that UB must be diagnosed).
      Unfortunately, Clang and GCC also produce a warning about it.
      
      This patch temporarily suppresses the warning using #pragma's in the
      source file (instead of globally suppressing the warning in the build systems).
      This way the warning is ignored for both CMake and Bazel builds without
      having to modify either build system.
    • Fix #538 - gtest.h not found when building with older CMake versions. · 68e22894
      Eric Fiselier authored
      Older CMake versions, in particular 2.8, don't seem to correctly handle
      interface include directories. This causes failures when building the
      tests. Additionally, older CMake versions use a different library install
      directory than expected (i.e. they use lib/<target-triple>). This caused
      certain tests to fail to link.
      
      This patch fixes both those issues. The first by manually adding the
      correct include directory when building the tests. The second by specifying
      the library output directory when configuring the GTest build.
  11. 16 Mar, 2018 1 commit
  12. 08 Mar, 2018 1 commit
    • Add support for building with Bazel. (#533) · a9beffda
      jmillikin-stripe authored
      * Add myself to CONTRIBUTORS under the corp CLA for Stripe, Inc.
      
      * Add support for building with Bazel.
      
      Limitations compared to existing CMake rules:
      * Defaults to using C++11 `<regex>`, with an override via Bazel flag
        `--define` of `google_benchmark.have_regex`. The TravisCI config sets
        the regex implementation to `posix` because it uses ancient compilers.
      * Debug vs Opt mode can't be set per test. TravisCI runs all the tests
        in debug mode to satisfy `diagnostics_test`, which depends on `CHECK`
        being live.
      
      * Set Bazel workspace name so other repos can refer to it by stable name.
      
      This is recommended by the Bazel style guide to avoid each dependent
      workspace defining its own name for the dependency.
  13. 07 Mar, 2018 1 commit
    • Make string_util naming more consistent (#547) · 61497236
      Wink Saville authored
      * Rename StringXxx to StrXxx in string_util.h and its users
      
      This makes the naming consistent within string_util and moves is the
      Abseil convention.
      
      * Style guide is 2 spaces before end of line "//" comments
      
      * Rename StrPrintF/StringPrintF to StrFormat for absl compatibility.
  14. 06 Mar, 2018 2 commits
    • Do not let StrCat be renamed to lstrcatA (#546) · f48a28d1
      Wink Saville authored
      On Windows the Shlwapi.h file has a macro:
      
        #define StrCat lstrcatA
      
      And benchmark/src/string_util.h defines StrCat and it is renamed to
      lstrcatA if we don't undef the macro in Shlwapi.h. This is an innocuous
      bug if string_util.h is included after Shlwapi.h, but it is a compile
      error if string_util.h is included before Shlwapi.h.
      
      This fixes issue #545.
    • Spelling fixes (#543) · 69a52cff
      Wink Saville authored
      Upstream spelling fix changes from Pony, ec47ba8f565726414552f4bbf97d7,
      by ka7@la-evento.com that effected google/benchmark.
  15. 02 Mar, 2018 2 commits
    • Add Solaris support (#539) · 47df49e5
      alekseyshl authored
      * Add Solaris support
      
      Define BENCHMARK_OS_SOLARIS for Solaris.
      
      Platform specific implementations added:
      * number of CPUs detection
      * CPU cycles per second detection
      * Thread CPU usage
      * Process CPU usage
      
      * Remove the special case for per process CPU time for Solaris, it's the same as the default.
    • Use STCK to get the CPU clock on s390x (#540) · ff2c255a
      Robert Guo authored
  16. 21 Feb, 2018 4 commits
    • Print the executable name as part of the context. (#534) · 56f52ee2
      Eric authored
      * Print the executable name as part of the context.
      
      A common use case of the library is to run two different
      versions of a benchmark to compare them. In my experience
      this often means compiling a benchmark twice, renaming
      one of the executables, and then running the executables
      back-to-back. In this case the name of the executable
      is important contextually information.  Unfortunately the
      benchmark does not report this information.
      
      This patch adds the executable name to the context reported
      by the benchmark.
      
      * attempt to fix tests on Windows
      
      * attempt to fix tests on Windows
    • Fix typo in README.md (#535) · 19048b7b
      Jonathan Wakely authored
    • Ensure std::iterator_traits<StateIterator> instantiates. · 858688b8
      Eric Fiselier authored
      Due to ADL lookup performed on the begin and end functions
      of `for (auto _ : State)`, std::iterator_traits may get
      incidentally instantiated. This patch ensures the library
      can tolerate that.
  17. 14 Feb, 2018 2 commits
    • Don't include <sys/resource.h> on Fuchsia. (#531) · 6ecf8a8e
      Ian McKellar authored
      * Don't include <sys/resource.h> on Fuchsia.
      
      It doesn't support POSIX resource measurement and timing APIs.
      
      Change-Id: Ifab4bac4296575f042c699db1ce5a4f7c2d82893
      
      * Add BENCHMARK_OS_FUCHSIA for Fuchsia
      
      Change-Id: Ic536f9625e413270285fbfd08471dcb6753ddad1
    • Improve State packing: put important members on first cache line. (#527) · 207b9c7a
      Eric authored
      * Improve State packing: put important members on first cache line.
      
      This patch does a few different things to ensure commonly accessed
      data is on the first cache line of the `State` object.
      
      First, it moves the `error_occurred_` member to reside after
      the `started_` and `finished_` bools, since there was internal
      padding there that was unused.
      
      Second, it moves `batch_leftover_` and `max_iterations` further up
      in the struct declaration. These variables are used in the calculation
      of `iterations()` which users might call within the loop. Therefore
      it's more important they exist on the first cache line.
      
      Finally, this patch turns the bool members into bitfields. Although
      this shouldn't have much of an effect currently, because padding is
      still needed between the last bool and the first size_t, it should
      help in future changes that require more "bool like" members.
      
      * Remove bitfield change for now
      
      * Move bools (and their padding) to end of "first cache line" vars.
      
      I think it makes the most sense to move the padding required
      following the group of bools to the end of the variables we want
      on the first cache line.
      
      This also means that the `total_iterations_` variable, which is the
      most accessed, has the same address as the State object.
      
      * Fix static assertion after moving bools
  18. 13 Feb, 2018 5 commits
    • Fixups following addition of KeepRunningBatch (296ec569) (#526) · 3924ee7b
      Samuel Panzer authored
      * Support State::KeepRunningBatch().
      
      State::KeepRunning() can take large amounts of time relative to quick
      operations (on the order of 1ns, depending on hardware). For such
      sensitive operations, it is recommended to run batches of repeated
      operations.
      
      This commit simplifies handling of total_iterations_. Rather than
      predecrementing such that total_iterations_ == 1 signals that
      KeepRunning() should exit, total_iterations_ == 0 now signals the
      intention for the benchmark to exit.
      
      * Create better fast path in State::KeepRunningBatch()
      
      * Replace int parameter with size_t to fix signed mismatch warnings
      
      * Ensure benchmark State has been started even on error.
      
      * Simplify KeepRunningBatch()
      
      * Implement KeepRunning() in terms of KeepRunningBatch().
      
      * Improve codegen by helping the compiler undestand dead code.
      
      * Dummy commit for build bots' benefit.
    • Attempt to fix travis timeouts during apt-get. (#528) · 37dbe80f
      Eric authored
      * Attempt to fix travis timeouts during apt-get.
      
      During some builds, travis fails to update the apt-get indexes.
      This causes the build to fail in different ways.
      
      This patch attempts to avoid this issue by manually calling
      apt-get update. I'm not sure if it'll work, but it's worth a try.
      
      * Fix missing semicolons in command
    • Make output tests more stable on slow machines. · dd8dcc8d
      Eric Fiselier authored
      The appveyor bot sometimes fails because the time it
      outputs is 6 digits long, but the output test regex expects at most
      5 digits. This patch increases the size to 6 digits to placate the
      test. This should not *really* affect the correctness of the test.
    • Fix GTest workaround on MSVC · 562f9d25
      Eric Fiselier authored
    • Work around Gtest build failure caused by -Werror=unused-function. (#529) · 906749a4
      Eric authored
      We're propagating extra warning flags to the gtest build, which
      can cause it to fail. This patch prevents passing "-Wextra" to
      gtest, since the library itself doesn't test with that flag.
  19. 10 Feb, 2018 1 commit
    • Support State::KeepRunningBatch(). (#521) · 296ec569
      Samuel Panzer authored
      * Support State::KeepRunningBatch().
      
      State::KeepRunning() can take large amounts of time relative to quick
      operations (on the order of 1ns, depending on hardware). For such
      sensitive operations, it is recommended to run batches of repeated
      operations.
      
      This commit simplifies handling of total_iterations_. Rather than
      predecrementing such that total_iterations_ == 1 signals that
      KeepRunning() should exit, total_iterations_ == 0 now signals the
      intention for the benchmark to exit.
      
      * Create better fast path in State::KeepRunningBatch()
      
      * Replace int parameter with size_t to fix signed mismatch warnings
      
      * Ensure benchmark State has been started even on error.
      
      * Simplify KeepRunningBatch()
  20. 04 Feb, 2018 1 commit
  21. 29 Jan, 2018 1 commit
  22. 19 Jan, 2018 1 commit
  23. 12 Jan, 2018 1 commit
    • Wrap COMPILER macros. (#514) · 9f5694ce
      Dominic Hamon authored
      Some command line or build systems may already set these (eg, bazel) so
      make sure that takes priority.
      
      Fixes #513
  24. 05 Jan, 2018 3 commits
    • Merge pull request #509 from efcs/fix-gtest-install · e1c3a83b
      Eric authored
      Prevent GTest and GMock from being installed with Google Benchmark.
    • Prevent GTest and GMock from being installed with Google Benchmark. · 778b85a7
      Eric Fiselier authored
      When users satisfy the GTest dependancy by placing a googletest
      directory in the project, the targets from GTest and GMock incorrectly
      get installed along side this library. We shouldn't be installing
      our test dependancies.
      
      This patch forces the options that control installation for googletest
      to OFF.
    • Updated documentation. (#503) · 052421c8
      Winston Du authored
      For people who get this library via CMake's AddExternalProject like me.
      Would like a long term tutorial from someone who really understands CMake on how to actually link an externalproject's dependencies to another added external project.
  25. 14 Dec, 2017 1 commit