• T
    Refactor PerfStepTimer to stop on destruct · 6614a484
    Torrie Fischer 提交于
    This eliminates the need to remember to call PERF_TIMER_STOP when a section has
    been timed. This allows more useful design with the perf timers and enables
    possible return value optimizations. Simplistic example:
    
    class Foo {
      public:
        Foo(int v) : m_v(v);
      private:
        int m_v;
    }
    
    Foo makeFrobbedFoo(int *errno)
    {
      *errno = 0;
      return Foo();
    }
    
    Foo bar(int *errno)
    {
      PERF_TIMER_GUARD(some_timer);
    
      return makeFrobbedFoo(errno);
    }
    
    int main(int argc, char[] argv)
    {
      Foo f;
      int errno;
    
      f = bar(&errno);
    
      if (errno)
        return -1;
      return 0;
    }
    
    After bar() is called, perf_context.some_timer would be incremented as if
    Stop(&perf_context.some_timer) was called at the end, and the compiler is still
    able to produce optimizations on the return value from makeFrobbedFoo() through
    to main().
    6614a484
format.cc 15.1 KB