Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Implement asynchronous texture uploads when using the Metal backend on iOS. #17046

Merged
merged 3 commits into from
Mar 10, 2020

Conversation

chinmaygarde
Copy link
Member

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, 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 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

@chinmaygarde
Copy link
Member Author

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 IOSRenderTarget refactor that I had begun in the previous patch was indeed unrelated to this patch. I have backed that out.

Adds more tracing

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.

Refactors the way we set scale on the metal texture

This is exactly the same as before. See the before and after. That scaling is in the exact same spot as before.

Removes some defaults from opacity and transaction handling on layers.

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.

In particular, some of them require manual tests to verify (e.g. you need to manually use an iOS device and rotate it and verify the rendering is correct).

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.

This will now throw if we're on a simulator, right?

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 createSurface: call or managing the device and command buffers that absent in OpenGL. So that refactor is not just happy spring cleaning but an integral part of how multiple contexts are created and managed and it is not possible to land them separately.

The parts that I do believe can be landed separately still are:
1: Cleaning up of the code repetition in IOSSurface around platform views controller.
2: Renaming ios_gl_context and ios_context_gl.

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.

@dnfield
Copy link
Contributor

dnfield commented Mar 10, 2020

Looks better this time - I'll try to do some manual testing with it today.

Copy link
Member

@gaaclarke gaaclarke left a 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 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

class docstring please

Copy link
Member Author

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]);
Copy link
Member

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?

Copy link
Member

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.

Copy link
Member Author

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.

Copy link
Member Author

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;
Copy link
Member

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.

Copy link
Member Author

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 {
Copy link
Member

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.

Copy link
Member Author

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))),
Copy link
Member

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.

Copy link
Member Author

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))) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same note about casting

Copy link
Member Author

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?

Copy link
Member

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.

Copy link
Member Author

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.

Copy link
Member Author

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
Copy link
Member

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?

Copy link
Member Author

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,
Copy link
Member

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}?

Copy link
Member Author

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(
Copy link
Member

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?

Copy link
Member Author

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;
}

Copy link
Member

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.

Copy link
Contributor

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?

Copy link
Member Author

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.

Copy link
Member

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?

Copy link
Member Author

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
@chinmaygarde chinmaygarde force-pushed the async_texture_uploads branch from a66ec59 to 453be9e Compare March 10, 2020 20:31
Copy link
Member Author

@chinmaygarde chinmaygarde left a 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 {
Copy link
Member Author

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]);
Copy link
Member Author

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]);
Copy link
Member Author

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;
Copy link
Member Author

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 {
Copy link
Member Author

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))) {
Copy link
Member Author

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
Copy link
Member Author

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,
Copy link
Member Author

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(
Copy link
Member Author

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;
}

Copy link
Member Author

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.

Copy link
Member

@gaaclarke gaaclarke left a 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.
Copy link
Member

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'?

Copy link
Member Author

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))) {
Copy link
Member

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;
}

Copy link
Member

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?

Copy link
Contributor

@dnfield dnfield left a 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

Copy link
Member Author

@chinmaygarde chinmaygarde left a 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.
Copy link
Member Author

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))) {
Copy link
Member Author

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))) {
Copy link
Member Author

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;
}

Copy link
Member Author

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.

@chinmaygarde
Copy link
Member Author

The LUCI error is an infra failure on the bot_update phase.

@chinmaygarde chinmaygarde merged commit 17e07c5 into flutter:master Mar 10, 2020
@chinmaygarde chinmaygarde deleted the async_texture_uploads branch March 10, 2020 23:01
@@ -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 =
Copy link

@blasten blasten Mar 10, 2020

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?

Copy link
Member Author

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?

Copy link

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?

Copy link
Member Author

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.

Copy link

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?

Copy link
Member Author

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.

Copy link

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!

engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 11, 2020
jason-simmons added a commit to jason-simmons/flutter that referenced this pull request Mar 11, 2020
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)
jason-simmons added a commit to flutter/flutter that referenced this pull request Mar 11, 2020
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)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Implement asynchronous texture uploads using the Metal backend.
5 participants