@@ -2649,7 +2649,8 @@ - (void)testFlutterClippingMaskViewPoolReuseViewsAfterRecycle {
26492649 [[[FlutterClippingMaskViewPool alloc ] initWithCapacity: 2 ] autorelease ];
26502650 FlutterClippingMaskView* view1 = [pool getMaskViewWithFrame: CGRectZero];
26512651 FlutterClippingMaskView* view2 = [pool getMaskViewWithFrame: CGRectZero];
2652- [pool recycleMaskViews ];
2652+ [pool insertViewToPool: view1];
2653+ [pool insertViewToPool: view2];
26532654 CGRect newRect = CGRectMake (0 , 0 , 10 , 10 );
26542655 FlutterClippingMaskView* view3 = [pool getMaskViewWithFrame: newRect];
26552656 FlutterClippingMaskView* view4 = [pool getMaskViewWithFrame: newRect];
@@ -2727,17 +2728,17 @@ - (void)testClipMaskViewIsReused {
27272728 auto embeddedViewParams1 = std::make_unique<flutter::EmbeddedViewParams>(
27282729 screenScaleMatrix, SkSize::Make (10 , 10 ), stack1);
27292730
2730- flutter::MutatorsStack stack2;
2731- auto embeddedViewParams2 = std::make_unique<flutter::EmbeddedViewParams>(
2732- screenScaleMatrix, SkSize::Make (10 , 10 ), stack2);
2733-
27342731 flutterPlatformViewsController->PrerollCompositeEmbeddedView (1 , std::move (embeddedViewParams1));
27352732 flutterPlatformViewsController->CompositeEmbeddedView (1 );
27362733 UIView* childClippingView1 = gMockPlatformView .superview .superview ;
27372734 UIView* maskView1 = childClippingView1.maskView ;
27382735 XCTAssertNotNil (maskView1);
27392736
27402737 // Composite a new frame.
2738+ flutterPlatformViewsController->BeginFrame (SkISize::Make (100 , 100 ));
2739+ flutter::MutatorsStack stack2;
2740+ auto embeddedViewParams2 = std::make_unique<flutter::EmbeddedViewParams>(
2741+ screenScaleMatrix, SkSize::Make (10 , 10 ), stack2);
27412742 auto embeddedViewParams3 = std::make_unique<flutter::EmbeddedViewParams>(
27422743 screenScaleMatrix, SkSize::Make (10 , 10 ), stack2);
27432744 flutterPlatformViewsController->PrerollCompositeEmbeddedView (1 , std::move (embeddedViewParams3));
@@ -2763,6 +2764,77 @@ - (void)testClipMaskViewIsReused {
27632764 XCTAssertNil (childClippingView1.maskView );
27642765}
27652766
2767+ - (void )testDifferentClipMaskViewIsUsedForEachView {
2768+ flutter::FlutterPlatformViewsTestMockPlatformViewDelegate mock_delegate;
2769+ auto thread_task_runner = CreateNewThread (" FlutterPlatformViewsTest" );
2770+ flutter::TaskRunners runners (/* label=*/ self.name .UTF8String ,
2771+ /* platform=*/ thread_task_runner,
2772+ /* raster=*/ thread_task_runner,
2773+ /* ui=*/ thread_task_runner,
2774+ /* io=*/ thread_task_runner);
2775+ auto flutterPlatformViewsController = std::make_shared<flutter::FlutterPlatformViewsController>();
2776+ auto platform_view = std::make_unique<flutter::PlatformViewIOS>(
2777+ /* delegate=*/ mock_delegate,
2778+ /* rendering_api=*/ flutter::IOSRenderingAPI::kSoftware ,
2779+ /* platform_views_controller=*/ flutterPlatformViewsController,
2780+ /* task_runners=*/ runners);
2781+
2782+ FlutterPlatformViewsTestMockFlutterPlatformFactory* factory =
2783+ [[FlutterPlatformViewsTestMockFlutterPlatformFactory new ] autorelease ];
2784+ flutterPlatformViewsController->RegisterViewFactory (
2785+ factory, @" MockFlutterPlatformView" ,
2786+ FlutterPlatformViewGestureRecognizersBlockingPolicyEager);
2787+ FlutterResult result = ^(id result) {
2788+ };
2789+
2790+ flutterPlatformViewsController->OnMethodCall (
2791+ [FlutterMethodCall
2792+ methodCallWithMethodName: @" create"
2793+ arguments: @{@" id" : @1 , @" viewType" : @" MockFlutterPlatformView" }],
2794+ result);
2795+ UIView* view1 = gMockPlatformView ;
2796+
2797+ // This overwrites `gMockPlatformView` to another view.
2798+ flutterPlatformViewsController->OnMethodCall (
2799+ [FlutterMethodCall
2800+ methodCallWithMethodName: @" create"
2801+ arguments: @{@" id" : @2 , @" viewType" : @" MockFlutterPlatformView" }],
2802+ result);
2803+ UIView* view2 = gMockPlatformView ;
2804+
2805+ XCTAssertNotNil (gMockPlatformView );
2806+ UIView* mockFlutterView = [[[UIView alloc ] initWithFrame: CGRectMake (0 , 0 , 10 , 10 )] autorelease ];
2807+ flutterPlatformViewsController->SetFlutterView (mockFlutterView);
2808+ // Create embedded view params
2809+ flutter::MutatorsStack stack1;
2810+ // Layer tree always pushes a screen scale factor to the stack
2811+ SkMatrix screenScaleMatrix =
2812+ SkMatrix::Scale ([UIScreen mainScreen ].scale , [UIScreen mainScreen ].scale );
2813+ stack1.PushTransform (screenScaleMatrix);
2814+ // Push a clip rect
2815+ SkRect rect = SkRect::MakeXYWH (2 , 2 , 3 , 3 );
2816+ stack1.PushClipRect (rect);
2817+
2818+ auto embeddedViewParams1 = std::make_unique<flutter::EmbeddedViewParams>(
2819+ screenScaleMatrix, SkSize::Make (10 , 10 ), stack1);
2820+
2821+ flutter::MutatorsStack stack2;
2822+ stack2.PushClipRect (rect);
2823+ auto embeddedViewParams2 = std::make_unique<flutter::EmbeddedViewParams>(
2824+ screenScaleMatrix, SkSize::Make (10 , 10 ), stack2);
2825+
2826+ flutterPlatformViewsController->PrerollCompositeEmbeddedView (1 , std::move (embeddedViewParams1));
2827+ flutterPlatformViewsController->CompositeEmbeddedView (1 );
2828+ UIView* childClippingView1 = view1.superview .superview ;
2829+
2830+ flutterPlatformViewsController->PrerollCompositeEmbeddedView (2 , std::move (embeddedViewParams2));
2831+ flutterPlatformViewsController->CompositeEmbeddedView (2 );
2832+ UIView* childClippingView2 = view2.superview .superview ;
2833+ UIView* maskView1 = childClippingView1.maskView ;
2834+ UIView* maskView2 = childClippingView2.maskView ;
2835+ XCTAssertNotEqual (maskView1, maskView2);
2836+ }
2837+
27662838// Return true if a correct visual effect view is found. It also implies all the validation in this
27672839// method passes.
27682840//
0 commit comments