Skip to content

Commit 11727b4

Browse files
committed
[macOS] Merge FlutterRenderer and implementation
Previously FlutterRenderer was a protocol with two implementing classes: FlutterOpenGLRenderer and FlutterMetalRenderer. Now that we've eliminated the macOS OpenGL backend, this abstraction no longer makes sense. This replaces the existing FlutterRenderer protocol with a concrete implementation class, consisting of the Metal implementation. Issue: flutter/flutter#108304 Issue: flutter/flutter#114445
1 parent fa7e196 commit 11727b4

10 files changed

+48
-70
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2643,9 +2643,6 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuP
26432643
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPlugin.mm
26442644
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPluginTest.mm
26452645
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPlugin_Internal.h
2646-
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h
2647-
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.mm
2648-
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRendererTest.mm
26492646
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalSurfaceManagerTest.mm
26502647
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMouseCursorPlugin.h
26512648
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMouseCursorPlugin.mm
@@ -2656,6 +2653,8 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatf
26562653
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatformViewController.mm
26572654
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatformViewControllerTest.mm
26582655
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h
2656+
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm
2657+
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterRendererTest.mm
26592658
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterResizableBackingStoreProvider.h
26602659
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterResizableBackingStoreProvider.mm
26612660
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterResizeSynchronizer.h

shell/platform/darwin/macos/BUILD.gn

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,14 @@ source_set("flutter_framework_source") {
8282
"framework/Source/FlutterMenuPlugin.h",
8383
"framework/Source/FlutterMenuPlugin.mm",
8484
"framework/Source/FlutterMenuPlugin_Internal.h",
85-
"framework/Source/FlutterMetalRenderer.h",
86-
"framework/Source/FlutterMetalRenderer.mm",
8785
"framework/Source/FlutterMouseCursorPlugin.h",
8886
"framework/Source/FlutterMouseCursorPlugin.mm",
8987
"framework/Source/FlutterPlatformNodeDelegateMac.h",
9088
"framework/Source/FlutterPlatformNodeDelegateMac.mm",
9189
"framework/Source/FlutterPlatformViewController.h",
9290
"framework/Source/FlutterPlatformViewController.mm",
9391
"framework/Source/FlutterRenderer.h",
92+
"framework/Source/FlutterRenderer.mm",
9493
"framework/Source/FlutterResizableBackingStoreProvider.h",
9594
"framework/Source/FlutterResizableBackingStoreProvider.mm",
9695
"framework/Source/FlutterResizeSynchronizer.h",
@@ -177,10 +176,10 @@ executable("flutter_desktop_darwin_unittests") {
177176
"framework/Source/FlutterEngineTestUtils.mm",
178177
"framework/Source/FlutterKeyboardManagerUnittests.mm",
179178
"framework/Source/FlutterMenuPluginTest.mm",
180-
"framework/Source/FlutterMetalRendererTest.mm",
181179
"framework/Source/FlutterMetalSurfaceManagerTest.mm",
182180
"framework/Source/FlutterPlatformNodeDelegateMacTest.mm",
183181
"framework/Source/FlutterPlatformViewControllerTest.mm",
182+
"framework/Source/FlutterRendererTest.mm",
184183
"framework/Source/FlutterTextInputPluginTest.mm",
185184
"framework/Source/FlutterTextInputSemanticsObjectTest.mm",
186185
"framework/Source/FlutterViewControllerTest.mm",

shell/platform/darwin/macos/framework/Source/FlutterEngine.mm

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h"
1313
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h"
1414
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMenuPlugin.h"
15-
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h"
1615
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMouseCursorPlugin.h"
1716
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterPlatformViewController.h"
17+
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h"
1818
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewController_Internal.h"
1919
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewEngineProvider.h"
2020
#include "flutter/shell/platform/embedder/embedder.h"
@@ -246,7 +246,7 @@ - (instancetype)initWithName:(NSString*)labelPrefix
246246
_embedderAPI.struct_size = sizeof(FlutterEngineProcTable);
247247
FlutterEngineGetProcAddresses(&_embedderAPI);
248248

249-
_renderer = [[FlutterMetalRenderer alloc] initWithFlutterEngine:self];
249+
_renderer = [[FlutterRenderer alloc] initWithFlutterEngine:self];
250250

251251
NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];
252252
[notificationCenter addObserver:self
@@ -422,9 +422,8 @@ - (FlutterCompositor*)createFlutterCompositor {
422422

423423
__weak FlutterEngine* weakSelf = self;
424424

425-
FlutterMetalRenderer* metalRenderer = reinterpret_cast<FlutterMetalRenderer*>(_renderer);
426425
_macOSCompositor = std::make_unique<flutter::FlutterCompositor>(
427-
_viewProvider, _platformViewController, metalRenderer.device);
426+
_viewProvider, _platformViewController, _renderer.device);
428427
_macOSCompositor->SetPresentCallback([weakSelf](bool has_flutter_content) {
429428
if (has_flutter_content) {
430429
return [weakSelf.renderer present] == YES;

shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* Provides the renderer config needed to initialize the engine and also handles external
2525
* texture management.
2626
*/
27-
@property(nonatomic, readonly, nullable) id<FlutterRenderer> renderer;
27+
@property(nonatomic, readonly, nullable) FlutterRenderer* renderer;
2828

2929
/**
3030
* Function pointers for interacting with the embedder.h API.

shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h

Lines changed: 0 additions & 38 deletions
This file was deleted.

shell/platform/darwin/macos/framework/Source/FlutterRenderer.h

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,18 @@
1212
/**
1313
* Rendering backend agnostic FlutterRendererConfig provider to be used by the embedder API.
1414
*/
15-
@protocol FlutterRenderer <FlutterTextureRegistry, FlutterTextureRegistrarDelegate>
15+
@interface FlutterRenderer
16+
: FlutterTextureRegistrar <FlutterTextureRegistry, FlutterTextureRegistrarDelegate>
17+
18+
/**
19+
* Interface to the system GPU. Used to issue all the rendering commands.
20+
*/
21+
@property(nonatomic, readonly, nonnull) id<MTLDevice> device;
22+
23+
/**
24+
* Used to get the command buffers for the MTLDevice to render to.
25+
*/
26+
@property(nonatomic, readonly, nonnull) id<MTLCommandQueue> commandQueue;
1627

1728
/**
1829
* Intializes the renderer with the given FlutterEngine.
@@ -39,4 +50,15 @@
3950
*/
4051
- (void)presentWithoutContent;
4152

53+
/**
54+
* Creates a Metal texture for the given size.
55+
*/
56+
- (FlutterMetalTexture)createTextureForSize:(CGSize)size;
57+
58+
/**
59+
* Populates the texture registry with the provided metalTexture.
60+
*/
61+
- (BOOL)populateTextureWithIdentifier:(int64_t)textureID
62+
metalTexture:(nonnull FlutterMetalExternalTexture*)metalTexture;
63+
4264
@end

shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.mm renamed to shell/platform/darwin/macos/framework/Source/FlutterRenderer.mm

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
21
// Copyright 2013 The Flutter Authors. All rights reserved.
32
// Use of this source code is governed by a BSD-style license that can be
43
// found in the LICENSE file.
54

6-
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h"
5+
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h"
76

87
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h"
98
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterExternalTextureMetal.h"
@@ -15,8 +14,7 @@
1514
static FlutterMetalTexture OnGetNextDrawable(FlutterEngine* engine,
1615
const FlutterFrameInfo* frameInfo) {
1716
CGSize size = CGSizeMake(frameInfo->size.width, frameInfo->size.height);
18-
FlutterMetalRenderer* metalRenderer = reinterpret_cast<FlutterMetalRenderer*>(engine.renderer);
19-
return [metalRenderer createTextureForSize:size];
17+
return [engine.renderer createTextureForSize:size];
2018
}
2119

2220
static bool OnPresentDrawable(FlutterEngine* engine, const FlutterMetalTexture* texture) {
@@ -28,13 +26,13 @@ static bool OnAcquireExternalTexture(FlutterEngine* engine,
2826
size_t width,
2927
size_t height,
3028
FlutterMetalExternalTexture* metalTexture) {
31-
FlutterMetalRenderer* metalRenderer = reinterpret_cast<FlutterMetalRenderer*>(engine.renderer);
32-
return [metalRenderer populateTextureWithIdentifier:textureIdentifier metalTexture:metalTexture];
29+
return [engine.renderer populateTextureWithIdentifier:textureIdentifier
30+
metalTexture:metalTexture];
3331
}
3432

35-
#pragma mark - FlutterMetalRenderer implementation
33+
#pragma mark - FlutterRenderer implementation
3634

37-
@implementation FlutterMetalRenderer {
35+
@implementation FlutterRenderer {
3836
FlutterView* _flutterView;
3937

4038
FlutterDarwinContextMetalSkia* _darwinMetalContext;

shell/platform/darwin/macos/framework/Source/FlutterMetalRendererTest.mm renamed to shell/platform/darwin/macos/framework/Source/FlutterRendererTest.mm

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h"
88
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h"
99
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h"
10-
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h"
10+
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h"
1111
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterView.h"
1212
#include "flutter/shell/platform/embedder/embedder.h"
1313
#include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.h"
@@ -26,18 +26,18 @@
2626
}
2727
} // namespace
2828

29-
TEST(FlutterMetalRenderer, PresentDelegatesToFlutterView) {
29+
TEST(FlutterRenderer, PresentDelegatesToFlutterView) {
3030
FlutterEngine* engine = CreateTestEngine();
31-
FlutterMetalRenderer* renderer = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engine];
31+
FlutterRenderer* renderer = [[FlutterRenderer alloc] initWithFlutterEngine:engine];
3232
id mockFlutterView = OCMClassMock([FlutterView class]);
3333
[(FlutterView*)[mockFlutterView expect] present];
3434
[renderer setFlutterView:mockFlutterView];
3535
[renderer present];
3636
}
3737

38-
TEST(FlutterMetalRenderer, TextureReturnedByFlutterView) {
38+
TEST(FlutterRenderer, TextureReturnedByFlutterView) {
3939
FlutterEngine* engine = CreateTestEngine();
40-
FlutterMetalRenderer* renderer = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engine];
40+
FlutterRenderer* renderer = [[FlutterRenderer alloc] initWithFlutterEngine:engine];
4141
id mockFlutterView = OCMClassMock([FlutterView class]);
4242
FlutterFrameInfo frameInfo;
4343
frameInfo.struct_size = sizeof(FlutterFrameInfo);

shell/platform/darwin/macos/framework/Source/FlutterViewController.mm

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h"
1515
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyPrimaryResponder.h"
1616
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyboardManager.h"
17-
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h"
17+
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h"
1818
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputSemanticsObject.h"
1919
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterView.h"
2020
#import "flutter/shell/platform/embedder/embedder.h"
@@ -364,9 +364,8 @@ - (BOOL)isDispatchingKeyEvent:(NSEvent*)event {
364364

365365
- (void)loadView {
366366
FlutterView* flutterView;
367-
FlutterMetalRenderer* metalRenderer = reinterpret_cast<FlutterMetalRenderer*>(_engine.renderer);
368-
id<MTLDevice> device = metalRenderer.device;
369-
id<MTLCommandQueue> commandQueue = metalRenderer.commandQueue;
367+
id<MTLDevice> device = _engine.renderer.device;
368+
id<MTLCommandQueue> commandQueue = _engine.renderer.commandQueue;
370369
if (!device || !commandQueue) {
371370
NSLog(@"Unable to create FlutterView; no MTLDevice or MTLCommandQueue available.");
372371
return;

shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h"
1212
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h"
1313
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h"
14-
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h"
14+
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterRenderer.h"
1515
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTestUtils.h"
1616
#import "flutter/testing/testing.h"
1717

@@ -269,7 +269,7 @@ - (bool)testKeyEventsArePropagatedIfNotHandled {
269269
- (bool)testFlutterViewIsConfigured {
270270
id engineMock = OCMClassMock([FlutterEngine class]);
271271

272-
id renderer_ = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engineMock];
272+
FlutterRenderer* renderer_ = [[FlutterRenderer alloc] initWithFlutterEngine:engineMock];
273273
OCMStub([engineMock renderer]).andReturn(renderer_);
274274

275275
FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engineMock
@@ -460,7 +460,7 @@ + (void)respondFalseForSendEvent:(const FlutterKeyEvent&)event
460460
- (bool)testTrackpadGesturesAreSentToFramework {
461461
id engineMock = OCMClassMock([FlutterEngine class]);
462462
// Need to return a real renderer to allow view controller to load.
463-
id renderer_ = [[FlutterMetalRenderer alloc] initWithFlutterEngine:engineMock];
463+
FlutterRenderer* renderer_ = [[FlutterRenderer alloc] initWithFlutterEngine:engineMock];
464464
OCMStub([engineMock renderer]).andReturn(renderer_);
465465
__block bool called = false;
466466
__block FlutterPointerEvent last_event;

0 commit comments

Comments
 (0)