diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 1e135c5bccd11..0a2d8e63d3c82 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -2643,9 +2643,6 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuP FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPlugin.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPluginTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPlugin_Internal.h -FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h -FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.mm -FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRendererTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalSurfaceManagerTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMouseCursorPlugin.h FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMouseCursorPlugin.mm @@ -2656,6 +2653,8 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatf FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatformViewController.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatformViewControllerTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h +FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm +FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterRendererTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterResizableBackingStoreProvider.h FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterResizableBackingStoreProvider.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterResizeSynchronizer.h diff --git a/shell/platform/darwin/macos/BUILD.gn b/shell/platform/darwin/macos/BUILD.gn index a7b62727ff526..1c208037a2500 100644 --- a/shell/platform/darwin/macos/BUILD.gn +++ b/shell/platform/darwin/macos/BUILD.gn @@ -82,8 +82,6 @@ source_set("flutter_framework_source") { "framework/Source/FlutterMenuPlugin.h", "framework/Source/FlutterMenuPlugin.mm", "framework/Source/FlutterMenuPlugin_Internal.h", - "framework/Source/FlutterMetalRenderer.h", - "framework/Source/FlutterMetalRenderer.mm", "framework/Source/FlutterMouseCursorPlugin.h", "framework/Source/FlutterMouseCursorPlugin.mm", "framework/Source/FlutterPlatformNodeDelegateMac.h", @@ -91,6 +89,7 @@ source_set("flutter_framework_source") { "framework/Source/FlutterPlatformViewController.h", "framework/Source/FlutterPlatformViewController.mm", "framework/Source/FlutterRenderer.h", + "framework/Source/FlutterRenderer.mm", "framework/Source/FlutterResizableBackingStoreProvider.h", "framework/Source/FlutterResizableBackingStoreProvider.mm", "framework/Source/FlutterResizeSynchronizer.h", @@ -177,10 +176,10 @@ executable("flutter_desktop_darwin_unittests") { "framework/Source/FlutterEngineTestUtils.mm", "framework/Source/FlutterKeyboardManagerUnittests.mm", "framework/Source/FlutterMenuPluginTest.mm", - "framework/Source/FlutterMetalRendererTest.mm", "framework/Source/FlutterMetalSurfaceManagerTest.mm", "framework/Source/FlutterPlatformNodeDelegateMacTest.mm", "framework/Source/FlutterPlatformViewControllerTest.mm", + "framework/Source/FlutterRendererTest.mm", "framework/Source/FlutterTextInputPluginTest.mm", "framework/Source/FlutterTextInputSemanticsObjectTest.mm", "framework/Source/FlutterViewControllerTest.mm", diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 88df2550d6046..7009f60ecb968 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -12,9 +12,9 @@ #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPlugin.h" -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMouseCursorPlugin.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatformViewController.h" +#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewController_Internal.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewEngineProvider.h" #include "flutter/shell/platform/embedder/embedder.h" @@ -246,7 +246,7 @@ - (instancetype)initWithName:(NSString*)labelPrefix _embedderAPI.struct_size = sizeof(FlutterEngineProcTable); FlutterEngineGetProcAddresses(&_embedderAPI); - _renderer = [[FlutterMetalRenderer alloc] initWithFlutterEngine:self]; + _renderer = [[FlutterRenderer alloc] initWithFlutterEngine:self]; NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver:self @@ -422,9 +422,8 @@ - (FlutterCompositor*)createFlutterCompositor { __weak FlutterEngine* weakSelf = self; - FlutterMetalRenderer* metalRenderer = reinterpret_cast(_renderer); _macOSCompositor = std::make_unique( - _viewProvider, _platformViewController, metalRenderer.device); + _viewProvider, _platformViewController, _renderer.device); _macOSCompositor->SetPresentCallback([weakSelf](bool has_flutter_content) { if (has_flutter_content) { return [weakSelf.renderer present] == YES; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h index 0b618e4aed2f7..3181e24077e45 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h @@ -24,7 +24,7 @@ * Provides the renderer config needed to initialize the engine and also handles external * texture management. */ -@property(nonatomic, readonly, nullable) id renderer; +@property(nonatomic, readonly, nullable) FlutterRenderer* renderer; /** * Function pointers for interacting with the embedder.h API. diff --git a/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h b/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h deleted file mode 100644 index 7d44311ed491b..0000000000000 --- a/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import -#import - -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h" - -/** - * Provides the renderer config needed to initialize the embedder engine. This is initialized during - * FlutterEngine creation and then attached to the FlutterView once the FlutterViewController is - * initialized. - */ -@interface FlutterMetalRenderer : FlutterTextureRegistrar - -/** - * Interface to the system GPU. Used to issue all the rendering commands. - */ -@property(nonatomic, readonly, nonnull) id device; - -/** - * Used to get the command buffers for the MTLDevice to render to. - */ -@property(nonatomic, readonly, nonnull) id commandQueue; - -/** - * Creates a Metal texture for the given size. - */ -- (FlutterMetalTexture)createTextureForSize:(CGSize)size; - -/** - * Populates the texture registry with the provided metalTexture. - */ -- (BOOL)populateTextureWithIdentifier:(int64_t)textureID - metalTexture:(nonnull FlutterMetalExternalTexture*)metalTexture; - -@end diff --git a/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h b/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h index 8f88964b38c60..fc5d5c04db538 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h @@ -12,7 +12,18 @@ /** * Rendering backend agnostic FlutterRendererConfig provider to be used by the embedder API. */ -@protocol FlutterRenderer +@interface FlutterRenderer + : FlutterTextureRegistrar + +/** + * Interface to the system GPU. Used to issue all the rendering commands. + */ +@property(nonatomic, readonly, nonnull) id device; + +/** + * Used to get the command buffers for the MTLDevice to render to. + */ +@property(nonatomic, readonly, nonnull) id commandQueue; /** * Intializes the renderer with the given FlutterEngine. @@ -39,4 +50,15 @@ */ - (void)presentWithoutContent; +/** + * Creates a Metal texture for the given size. + */ +- (FlutterMetalTexture)createTextureForSize:(CGSize)size; + +/** + * Populates the texture registry with the provided metalTexture. + */ +- (BOOL)populateTextureWithIdentifier:(int64_t)textureID + metalTexture:(nonnull FlutterMetalExternalTexture*)metalTexture; + @end diff --git a/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.mm b/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm similarity index 90% rename from shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.mm rename to shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm index 12f073b324ca9..1dee38f436352 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm @@ -1,9 +1,8 @@ - // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h" +#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterExternalTextureMetal.h" @@ -15,8 +14,7 @@ static FlutterMetalTexture OnGetNextDrawable(FlutterEngine* engine, const FlutterFrameInfo* frameInfo) { CGSize size = CGSizeMake(frameInfo->size.width, frameInfo->size.height); - FlutterMetalRenderer* metalRenderer = reinterpret_cast(engine.renderer); - return [metalRenderer createTextureForSize:size]; + return [engine.renderer createTextureForSize:size]; } static bool OnPresentDrawable(FlutterEngine* engine, const FlutterMetalTexture* texture) { @@ -28,13 +26,13 @@ static bool OnAcquireExternalTexture(FlutterEngine* engine, size_t width, size_t height, FlutterMetalExternalTexture* metalTexture) { - FlutterMetalRenderer* metalRenderer = reinterpret_cast(engine.renderer); - return [metalRenderer populateTextureWithIdentifier:textureIdentifier metalTexture:metalTexture]; + return [engine.renderer populateTextureWithIdentifier:textureIdentifier + metalTexture:metalTexture]; } -#pragma mark - FlutterMetalRenderer implementation +#pragma mark - FlutterRenderer implementation -@implementation FlutterMetalRenderer { +@implementation FlutterRenderer { FlutterView* _flutterView; FlutterDarwinContextMetalSkia* _darwinMetalContext; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterMetalRendererTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterRendererTest.mm similarity index 85% rename from shell/platform/darwin/macos/framework/Source/FlutterMetalRendererTest.mm rename to shell/platform/darwin/macos/framework/Source/FlutterRendererTest.mm index e045bf09c0d71..0c9666273f0fb 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterMetalRendererTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterRendererTest.mm @@ -7,7 +7,7 @@ #import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h" -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h" +#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterView.h" #include "flutter/shell/platform/embedder/embedder.h" #include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.h" @@ -26,18 +26,18 @@ } } // namespace -TEST(FlutterMetalRenderer, PresentDelegatesToFlutterView) { +TEST(FlutterRenderer, PresentDelegatesToFlutterView) { FlutterEngine* engine = CreateTestEngine(); - FlutterMetalRenderer* renderer = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engine]; + FlutterRenderer* renderer = [[FlutterRenderer alloc] initWithFlutterEngine:engine]; id mockFlutterView = OCMClassMock([FlutterView class]); [(FlutterView*)[mockFlutterView expect] present]; [renderer setFlutterView:mockFlutterView]; [renderer present]; } -TEST(FlutterMetalRenderer, TextureReturnedByFlutterView) { +TEST(FlutterRenderer, TextureReturnedByFlutterView) { FlutterEngine* engine = CreateTestEngine(); - FlutterMetalRenderer* renderer = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engine]; + FlutterRenderer* renderer = [[FlutterRenderer alloc] initWithFlutterEngine:engine]; id mockFlutterView = OCMClassMock([FlutterView class]); FlutterFrameInfo frameInfo; frameInfo.struct_size = sizeof(FlutterFrameInfo); diff --git a/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm b/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm index b6ffe70bea8ac..995b75e9011b8 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm @@ -14,7 +14,7 @@ #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyPrimaryResponder.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyboardManager.h" -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h" +#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputSemanticsObject.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterView.h" #import "flutter/shell/platform/embedder/embedder.h" @@ -364,9 +364,8 @@ - (BOOL)isDispatchingKeyEvent:(NSEvent*)event { - (void)loadView { FlutterView* flutterView; - FlutterMetalRenderer* metalRenderer = reinterpret_cast(_engine.renderer); - id device = metalRenderer.device; - id commandQueue = metalRenderer.commandQueue; + id device = _engine.renderer.device; + id commandQueue = _engine.renderer.commandQueue; if (!device || !commandQueue) { NSLog(@"Unable to create FlutterView; no MTLDevice or MTLCommandQueue available."); return; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm index 9ec0f3aec65bb..bc7c18739043b 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm @@ -11,7 +11,7 @@ #import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h" -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h" +#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTestUtils.h" #import "flutter/testing/testing.h" @@ -269,7 +269,7 @@ - (bool)testKeyEventsArePropagatedIfNotHandled { - (bool)testFlutterViewIsConfigured { id engineMock = OCMClassMock([FlutterEngine class]); - id renderer_ = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engineMock]; + FlutterRenderer* renderer_ = [[FlutterRenderer alloc] initWithFlutterEngine:engineMock]; OCMStub([engineMock renderer]).andReturn(renderer_); FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engineMock @@ -460,7 +460,7 @@ + (void)respondFalseForSendEvent:(const FlutterKeyEvent&)event - (bool)testTrackpadGesturesAreSentToFramework { id engineMock = OCMClassMock([FlutterEngine class]); // Need to return a real renderer to allow view controller to load. - id renderer_ = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engineMock]; + FlutterRenderer* renderer_ = [[FlutterRenderer alloc] initWithFlutterEngine:engineMock]; OCMStub([engineMock renderer]).andReturn(renderer_); __block bool called = false; __block FlutterPointerEvent last_event;