• Adam Simpkins's avatar
    update function_benchmark to test exception handling · 5196d1e2
    Adam Simpkins authored
    Summary:
    Add benchmarks for throwing an exception versus returning
    std::exception_ptr or other types of return values.
    
    Throwing an exception is very expensive.  Calling std::make_exception_ptr()
    without ever throwing is nearly as bad.
    
    The exc_ptr_param_return tests were the ones I was most interested in.
    (Accepting a std::exception_ptr* argument so the caller can indicate if they
    want to receive an exception or not.)  This is fast if the caller doesn't care
    about the exception value, but very slow if an error occurs and an
    exception_ptr is required.
    
    Test Plan:
    ======================================================================
    folly/test/function_benchmark/main.cpp    relative  time/iter  iters/s
    ======================================================================
    throw_exception                                        3.90us  256.25K
    catch_no_exception                                     1.88ns  533.25M
    return_exc_ptr                                         2.79us  357.85K
    exc_ptr_param_return                                   2.83us  353.25K
    exc_ptr_param_return_null                              2.25ns  444.38M
    return_string                                         69.39ns   14.41M
    return_string_noexcept                                69.39ns   14.41M
    return_code                                            1.50ns  666.54M
    return_code_noexcept                                   1.50ns  666.54M
    
    Reviewed By: rajat@fb.com
    
    FB internal diff: D616474
    5196d1e2
test_functions.h 1.12 KB