-
Notifications
You must be signed in to change notification settings - Fork 6k
Implement asynchronous texture uploads when using the Metal backend on iOS. #17046
Implement asynchronous texture uploads when using the Metal backend on iOS. #17046
Conversation
For whatever reason, I could not just update the branch on a closed PR and just re-open it. In any case, this is the same as #17039 with updates: @dnfield, Comments on your initial review and updates: The
Most of the tracing is around image decompression and additions in new translation unit introduced in this commit. So the tracing is hardly unrelated to this patch. I'd prefer to keep this in.
This is exactly the same as before. See the before and after. That scaling is in the exact same spot as before.
If you meant the group opacity stuff. Yes. That is unrelated and I have backed that out. That was was a premature optimization that I added initially to FlutterView and was copied over to FlutterOverlayView. Notice how it is YES in FlutterView but NO in FlutterOverlayView. Anyway, its back to how it was. I am not sure this is clearer but we can fix that later.
This has been true of the software and OpenGL backends before and after my patch and this patch makes no attempts to address this. Even when the Metal stuff is tested in host harness, this will remain unaddressed.
Yes. I have fixed this and also added a flag that I can use in Metal enabled builds to test using the software backend. I have verified functionality with all backends in a single build. As before, software rendering will be defaulted to when using the simulator. The primary change in this patch is reworking context management such that it is consistent on all platforms. Toward that end, I believe refactoring internals this way is essential because the current implementation is very OpenGL specific. For example, a GL resource context is created in the platform view regardless of the rendering API. An argument could be made that another preprocessor macro will be sufficient to initialize a metal variant of that context but that does not take into account passing this variant to the The parts that I do believe can be landed separately still are: Both of these seem harmless and make the codebase a lot cleaner but I can be persuaded to back these out if you feel this is absolutely essential to landing this PR. |
Looks better this time - I'll try to do some manual testing with it today. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice chinmay, excited for this PR.
|
||
namespace flutter { | ||
|
||
class IOSContext { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
class docstring please
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
|
||
[main_queue_ setLabel:@"Flutter Main Queue"]; | ||
|
||
main_context_ = GrContext::MakeMetal([device_ retain], [main_queue_ retain]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is non idiomatic, retaining in function calls. Are you sure thats how those functions work?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If it is correct, consider adding a comment here since it is non-idiomatic.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not idiomatic but thats what the API expects. From the docs:
These objects must have a ref on them which can be transferred to Ganesh which will release the ref when the GrContext is destroyed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
consider adding a comment here since it is non-idiomatic.
Added a comment.
|
||
// |IOSContext| | ||
bool IOSContextSoftware::MakeCurrent() { | ||
return false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why does this return false? You should probably add a docstring to MakeCurrent that explains what the return value means.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added a docstring comment to IOSContext::MakeCurrent
about this behavior. I agree this is non-intuitive and we should fix it but I did not want to perform that unrelated change here. It is now documented but I will fix it later. Let me know if the the clarification in that docstring is still insufficient.
@@ -12,34 +12,41 @@ | |||
|
|||
namespace flutter { | |||
|
|||
class IOSExternalTextureGL : public flutter::Texture { | |||
class IOSExternalTextureGL final : public Texture { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: for large PR's we should probably split out refactoring into a different PR. No need to change anything here, just food for thought.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed. And while I have backed out some of the unrelated changes in this patch, there are a couple more described here that I can back out still if it aids in faster review. Let me know.
I was sort of cleaning up stuff as I went which was probably not a good idea.
IOSRenderTargetGL::IOSRenderTargetGL(fml::scoped_nsobject<CALayer> layer, | ||
fml::scoped_nsobject<EAGLContext> context, | ||
fml::scoped_nsobject<EAGLContext> resource_context) | ||
: layer_(CastEAGLLayer(std::move(layer))), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It probably makes more sense to make this method take in a EAGLLayer and push the cast higher in the callstack.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed. Done. Moved to IOSSurfaceGL where the context cast was happening as well.
std::shared_ptr<IOSContext> context, | ||
FlutterPlatformViewsController* platform_views_controller) | ||
: IOSSurface(std::move(context), platform_views_controller), | ||
layer_(CastToMetalLayer(std::move(layer))) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same note about casting
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now all the casts are in the IOSSurface. Do you want them higher?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here is my thought: It's silly to cast something in a constructor because someone should have and know the requirements to make an object. This just hides the cast better and casts are always something that should be regarded with skepticism since they can be the source of nasty bugs.
I'd say this is something similar to demeter's law. where you would prefer int foo(Child x) => x.foo
instead of int foo(Parent x) => x.child.foo
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fair enough. I am convinced. No more casting in the ctor.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update the similar usage in IOSSurfaceGL too.
std::unique_ptr<Surface> IOSSurfaceMetal::CreateGPUSurface(GrContext* /* unused */) { | ||
auto metal_context = CastToMetalContext(GetContext()); | ||
|
||
return std::make_unique<GPUSurfaceMetal>(this, // Metal surface delegate |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Passing a raw c++ pointer inside of a unique_ptr. Can we use weak_ptr?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is an existing interface that I didn't want to change.
|
||
@class FlutterViewController; | ||
|
||
namespace flutter { | ||
|
||
class PlatformViewIOS final : public PlatformView { | ||
public: | ||
explicit PlatformViewIOS(PlatformView::Delegate& delegate, flutter::TaskRunners task_runners); | ||
explicit PlatformViewIOS(PlatformView::Delegate& delegate, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit, explicit is usually reserved for single parameter constructors. I'm not even sure what it means here, auto cast from {delegate, rendering_api, task_runners}
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was already there. But, agreed. We have not had a straight story on where/whether to use explicit
.
I'm not even sure what it means here, auto cast from {delegate, rendering_api, task_runners}?
Yeah. Though I am not sure why anyone would do that. Personally, I have never found utility in the use of explicit but I can be easily swayed by an appropriate recommendation in a style guide.
|
||
IOSRenderingAPI GetRenderingAPIForProcess(); | ||
|
||
Class GetQuartzLayerClassForRenderingAPI( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Man, Quartz
sounds so 2005, is that really how it is still referred to in the API?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No. Thats just me dating myself for no reason. Changed to GetCoreAnimationLayerClassForRenderingAPI()
.
if (@available(iOS 11.0, *)) { | ||
ios_version_supports_metal = true; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should there be a query of the underlying hardware? If you have iOS 11 does that mean your phone has to support it? We should add that info in the comment if so.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a Skia constraint. Metal is supported from something like 8.0, but Skia only supports down to 11.0.
Is there some way we could parameterize the Skia constraint here from some constant in Skia?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe we can go lower still but I haven't tested it yet to confirm. This constant is still WIP and this code was just moved here and not authored anew. I will tackle this separately.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you link in an issue so we don't lose it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Filed flutter/flutter#52356 and also linked in a TODO here.
…n iOS. This moves the Metal `GrContext` creation utilities from `GPUSurfaceMetal` into a separate `IOSContext` object subclass. An analogue of this object was used in the GL regime for the management of onscreen and offscreen contexts that were not tied to the lifecycle of the `GPUSurface`. This pattern has now been generalized for use with all backends that need a resource context (`IOSContextGL` and `IOContextMetal`). The platform views controller management in the `ExternalViewEmbedder` interface implementation was repeated three times for [Metal][metal], [OpenGL](opengl) and [Software](software) rendering. This repetition has been removed and a single implementation present in the base `IOSSurface` and used on all platforms. Addition of new client rendering APIs should not affect how the engine renders into the platform view interleaving levels. All rendering API selection logic has been moved into a single set of utilities in `rendering_api_selection.h`. This enables the removal of a lot of code blocks guarded by `FLUTTER_SHELL_ENABLE_METAL`. The remaining uses of this will be removed when unified builds are enabled. The Metal backend now also adds traces similar to the GL backend. The `IOGLContext` has been renamed to `IOContextGL` to be more in line with the convention used in this library. Fixes flutter/flutter#41827 Adds flutter/flutter#52150 [metal]: https://github.com/flutter/engine/blob/1194ba2b218706a201c5d2c5325b55a5932546c5/shell/platform/darwin/ios/ios_surface_metal.mm#L55 [opengl]: https://github.com/flutter/engine/blob/1194ba2b218706a201c5d2c5325b55a5932546c5/shell/platform/darwin/ios/ios_surface_gl.mm#L95 [software]: https://github.com/flutter/engine/blob/1194ba2b218706a201c5d2c5325b55a5932546c5/shell/platform/darwin/ios/ios_surface_software.mm#L146
a66ec59
to
453be9e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed all comments and fixed simulator builds. PTAL.
|
||
namespace flutter { | ||
|
||
class IOSContext { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
|
||
[main_queue_ setLabel:@"Flutter Main Queue"]; | ||
|
||
main_context_ = GrContext::MakeMetal([device_ retain], [main_queue_ retain]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not idiomatic but thats what the API expects. From the docs:
These objects must have a ref on them which can be transferred to Ganesh which will release the ref when the GrContext is destroyed.
|
||
[main_queue_ setLabel:@"Flutter Main Queue"]; | ||
|
||
main_context_ = GrContext::MakeMetal([device_ retain], [main_queue_ retain]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
consider adding a comment here since it is non-idiomatic.
Added a comment.
|
||
// |IOSContext| | ||
bool IOSContextSoftware::MakeCurrent() { | ||
return false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added a docstring comment to IOSContext::MakeCurrent
about this behavior. I agree this is non-intuitive and we should fix it but I did not want to perform that unrelated change here. It is now documented but I will fix it later. Let me know if the the clarification in that docstring is still insufficient.
@@ -12,34 +12,41 @@ | |||
|
|||
namespace flutter { | |||
|
|||
class IOSExternalTextureGL : public flutter::Texture { | |||
class IOSExternalTextureGL final : public Texture { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed. And while I have backed out some of the unrelated changes in this patch, there are a couple more described here that I can back out still if it aids in faster review. Let me know.
I was sort of cleaning up stuff as I went which was probably not a good idea.
std::shared_ptr<IOSContext> context, | ||
FlutterPlatformViewsController* platform_views_controller) | ||
: IOSSurface(std::move(context), platform_views_controller), | ||
layer_(CastToMetalLayer(std::move(layer))) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now all the casts are in the IOSSurface. Do you want them higher?
std::unique_ptr<Surface> IOSSurfaceMetal::CreateGPUSurface(GrContext* /* unused */) { | ||
auto metal_context = CastToMetalContext(GetContext()); | ||
|
||
return std::make_unique<GPUSurfaceMetal>(this, // Metal surface delegate |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is an existing interface that I didn't want to change.
|
||
@class FlutterViewController; | ||
|
||
namespace flutter { | ||
|
||
class PlatformViewIOS final : public PlatformView { | ||
public: | ||
explicit PlatformViewIOS(PlatformView::Delegate& delegate, flutter::TaskRunners task_runners); | ||
explicit PlatformViewIOS(PlatformView::Delegate& delegate, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was already there. But, agreed. We have not had a straight story on where/whether to use explicit
.
I'm not even sure what it means here, auto cast from {delegate, rendering_api, task_runners}?
Yeah. Though I am not sure why anyone would do that. Personally, I have never found utility in the use of explicit but I can be easily swayed by an appropriate recommendation in a style guide.
|
||
IOSRenderingAPI GetRenderingAPIForProcess(); | ||
|
||
Class GetQuartzLayerClassForRenderingAPI( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No. Thats just me dating myself for no reason. Changed to GetCoreAnimationLayerClassForRenderingAPI()
.
if (@available(iOS 11.0, *)) { | ||
ios_version_supports_metal = true; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe we can go lower still but I haven't tested it yet to confirm. This constant is still WIP and this code was just moved here and not authored anew. I will tackle this separately.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, just a bit of minor feedback left
/// @brief Clears the context binding of the current thread if one is | ||
/// present. Does noting otherwise. | ||
/// | ||
/// @return Clears the current context binding. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could be a bit more clear: "True if the context was bound and cleared'?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
std::shared_ptr<IOSContext> context, | ||
FlutterPlatformViewsController* platform_views_controller) | ||
: IOSSurface(std::move(context), platform_views_controller), | ||
layer_(CastToMetalLayer(std::move(layer))) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here is my thought: It's silly to cast something in a constructor because someone should have and know the requirements to make an object. This just hides the cast better and casts are always something that should be regarded with skepticism since they can be the source of nasty bugs.
I'd say this is something similar to demeter's law. where you would prefer int foo(Child x) => x.foo
instead of int foo(Parent x) => x.child.foo
.
if (@available(iOS 11.0, *)) { | ||
ios_version_supports_metal = true; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you link in an issue so we don't lose it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is now building for the simulator properly and passes some manual tests for me on a real device and a simulator.
It'd be really cool if we could get metal working on a simulator for testing.
I'd defer to @gaaclarke for final LGTM, but this LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It'd be really cool if we could get metal working on a simulator for testing.
Filed flutter/flutter#52358 to track.
All other comments addressed. PTAL.
/// @brief Clears the context binding of the current thread if one is | ||
/// present. Does noting otherwise. | ||
/// | ||
/// @return Clears the current context binding. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
std::shared_ptr<IOSContext> context, | ||
FlutterPlatformViewsController* platform_views_controller) | ||
: IOSSurface(std::move(context), platform_views_controller), | ||
layer_(CastToMetalLayer(std::move(layer))) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fair enough. I am convinced. No more casting in the ctor.
std::shared_ptr<IOSContext> context, | ||
FlutterPlatformViewsController* platform_views_controller) | ||
: IOSSurface(std::move(context), platform_views_controller), | ||
layer_(CastToMetalLayer(std::move(layer))) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update the similar usage in IOSSurfaceGL too.
if (@available(iOS 11.0, *)) { | ||
ios_version_supports_metal = true; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Filed flutter/flutter#52356 and also linked in a TODO here.
The LUCI error is an infra failure on the bot_update phase. |
@@ -474,7 +474,8 @@ | |||
overlay_view.get().frame = flutter_view_.get().bounds; | |||
overlay_view.get().autoresizingMask = | |||
(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); | |||
std::unique_ptr<IOSSurface> ios_surface = [overlay_view.get() createSurface:nil]; | |||
std::unique_ptr<IOSSurface> ios_surface = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is it possible for an overlay to switch from gl_context to ios_context and vice versa?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure I understand. The IOContextGL is a subclass of IOSContext. Can you clarify?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry - I meant if the EnsureOverlayInitialized
can be called multiple times with the same overlay_id
, but different values for gl_context
and ios_context
. If we are caching these overlays, should that be taken into account?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no more gl_context_
, only the ios_context which should be the same reference created and held by the platform view.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what about ios_context
and gr_context
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The iOS context owns the GrContexts. It owns one for on-screen rendering and another for off-screen rendering. The gr_context
must be the same for all overlays and be the same as the on-screen context owned by the IOSContext
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. Thanks for the explanation!
2020-03-11 [email protected] Roll src/third_party/dart 4093d08271f6..37530145ff53 (4 commits) (flutter/engine#17090) 2020-03-11 [email protected] Roll src/third_party/skia bf355123ae3b..0340292972b9 (9 commits) (flutter/engine#17089) 2020-03-11 [email protected] Roll fuchsia/sdk/core/mac-amd64 from r_oCI... to 0Z8VF... (flutter/engine#17087) 2020-03-11 [email protected] Roll fuchsia/sdk/core/linux-amd64 from v32mJ... to X3Xm2... (flutter/engine#17086) 2020-03-11 [email protected] Remove the unused method on iOS surface to make the resource context current. (flutter/engine#17084) 2020-03-11 [email protected] Revert "Add support for the Metal backend on all iOS builds. (flutter#17080)" (flutter/engine#17088) 2020-03-11 [email protected] Roll src/third_party/dart ace1d9b9213a..4093d08271f6 (12 commits) (flutter/engine#17082) 2020-03-11 [email protected] Add support for the Metal backend on all iOS builds. (flutter/engine#17080) 2020-03-11 [email protected] Roll src/third_party/skia d3f67dbf9f36..bf355123ae3b (9 commits) (flutter/engine#17079) 2020-03-11 [email protected] Disable Embedder11yTest::A11yTreeIsConsistent to unblock LUCI. (flutter/engine#17081) 2020-03-10 [email protected] Gather demangled stack traces and report the same to console on crashes. (flutter/engine#16450) 2020-03-10 [email protected] Implement asynchronous texture uploads when using the Metal backend on iOS. (flutter/engine#17046) 2020-03-10 [email protected] Roll src/third_party/dart 97674262bc29..ace1d9b9213a (14 commits) (flutter/engine#17078) 2020-03-10 [email protected] Add RTree to flow (flutter/engine#16923) 2020-03-10 [email protected] Roll src/third_party/skia 78dac6dcb222..d3f67dbf9f36 (6 commits) (flutter/engine#17072) 2020-03-10 [email protected] Revert "Fix bounds of image_filter_layer (flutter#16960)" (flutter/engine#17074) 2020-03-10 [email protected] Use the ELF loader to setup AOT symbols in benchmark runner. (flutter/engine#17051) 2020-03-10 [email protected] Roll src/third_party/skia 23899c64e3db..78dac6dcb222 (19 commits) (flutter/engine#17069) 2020-03-10 [email protected] Roll dart to 97674262bc29447dc59d5c93024b18b27d4bcf98. (flutter/engine#17067) 2020-03-10 [email protected] [web] Fixes for Firefox & Safari double underline decoration bugs. (flutter/engine#16994) 2020-03-10 [email protected] Avoid capturing this unsafely in MultiFrameCodec (flutter/engine#16824) 2020-03-10 [email protected] Revert "Revert "fix shadows and mask filter blurs (flutter#16963)" (flutter#17008)" (flutter/engine#17040) 2020-03-10 [email protected] Add support for firefox mac installer. Update web_ui pubspec for http.wq (flutter/engine#17044) 2020-03-09 [email protected] fix "TREE INCONSISTENT" noise in compositing_test.dart (flutter/engine#16995) 2020-03-09 [email protected] Add more child lifecycle tests (flutter/engine#16689) 2020-03-09 [email protected] Add libfreetype6-dev to desktop Linux dependencies (flutter/engine#17020) 2020-03-09 [email protected] Disable shell benchmarks (flutter/engine#17038) 2020-03-09 [email protected] Fix bounds of image_filter_layer (flutter/engine#16960) 2020-03-09 [email protected] Record fml and shell benchmarks (flutter/engine#16991) 2020-03-09 [email protected] Roll src/third_party/skia c56950442dd1..23899c64e3db (11 commits) (flutter/engine#17033) 2020-03-09 [email protected] use commit date instead of author date (flutter/engine#17032)
2020-03-11 [email protected] Roll src/third_party/dart 4093d08271f6..37530145ff53 (4 commits) (flutter/engine#17090) 2020-03-11 [email protected] Roll src/third_party/skia bf355123ae3b..0340292972b9 (9 commits) (flutter/engine#17089) 2020-03-11 [email protected] Roll fuchsia/sdk/core/mac-amd64 from r_oCI... to 0Z8VF... (flutter/engine#17087) 2020-03-11 [email protected] Roll fuchsia/sdk/core/linux-amd64 from v32mJ... to X3Xm2... (flutter/engine#17086) 2020-03-11 [email protected] Remove the unused method on iOS surface to make the resource context current. (flutter/engine#17084) 2020-03-11 [email protected] Revert "Add support for the Metal backend on all iOS builds. (#17080)" (flutter/engine#17088) 2020-03-11 [email protected] Roll src/third_party/dart ace1d9b9213a..4093d08271f6 (12 commits) (flutter/engine#17082) 2020-03-11 [email protected] Add support for the Metal backend on all iOS builds. (flutter/engine#17080) 2020-03-11 [email protected] Roll src/third_party/skia d3f67dbf9f36..bf355123ae3b (9 commits) (flutter/engine#17079) 2020-03-11 [email protected] Disable Embedder11yTest::A11yTreeIsConsistent to unblock LUCI. (flutter/engine#17081) 2020-03-10 [email protected] Gather demangled stack traces and report the same to console on crashes. (flutter/engine#16450) 2020-03-10 [email protected] Implement asynchronous texture uploads when using the Metal backend on iOS. (flutter/engine#17046) 2020-03-10 [email protected] Roll src/third_party/dart 97674262bc29..ace1d9b9213a (14 commits) (flutter/engine#17078) 2020-03-10 [email protected] Add RTree to flow (flutter/engine#16923) 2020-03-10 [email protected] Roll src/third_party/skia 78dac6dcb222..d3f67dbf9f36 (6 commits) (flutter/engine#17072) 2020-03-10 [email protected] Revert "Fix bounds of image_filter_layer (#16960)" (flutter/engine#17074) 2020-03-10 [email protected] Use the ELF loader to setup AOT symbols in benchmark runner. (flutter/engine#17051) 2020-03-10 [email protected] Roll src/third_party/skia 23899c64e3db..78dac6dcb222 (19 commits) (flutter/engine#17069) 2020-03-10 [email protected] Roll dart to 97674262bc29447dc59d5c93024b18b27d4bcf98. (flutter/engine#17067) 2020-03-10 [email protected] [web] Fixes for Firefox & Safari double underline decoration bugs. (flutter/engine#16994) 2020-03-10 [email protected] Avoid capturing this unsafely in MultiFrameCodec (flutter/engine#16824) 2020-03-10 [email protected] Revert "Revert "fix shadows and mask filter blurs (#16963)" (#17008)" (flutter/engine#17040) 2020-03-10 [email protected] Add support for firefox mac installer. Update web_ui pubspec for http.wq (flutter/engine#17044) 2020-03-09 [email protected] fix "TREE INCONSISTENT" noise in compositing_test.dart (flutter/engine#16995) 2020-03-09 [email protected] Add more child lifecycle tests (flutter/engine#16689) 2020-03-09 [email protected] Add libfreetype6-dev to desktop Linux dependencies (flutter/engine#17020) 2020-03-09 [email protected] Disable shell benchmarks (flutter/engine#17038) 2020-03-09 [email protected] Fix bounds of image_filter_layer (flutter/engine#16960) 2020-03-09 [email protected] Record fml and shell benchmarks (flutter/engine#16991) 2020-03-09 [email protected] Roll src/third_party/skia c56950442dd1..23899c64e3db (11 commits) (flutter/engine#17033) 2020-03-09 [email protected] use commit date instead of author date (flutter/engine#17032)
This moves the Metal
GrContext
creation utilities fromGPUSurfaceMetal
intoa separate
IOSContext
object subclass. An analogue of this object was used inthe GL regime for the management of onscreen and offscreen contexts that were
not tied to the lifecycle of the
GPUSurface
. This pattern has now beengeneralized for use with all backends that need a resource context
(
IOSContextGL
andIOContextMetal
).The platform views controller management in the
ExternalViewEmbedder
interfaceimplementation was repeated three times for Metal, OpenGL and
Software rendering. This repetition has been removed and a single
implementation present in the base
IOSSurface
and used on all platforms.Addition of new client rendering APIs should not affect how the engine renders
into the platform view interleaving levels.
All rendering API selection logic has been moved into a single set of utilities
in
rendering_api_selection.h
. This enables the removal of a lot of code blocksguarded by
FLUTTER_SHELL_ENABLE_METAL
. The remaining uses of this will beremoved when unified builds are enabled.
The Metal backend now also adds traces similar to the GL backend.
The
IOGLContext
has been renamed toIOContextGL
to be more in line with theconvention used in this library.
Fixes flutter/flutter#41827
Adds flutter/flutter#52150