diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 9a6d66506bf68..7ed7a51cbc2db 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -4669,7 +4669,6 @@ ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterCha ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterChannelKeyResponderTest.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositor.mm + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositorTest.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEmbedderExternalTextureTest.mm + ../../../flutter/LICENSE @@ -7473,7 +7472,6 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterChann FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterChannelKeyResponderTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositor.mm -FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositorTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEmbedderExternalTextureTest.mm diff --git a/shell/platform/darwin/macos/BUILD.gn b/shell/platform/darwin/macos/BUILD.gn index 56400d2a5b0d7..ea29942f406f8 100644 --- a/shell/platform/darwin/macos/BUILD.gn +++ b/shell/platform/darwin/macos/BUILD.gn @@ -173,7 +173,6 @@ executable("flutter_desktop_darwin_unittests") { "framework/Source/FlutterAppDelegateTest.mm", "framework/Source/FlutterAppLifecycleDelegateTest.mm", "framework/Source/FlutterChannelKeyResponderTest.mm", - "framework/Source/FlutterCompositorTest.mm", "framework/Source/FlutterEmbedderExternalTextureTest.mm", "framework/Source/FlutterEmbedderKeyResponderTest.mm", "framework/Source/FlutterEngineTest.mm", diff --git a/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h b/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h index ce22bb9f54916..555add5803a81 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h @@ -20,6 +20,8 @@ namespace flutter { // FlutterCompositor creates and manages the backing stores used for // rendering Flutter content and presents Flutter content and Platform views. // Platform views are not yet supported. +// +// TODO(cbracken): refactor for testability. https://github.com/flutter/flutter/issues/137648 class FlutterCompositor { public: // Create a FlutterCompositor with a view provider. diff --git a/shell/platform/darwin/macos/framework/Source/FlutterCompositorTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterCompositorTest.mm deleted file mode 100644 index 081c3e22e86eb..0000000000000 --- a/shell/platform/darwin/macos/framework/Source/FlutterCompositorTest.mm +++ /dev/null @@ -1,139 +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 - -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterCompositor.h" -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterView.h" -#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewProvider.h" -#import "flutter/testing/testing.h" - -@interface FlutterViewMockProvider : NSObject { - FlutterView* _implicitView; -} -/** - * Create a FlutterViewMockProvider with the provided view as the implicit view. - */ -- (nonnull instancetype)initWithImplicitView:(nonnull FlutterView*)view; -@end - -@implementation FlutterViewMockProvider - -- (nonnull instancetype)initWithImplicitView:(nonnull FlutterView*)view { - self = [super init]; - if (self != nil) { - _implicitView = view; - } - return self; -} - -- (nullable FlutterView*)viewForId:(FlutterViewId)viewId { - if (viewId == kFlutterImplicitViewId) { - return _implicitView; - } - return nil; -} - -@end - -namespace flutter::testing { -namespace { - -typedef void (^PresentBlock)(NSArray*); - -id MockViewProvider(PresentBlock onPresent = nil) { - FlutterView* viewMock = OCMClassMock([FlutterView class]); - FlutterSurfaceManager* surfaceManagerMock = OCMClassMock([FlutterSurfaceManager class]); - FlutterSurface* surfaceMock = OCMClassMock([FlutterSurface class]); - __block id textureMock = OCMProtocolMock(@protocol(MTLTexture)); - - OCMStub([viewMock surfaceManager]).andReturn(surfaceManagerMock); - - OCMStub([surfaceManagerMock surfaceForSize:CGSize{}]) - .ignoringNonObjectArgs() - .andDo(^(NSInvocation* invocation) { - CGSize size; - [invocation getArgument:&size atIndex:2]; - OCMStub([textureMock width]).andReturn(size.width); - OCMStub([textureMock height]).andReturn(size.height); - }) - .andReturn(surfaceMock); - - FlutterMetalTexture texture = { - .struct_size = sizeof(FlutterMetalTexture), - .texture_id = 1, - .texture = (__bridge void*)textureMock, - .user_data = (__bridge void*)surfaceMock, - .destruction_callback = nullptr, - }; - - OCMStub([surfaceManagerMock present:[OCMArg any] notify:[OCMArg any]]) - .andDo(^(NSInvocation* invocation) { - NSArray* info; - [invocation getArgument:&info atIndex:2]; - if (onPresent != nil) { - onPresent(info); - } - }); - - OCMStub([surfaceMock asFlutterMetalTexture]).andReturn(texture); - - return [[FlutterViewMockProvider alloc] initWithImplicitView:viewMock]; -} -} // namespace - -TEST(FlutterCompositorTest, TestCreate) { - std::unique_ptr macos_compositor = - std::make_unique(MockViewProvider(), - /*platform_view_controller*/ nullptr); - - FlutterBackingStore backing_store; - FlutterBackingStoreConfig config; - config.struct_size = sizeof(FlutterBackingStoreConfig); - config.size.width = 800; - config.size.height = 600; - macos_compositor->CreateBackingStore(&config, &backing_store); - - ASSERT_EQ(backing_store.type, kFlutterBackingStoreTypeMetal); - ASSERT_NE(backing_store.metal.texture.texture, nil); - id texture = (__bridge id)backing_store.metal.texture.texture; - ASSERT_EQ(texture.width, 800ul); - ASSERT_EQ(texture.height, 600ul); -} - -TEST(FlutterCompositorTest, TestPresent) { - __block NSArray* presentedSurfaces = nil; - - auto onPresent = ^(NSArray* info) { - presentedSurfaces = info; - }; - - std::unique_ptr macos_compositor = - std::make_unique(MockViewProvider(onPresent), - /*platform_view_controller*/ nullptr); - - FlutterBackingStore backing_store; - FlutterBackingStoreConfig config; - config.struct_size = sizeof(FlutterBackingStoreConfig); - config.size.width = 800; - config.size.height = 600; - macos_compositor->CreateBackingStore(&config, &backing_store); - - FlutterLayer layers[] = {{ - .struct_size = sizeof(FlutterLayer), - .type = kFlutterLayerContentTypeBackingStore, - .backing_store = &backing_store, - .offset = {0, 0}, - .size = {800, 600}, - }}; - const FlutterLayer* layers_ptr = layers; - - macos_compositor->Present(kFlutterImplicitViewId, &layers_ptr, 1); - - ASSERT_EQ(presentedSurfaces.count, 1ul); -} - -} // namespace flutter::testing