diff -r af402c6b90db -r 15a1e37f80bd mercurial/statprof.py --- a/mercurial/statprof.py Fri Jun 01 11:23:27 2018 +0200 +++ b/mercurial/statprof.py Fri Jun 01 17:27:58 2018 +0200 @@ -148,6 +148,7 @@ class ProfileState(object): def __init__(self, frequency=None): self.reset(frequency) + self.track = 'cpu' def reset(self, frequency=None): # total so far @@ -180,7 +181,13 @@ ) def seconds_per_sample(self): - return self.accumulated_time[0] / len(self.samples) + return self.accumulated_time[self.timeidx] / len(self.samples) + + @property + def timeidx(self): + if self.track == 'real': + return 1 + return 0 state = ProfileState() @@ -268,7 +275,8 @@ now = clock() state.accumulate_time(now) - state.samples.append(Sample.from_frame(frame, state.accumulated_time[0])) + timestamp = state.accumulated_time[state.timeidx] + state.samples.append(Sample.from_frame(frame, timestamp)) signal.setitimer(signal.ITIMER_PROF, state.sample_interval, 0.0) @@ -281,7 +289,9 @@ state.accumulate_time(now) frame = sys._current_frames()[tid] - state.samples.append(Sample.from_frame(frame, state.accumulated_time[0])) + + timestamp = state.accumulated_time[state.timeidx] + state.samples.append(Sample.from_frame(frame, timestamp)) state.last_start_time = now time.sleep(state.sample_interval) @@ -295,8 +305,9 @@ return state.profile_level > 0 lastmechanism = None -def start(mechanism='thread'): +def start(mechanism='thread', track='cpu'): '''Install the profiling signal handler, and start profiling.''' + state.track = track # note: nesting different mode won't work state.profile_level += 1 if state.profile_level == 1: state.last_start_time = clock()