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

[macOS] Merge FlutterRenderer and implementation #37696

Merged
merged 1 commit into from
Nov 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
5 changes: 2 additions & 3 deletions shell/platform/darwin/macos/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,14 @@ 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",
"framework/Source/FlutterPlatformNodeDelegateMac.mm",
"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",
Expand Down Expand Up @@ -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",
Expand Down
7 changes: 3 additions & 4 deletions shell/platform/darwin/macos/framework/Source/FlutterEngine.mm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -422,9 +422,8 @@ - (FlutterCompositor*)createFlutterCompositor {

__weak FlutterEngine* weakSelf = self;

FlutterMetalRenderer* metalRenderer = reinterpret_cast<FlutterMetalRenderer*>(_renderer);
_macOSCompositor = std::make_unique<flutter::FlutterCompositor>(
_viewProvider, _platformViewController, metalRenderer.device);
_viewProvider, _platformViewController, _renderer.device);
_macOSCompositor->SetPresentCallback([weakSelf](bool has_flutter_content) {
if (has_flutter_content) {
return [weakSelf.renderer present] == YES;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* Provides the renderer config needed to initialize the engine and also handles external
* texture management.
*/
@property(nonatomic, readonly, nullable) id<FlutterRenderer> renderer;
@property(nonatomic, readonly, nullable) FlutterRenderer* renderer;

/**
* Function pointers for interacting with the embedder.h API.
Expand Down

This file was deleted.

24 changes: 23 additions & 1 deletion shell/platform/darwin/macos/framework/Source/FlutterRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,18 @@
/**
* Rendering backend agnostic FlutterRendererConfig provider to be used by the embedder API.
*/
@protocol FlutterRenderer <FlutterTextureRegistry, FlutterTextureRegistrarDelegate>
@interface FlutterRenderer
: FlutterTextureRegistrar <FlutterTextureRegistry, FlutterTextureRegistrarDelegate>

/**
* Interface to the system GPU. Used to issue all the rendering commands.
*/
@property(nonatomic, readonly, nonnull) id<MTLDevice> device;

/**
* Used to get the command buffers for the MTLDevice to render to.
*/
@property(nonatomic, readonly, nonnull) id<MTLCommandQueue> commandQueue;

/**
* Intializes the renderer with the given FlutterEngine.
Expand All @@ -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
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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<FlutterMetalRenderer*>(engine.renderer);
return [metalRenderer createTextureForSize:size];
return [engine.renderer createTextureForSize:size];
}

static bool OnPresentDrawable(FlutterEngine* engine, const FlutterMetalTexture* texture) {
Expand All @@ -28,13 +26,13 @@ static bool OnAcquireExternalTexture(FlutterEngine* engine,
size_t width,
size_t height,
FlutterMetalExternalTexture* metalTexture) {
FlutterMetalRenderer* metalRenderer = reinterpret_cast<FlutterMetalRenderer*>(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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -364,9 +364,8 @@ - (BOOL)isDispatchingKeyEvent:(NSEvent*)event {

- (void)loadView {
FlutterView* flutterView;
FlutterMetalRenderer* metalRenderer = reinterpret_cast<FlutterMetalRenderer*>(_engine.renderer);
id<MTLDevice> device = metalRenderer.device;
id<MTLCommandQueue> commandQueue = metalRenderer.commandQueue;
id<MTLDevice> device = _engine.renderer.device;
id<MTLCommandQueue> commandQueue = _engine.renderer.commandQueue;
if (!device || !commandQueue) {
NSLog(@"Unable to create FlutterView; no MTLDevice or MTLCommandQueue available.");
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down