From 3af8424efc1a7d6020a916c8cee260b8e5a0adb6 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Sun, 6 Nov 2022 10:08:12 -0800 Subject: [PATCH 1/3] Update diff_pane.dart --- .../screens/memory/panes/diff/diff_pane.dart | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/diff_pane.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/diff_pane.dart index e5ddf56ada8..76eafdeb2f9 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/diff/diff_pane.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/diff_pane.dart @@ -68,23 +68,35 @@ class _SnapshotItemContent extends StatelessWidget { ); } - return Column( - children: [ - const SizedBox(height: denseRowSpacing), - SnapshotControlPane(controller: controller), - const SizedBox(height: denseRowSpacing), - Expanded( - child: SnapshotView( - controller: controller, - ), - ), - ], - ); + return SnapshotInstanceItemPane(controller: controller); }, ); } } +@visibleForTesting +class SnapshotInstanceItemPane extends StatelessWidget { + const SnapshotInstanceItemPane({super.key, required this.controller}); + + final DiffPaneController controller; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + const SizedBox(height: denseRowSpacing), + SnapshotControlPane(controller: controller), + const SizedBox(height: denseRowSpacing), + Expanded( + child: SnapshotView( + controller: controller, + ), + ), + ], + ); + } +} + /// `\v` adds vertical space const _snapshotDocumentation = ''' Take a **heap snapshot** to view current memory allocation: From 2ffecbfef2fe566ff9b3da4a00fc0603fe62780d Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Sun, 6 Nov 2022 10:08:59 -0800 Subject: [PATCH 2/3] Create diff_snapshot.dart --- .../test/scenes/memory/diff_snapshot.dart | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 packages/devtools_app/test/scenes/memory/diff_snapshot.dart diff --git a/packages/devtools_app/test/scenes/memory/diff_snapshot.dart b/packages/devtools_app/test/scenes/memory/diff_snapshot.dart new file mode 100644 index 00000000000..203a1d7772b --- /dev/null +++ b/packages/devtools_app/test/scenes/memory/diff_snapshot.dart @@ -0,0 +1,86 @@ +// Copyright 2022 The Chromium 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:devtools_app/src/config_specific/ide_theme/ide_theme.dart'; +import 'package:devtools_app/src/config_specific/import_export/import_export.dart'; +import 'package:devtools_app/src/primitives/feature_flags.dart'; +import 'package:devtools_app/src/screens/memory/memory_controller.dart'; +import 'package:devtools_app/src/screens/memory/panes/diff/controller/diff_pane_controller.dart'; +import 'package:devtools_app/src/screens/memory/panes/diff/diff_pane.dart'; +import 'package:devtools_app/src/screens/memory/shared/heap/model.dart'; +import 'package:devtools_app/src/service/service_manager.dart'; +import 'package:devtools_app/src/shared/globals.dart'; +import 'package:devtools_app/src/shared/notifications.dart'; +import 'package:devtools_test/devtools_test.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:stager/stager.dart'; + +import '../../test_data/memory/heap/heap_data.dart'; + +/// To run: +/// flutter run -t test/scenes/memory/diff_snapshot.stager_app.dart -d macos +class DiffSnapshotScene extends Scene { + late DiffPaneController diffController; + late MemoryController controller; + late FakeServiceManager fakeServiceManager; + + @override + Widget build() { + return Scaffold( + body: SnapshotInstanceItemPane(controller: diffController), + ); + } + + @override + Future setUp() async { + FeatureFlags.memoryDiffing = true; + + setGlobal(OfflineModeController, OfflineModeController()); + setGlobal(IdeTheme, IdeTheme()); + setGlobal(NotificationService, NotificationService()); + + fakeServiceManager = + FakeServiceManager(service: FakeServiceManager.createFakeService()); + mockConnectedApp( + fakeServiceManager.connectedApp!, + isFlutterApp: true, + isProfileBuild: true, + isWebApp: false, + ); + setGlobal(ServiceConnectionManager, fakeServiceManager); + + controller = MemoryController( + diffPaneController: diffController = + DiffPaneController(_TestSnapshotTaker()), + ); + + await diffController.takeSnapshot(); + await diffController.takeSnapshot(); + } + + @override + String get title => '$DiffSnapshotScene'; + + void tearDown() { + FeatureFlags.memoryDiffing = false; + } +} + +/// Provides test snapshots. First time returns null. +class _TestSnapshotTaker implements SnapshotTaker { + bool firstTime = true; + int _nextIndex = 0; + + @override + Future take() async { + // This delay is needed for UI to start showing the progress indicator. + await Future.delayed(const Duration(milliseconds: 100)); + final result = await goldenHeapTests[_nextIndex].loadHeap(); + + _nextIndex = (_nextIndex + 1) % goldenHeapTests.length; + + return result; + } +} From 70f6c4d652b255056cb5349c9eb1ba5a89e19a91 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Sun, 6 Nov 2022 10:16:19 -0800 Subject: [PATCH 3/3] Update diff_snapshot.dart --- packages/devtools_app/test/scenes/memory/diff_snapshot.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devtools_app/test/scenes/memory/diff_snapshot.dart b/packages/devtools_app/test/scenes/memory/diff_snapshot.dart index 203a1d7772b..10bd381048a 100644 --- a/packages/devtools_app/test/scenes/memory/diff_snapshot.dart +++ b/packages/devtools_app/test/scenes/memory/diff_snapshot.dart @@ -68,7 +68,7 @@ class DiffSnapshotScene extends Scene { } } -/// Provides test snapshots. First time returns null. +/// Provides test snapshots. class _TestSnapshotTaker implements SnapshotTaker { bool firstTime = true; int _nextIndex = 0;