(Regarding the experimental `React.unstable_Profiler` API and reactjs/rfcs/pull/51.)

PR #13058 changed the behavior of React profiling builds to opt host roots into `ProfileMode` if the React DevTools extension is detected. This was necessary in order to have accurate tree base time measurements for the visual flame graphs.

The Profiler plug-in for DevTools does feature detection to determine if it's enabled by looking at each root and seeing if any of the fibers contain an `actualDuration` attribute,

The problem is that the `actualDuration` attribute will be present on v16.4 fibers, which pre-date PR #13058. As a result, the Profiler UI may enable itself with versions of React that it cannot work correctly with.

Perhaps an easy solution would be to rename one of the `unstable_Profiler`'s fiber attributes prior to the next minor release (e.g. `treeBaseTime` -> `treeBaseDuration`) and change the DevTools Profiler to feature check using this new name instead.
!isWorking ||
    isCommitting ||
    
    nextRoot !== root
  ) {
    const rootExpirationTime = root.expirationTime;
    requestWork(root, rootExpirationTime);
  }
  if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {
    invariant(
      false,
      'Maximum update depth exceeded. This can happen when a ' +
        'component repeatedly calls setState inside ' +
        'componentWillUpdate or componentDidUpdate. React limits ' +
        'the number of nested updates to prevent infinite loops.',
    );
  }
}
function deferredUpdates<A>(fn: () => A): A {
  const currentTime = requestCurrentTime();
  const previousExpirationContext = expirationContext;
  expirationContext = computeAsyncExpiration(currentTime);
  try {
    return fn();
  } finally {
    expirationContext = previousExpirationContext;
  }
}
function syncUpdates<A, B, C0, D, R>(