Skip to content

Commit

Permalink
Add skeleton for enabling the Performance screen for web apps (#6096)
Browse files Browse the repository at this point in the history
  • Loading branch information
kenzieschmoll authored Jul 26, 2023
1 parent 2398162 commit 048989f
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ class PerformanceController extends DisposableController
timelineEventsController,
rasterStatsController,
];

if (serviceManager.connectedApp?.isDartWebAppNow ?? false) {
// Do not perform initialization for web apps.
return;
}

// See https://github.com/dart-lang/linter/issues/3801
// ignore: discarded_futures
unawaited(_init());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import '../../shared/analytics/analytics.dart' as ga;
import '../../shared/banner_messages.dart';
import '../../shared/common_widgets.dart';
import '../../shared/feature_flags.dart';
import '../../shared/globals.dart';
import '../../shared/primitives/auto_dispose.dart';
import '../../shared/screen.dart';
Expand All @@ -25,7 +26,6 @@ class PerformanceScreen extends Screen {
PerformanceScreen()
: super.conditional(
id: id,
requiresDartVm: true,
worksOffline: true,
title: ScreenMetaData.performance.title,
icon: ScreenMetaData.performance.icon,
Expand All @@ -37,7 +37,13 @@ class PerformanceScreen extends Screen {
String get docPageId => id;

@override
Widget build(BuildContext context) => const PerformanceScreenBody();
Widget build(BuildContext context) {
if (FeatureFlags.performancePageForWeb &&
(serviceManager.connectedApp?.isDartWebAppNow ?? false)) {
return const WebPerformanceScreenBody();
}
return const PerformanceScreenBody();
}
}

class PerformanceScreenBody extends StatefulWidget {
Expand Down Expand Up @@ -119,3 +125,14 @@ class PerformanceScreenBodyState extends State<PerformanceScreenBody>
);
}
}

class WebPerformanceScreenBody extends StatelessWidget {
const WebPerformanceScreenBody({super.key});

@override
Widget build(BuildContext context) {
return const Center(
child: Text('TODO: add instructions for using Chrome DevTools'),
);
}
}
7 changes: 7 additions & 0 deletions packages/devtools_app/lib/src/shared/feature_flags.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ abstract class FeatureFlags {
/// https://github.com/flutter/devtools/issues/1632
static bool devToolsExtensions = enableExperiments;

// TODO(elliottbrooks): remove this flag once you add instructions to the
// web performance page body.
/// Flag to enable the Performance page for web.
///
/// https://github.com/flutter/devtools/issues/6095
static bool get performancePageForWeb => enableExperiments;

/// Stores a map of all the feature flags for debugging purposes.
///
/// When adding a new flag, you are responsible for adding it to this map as
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'package:devtools_app/src/screens/performance/panes/flutter_frames/flutte
import 'package:devtools_app/src/screens/performance/panes/timeline_events/legacy/event_details.dart';
import 'package:devtools_app/src/screens/performance/panes/timeline_events/legacy/timeline_flame_chart.dart';
import 'package:devtools_app/src/screens/performance/tabbed_performance_view.dart';
import 'package:devtools_app/src/shared/feature_flags.dart';
import 'package:devtools_shared/devtools_test_utils.dart';
import 'package:devtools_test/devtools_test.dart';
import 'package:flutter/material.dart';
Expand Down Expand Up @@ -70,7 +71,9 @@ void main() {
}) async {
await tester.pumpWidget(
wrapWithControllers(
const PerformanceScreenBody(),
Builder(
builder: PerformanceScreen().build,
),
performance: controller,
),
);
Expand Down Expand Up @@ -111,6 +114,8 @@ void main() {
await tester.runAsync(() async {
await pumpPerformanceScreen(tester, runAsync: true);
await tester.pumpAndSettle();
expect(find.byType(PerformanceScreenBody), findsOneWidget);
expect(find.byType(WebPerformanceScreenBody), findsNothing);
expect(find.byType(PerformanceControls), findsOneWidget);
expect(find.byType(FlutterFramesChart), findsOneWidget);
expect(find.byType(TabbedPerformanceView), findsOneWidget);
Expand All @@ -122,6 +127,32 @@ void main() {
},
);

testWidgetsWithWindowSize(
'builds initial content for web app',
windowSize,
(WidgetTester tester) async {
setEnableExperiments();
mockConnectedApp(
fakeServiceManager.connectedApp!,
isFlutterApp: false,
isProfileBuild: false,
isWebApp: true,
);
await tester.pumpWidget(
wrap(
Builder(builder: PerformanceScreen().build),
),
);
await tester.pumpAndSettle();
expect(find.byType(PerformanceScreenBody), findsNothing);
expect(find.byType(WebPerformanceScreenBody), findsOneWidget);
expect(
find.text('TODO: add instructions for using Chrome DevTools'),
findsOneWidget,
);
},
);

testWidgetsWithWindowSize(
'builds initial content for non-flutter app',
windowSize,
Expand Down
4 changes: 2 additions & 2 deletions packages/devtools_app/test/shared/visible_screens_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ void main() {
HomeScreen,
// InspectorScreen,
// LegacyPerformanceScreen,
// PerformanceScreen,
PerformanceScreen,
// ProfilerScreen,
// MemoryScreen,
DebuggerScreen,
Expand Down Expand Up @@ -161,7 +161,7 @@ void main() {
HomeScreen,
InspectorScreen,
// LegacyPerformanceScreen,
// PerformanceScreen,
PerformanceScreen,
// ProfilerScreen,
// MemoryScreen,
DebuggerScreen,
Expand Down

0 comments on commit 048989f

Please sign in to comment.