-
Notifications
You must be signed in to change notification settings - Fork 5.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replace flutter_runner::Thread with fml::Thread #26783
Conversation
We found a Contributor License Agreement for you (the sender of this pull request), but were unable to find agreements for all the commit author(s) or Co-authors. If you authored these, maybe you used a different email address in the git commits than was used to sign the CLA (login here to double check)? If these were authored by someone else, then they will need to sign a CLA as well, and confirm that they're okay with these being contributed to Google. ℹ️ Googlers: Go here for more info. |
This is a preparatory CL. The next CL will cause task_observers.h to be included from both shell/platform/fuchsia _and_ fml/platform/fuchsia. I imagine it might be gauche for a single file to be used from both those directories, but it seems way worse for fml to depend on shell, rather than the other way around.
This CL makes the treading logic in Fuchsia's flutter_runner more consistent with fml expectations, but it still has quirks. Notably: - Not all async work get posted to a fml::TaskRunner. Some work done by Fuchsia libraries gets posted directly to async_get_default_dispatcher(). This work doesn't trigger the fml::MessageLoop's task observers. As a result, we continue to have Fuchsia-specific task observers which fire for all async work, regardless of which way it was posted. - There's awkwardness when trying to run Fuchsia code on a specific fml::TaskRunner if that fuchsia code accepts an async_dispatcher_t. Since you can no longer get an async_dispatcher_t for a given thread, you instead must post a closure to the fml::TaskRunner that calls async_get_default_dispatcher(), and then calls the fuchsia library with the default dispatcher. - Some tests still use task_runner_adapter.h because async::Loop offers more control in unit tests than fml::MessageLoop does. - If this successfully lands, there will be some cosmetic follow-up changes to make, like using ThreadHost instead of an array of fml::Threads.
The previous change removes our custom 1MiB limit on the stack of newly created threads, so these threads revert to the Fuchsia default. google-internal tests were failing (without any particular error in the logs) after this change, so here we just set the default stack size to 1MiB.
It looks like this pull request may not have tests. Please make sure to add tests before merging. If you need an exemption to this rule, contact Hixie on the #hackers channel in Chat. If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix? Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
@arbreng Ready when you are! This has passed Fuchsia GI. |
* Move task_observers.{cc,h} into fml. This is a preparatory CL. The next CL will cause task_observers.h to be included from both shell/platform/fuchsia _and_ fml/platform/fuchsia. I imagine it might be gauche for a single file to be used from both those directories, but it seems way worse for fml to depend on shell, rather than the other way around. * Replace flutter_runner::Thread with fml::Thread. This CL makes the treading logic in Fuchsia's flutter_runner more consistent with fml expectations, but it still has quirks. Notably: - Not all async work get posted to a fml::TaskRunner. Some work done by Fuchsia libraries gets posted directly to async_get_default_dispatcher(). This work doesn't trigger the fml::MessageLoop's task observers. As a result, we continue to have Fuchsia-specific task observers which fire for all async work, regardless of which way it was posted. - There's awkwardness when trying to run Fuchsia code on a specific fml::TaskRunner if that fuchsia code accepts an async_dispatcher_t. Since you can no longer get an async_dispatcher_t for a given thread, you instead must post a closure to the fml::TaskRunner that calls async_get_default_dispatcher(), and then calls the fuchsia library with the default dispatcher. - Some tests still use task_runner_adapter.h because async::Loop offers more control in unit tests than fml::MessageLoop does. - If this successfully lands, there will be some cosmetic follow-up changes to make, like using ThreadHost instead of an array of fml::Threads. * Increase stack size in flutter runner. The previous change removes our custom 1MiB limit on the stack of newly created threads, so these threads revert to the Fuchsia default. google-internal tests were failing (without any particular error in the logs) after this change, so here we just set the default stack size to 1MiB. Co-authored-by: Hunter Freyer <hjfreyer@google.com>
* Move task_observers.{cc,h} into fml. This is a preparatory CL. The next CL will cause task_observers.h to be included from both shell/platform/fuchsia _and_ fml/platform/fuchsia. I imagine it might be gauche for a single file to be used from both those directories, but it seems way worse for fml to depend on shell, rather than the other way around. * Replace flutter_runner::Thread with fml::Thread. This CL makes the treading logic in Fuchsia's flutter_runner more consistent with fml expectations, but it still has quirks. Notably: - Not all async work get posted to a fml::TaskRunner. Some work done by Fuchsia libraries gets posted directly to async_get_default_dispatcher(). This work doesn't trigger the fml::MessageLoop's task observers. As a result, we continue to have Fuchsia-specific task observers which fire for all async work, regardless of which way it was posted. - There's awkwardness when trying to run Fuchsia code on a specific fml::TaskRunner if that fuchsia code accepts an async_dispatcher_t. Since you can no longer get an async_dispatcher_t for a given thread, you instead must post a closure to the fml::TaskRunner that calls async_get_default_dispatcher(), and then calls the fuchsia library with the default dispatcher. - Some tests still use task_runner_adapter.h because async::Loop offers more control in unit tests than fml::MessageLoop does. - If this successfully lands, there will be some cosmetic follow-up changes to make, like using ThreadHost instead of an array of fml::Threads. * Increase stack size in flutter runner. The previous change removes our custom 1MiB limit on the stack of newly created threads, so these threads revert to the Fuchsia default. google-internal tests were failing (without any particular error in the logs) after this change, so here we just set the default stack size to 1MiB. Co-authored-by: Hunter Freyer <hjfreyer@google.com>
This reverts commit 46178d6.
This reverts commit 46178d6.
Another attempt to land #26193. The previous version changed the stack size for threads, which caused test failures. This version passes those tests.
Original description:
This CL makes the treading logic in Fuchsia's flutter_runner more
consistent with fml expectations, but it still has quirks. Notably:
Not all async work get posted to a fml::TaskRunner. Some work done
by Fuchsia libraries gets posted directly to
async_get_default_dispatcher(). This work doesn't trigger the
fml::MessageLoop's task observers. As a result, we continue to have
Fuchsia-specific task observers which fire for all async work,
regardless of which way it was posted.
There's awkwardness when trying to run Fuchsia code on a specific
fml::TaskRunner if that fuchsia code accepts an
async_dispatcher_t. Since you can no longer get an
async_dispatcher_t for a given thread, you instead must post a
closure to the fml::TaskRunner that calls
async_get_default_dispatcher(), and then calls the fuchsia library
with the default dispatcher.
Some tests still use task_runner_adapter.h because async::Loop
offers more control in unit tests than fml::MessageLoop does.
If this successfully lands, there will be some cosmetic follow-up
changes to make, like using ThreadHost instead of an array of
fml::Threads.