Commit 898b3ce8 authored by Eric Seidel's avatar Eric Seidel

Add a service extension for toggling the PerformanceOverlay

This only works for apps which use WidgetsApp.  Apps which don't
(like the game) could presumably read the static themselves
off of WidgetsApp.

@devoncarew @hixie
parent 986b0174
...@@ -92,6 +92,8 @@ class WidgetsApp extends StatefulWidget { ...@@ -92,6 +92,8 @@ class WidgetsApp extends StatefulWidget {
/// representative of what will happen in release mode. /// representative of what will happen in release mode.
final bool debugShowCheckedModeBanner; final bool debugShowCheckedModeBanner;
static bool showPerformanceOverlayOverride = false;
@override @override
WidgetsAppState<WidgetsApp> createState() => new WidgetsAppState<WidgetsApp>(); WidgetsAppState<WidgetsApp> createState() => new WidgetsAppState<WidgetsApp>();
} }
...@@ -186,7 +188,7 @@ class WidgetsAppState<T extends WidgetsApp> extends State<T> implements BindingO ...@@ -186,7 +188,7 @@ class WidgetsAppState<T extends WidgetsApp> extends State<T> implements BindingO
child: result child: result
); );
} }
if (config.showPerformanceOverlay) { if (config.showPerformanceOverlay || WidgetsApp.showPerformanceOverlayOverride) {
result = new Stack( result = new Stack(
children: <Widget>[ children: <Widget>[
result, result,
......
...@@ -10,6 +10,7 @@ import 'package:flutter/rendering.dart'; ...@@ -10,6 +10,7 @@ import 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'app.dart';
import 'framework.dart'; import 'framework.dart';
export 'dart:ui' show AppLifecycleState, Locale; export 'dart:ui' show AppLifecycleState, Locale;
...@@ -52,6 +53,22 @@ class WidgetFlutterBinding extends BindingBase with Scheduler, Gesturer, Service ...@@ -52,6 +53,22 @@ class WidgetFlutterBinding extends BindingBase with Scheduler, Gesturer, Service
ui.window.onAppLifecycleStateChanged = handleAppLifecycleStateChanged; ui.window.onAppLifecycleStateChanged = handleAppLifecycleStateChanged;
} }
@override
void initServiceExtensions() {
super.initServiceExtensions();
registerBoolServiceExtension(
name: 'showPerformanceOverlay',
getter: () => WidgetsApp.showPerformanceOverlayOverride,
setter: (bool value) {
if (WidgetsApp.showPerformanceOverlayOverride == value)
return;
WidgetsApp.showPerformanceOverlayOverride = value;
buildOwner.reassemble(renderViewElement);
}
);
}
/// The one static instance of this class. /// The one static instance of this class.
/// ///
/// Only valid after the WidgetFlutterBinding constructor) has been called. /// Only valid after the WidgetFlutterBinding constructor) has been called.
...@@ -113,13 +130,13 @@ class WidgetFlutterBinding extends BindingBase with Scheduler, Gesturer, Service ...@@ -113,13 +130,13 @@ class WidgetFlutterBinding extends BindingBase with Scheduler, Gesturer, Service
container: renderView, container: renderView,
debugShortDescription: '[root]', debugShortDescription: '[root]',
child: app child: app
).attachToRenderTree(buildOwner, _renderViewElement); ).attachToRenderTree(buildOwner, renderViewElement);
beginFrame(); beginFrame();
} }
@override @override
void reassembleApplication() { void reassembleApplication() {
buildOwner.reassemble(_renderViewElement); buildOwner.reassemble(renderViewElement);
super.reassembleApplication(); super.reassembleApplication();
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment