Avoid scheduling a forced frame when there is no child to the renderView (#102556)

This commit is contained in:
Dan Field 2022-04-26 08:44:09 -07:00 committed by GitHub
parent bc7d3bbc65
commit 34d84209cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 1 deletions

View file

@ -235,10 +235,13 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
///
/// See [dart:ui.PlatformDispatcher.onMetricsChanged].
@protected
@visibleForTesting
void handleMetricsChanged() {
assert(renderView != null);
renderView.configuration = createViewConfiguration();
scheduleForcedFrame();
if (renderView.child != null) {
scheduleForcedFrame();
}
}
/// Called when the platform text scale factor changes.

View file

@ -0,0 +1,22 @@
// Copyright 2014 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 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
test('handleMetricsChanged does not scheduleForcedFrame unless there is a child to the renderView', () async {
expect(SchedulerBinding.instance.hasScheduledFrame, false);
RendererBinding.instance.handleMetricsChanged();
expect(SchedulerBinding.instance.hasScheduledFrame, false);
RendererBinding.instance.renderView.child = RenderLimitedBox();
RendererBinding.instance.handleMetricsChanged();
expect(SchedulerBinding.instance.hasScheduledFrame, true);
});
}