Issue title: Race condition in `FlutterSurfaceManager`
 Issue body: There is still a race condition in `FlutterSurfaceManager`. It's quite very difficult to reproduce, but it is there and it happens as follow
```
1) Time 0, RasterThread SwapBuffers, schedules OnIdle (back buffer release) on MainThread at Time 1
2) Time almost 1, RasterThread EnsureBackBuffer, schedules canceling OnIdle on MainThread
3) Time 1, MainThread, OnIdle, release back buffer (scheduled in step 1)
4) Time 1+, MainThread cancel scheduling OnIdle, but that already happened in step 3)
5) Time 1+, RasterThread SwapBuffer, crash.
```

The issue that in the delay between 2 (on raster thread) and 4 (on main thread) 3 happens.

The obvious solution is to use synchronized variable, i.e. `_renderInProgress`, set it to `YES` in `ensureBackBuffer`, clear after `SwapBuffers` completes and ignore `OnIdle` if `_renderInProgress` is `YES` (time between 2 and 4).
 Comments: 
 Comment 0: The linked fix has landed. Closing.
 Comment 1: This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of `flutter doctor -v` and a minimal reproduction of the issue.
{'source': 'GithubIssues', 'repo_name_with_owner': 'flutter/flutter', 'issue_id': 956947365, 'repo_stars': 152526.0}