Skip to content

Commit

Permalink
k1
Browse files Browse the repository at this point in the history
  • Loading branch information
polina-c committed May 1, 2024
1 parent 4caa78c commit 7b05c33
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:devtools_app_shared/utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../../../shared/globals.dart';
import '../../../shared/memory/class_name.dart';
import '../../../shared/memory/heap_graph_loader.dart';
import '../../../shared/offline_data.dart';
Expand Down Expand Up @@ -91,6 +92,7 @@ class MemoryController extends DisposableController
// TODO(polina-c): load memory screen in disconnected mode, https://github.com/flutter/devtools/issues/6972
await _initializeData();
case DevToolsMode.connected:
await serviceConnection.serviceManager.onServiceAvailable;
await _initializeData(
diffPaneController: connectedDiff,
profilePaneController: connectedProfile,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

import 'package:devtools_app_shared/utils.dart';
import 'package:flutter/foundation.dart';

Expand All @@ -30,9 +28,9 @@ enum ChartConnectionState {
///
/// All interactions between chart and vm are initiated by this class.
/// So, if this class is not instantiated, the interaction does not happen.
class ChartConnection extends DisposableController
class ChartVmConnection extends DisposableController
with AutoDisposeControllerMixin {
ChartConnection(this.timeline, {required this.isAndroidChartVisible});
ChartVmConnection(this.timeline, {required this.isAndroidChartVisible});

final MemoryTimeline timeline;
final ValueListenable<bool> isAndroidChartVisible;
Expand All @@ -42,6 +40,8 @@ class ChartConnection extends DisposableController
isAndroidChartVisible: isAndroidChartVisible,
);

bool initialized = false;

DebounceTimer? _polling;

ChartConnectionState state = ChartConnectionState.notInitialized;
Expand Down Expand Up @@ -71,16 +71,14 @@ class ChartConnection extends DisposableController
return false;
}

Future<void> maybeInitialize() async {
if (state != ChartConnectionState.notInitialized) return;
void maybeInit() async {
if (initialized) return;
state = ChartConnectionState.connected;
if (!_checkConnection()) {
isDeviceAndroid = false;
return;
}

await serviceConnection.serviceManager.onServiceAvailable;

isDeviceAndroid =
serviceConnection.serviceManager.vm?.operatingSystem == 'android';

Expand Down Expand Up @@ -110,6 +108,8 @@ class ChartConnection extends DisposableController
}
},
);

initialized = true;
}

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ class MemoryChartPaneController extends DisposableController
data.isDeviceAndroid != null),
'$mode, $data, ${data?.isDeviceAndroid}',
) {
unawaited(_init(data));
_init(data);
}

DevToolsMode mode;

late final ChartData data;

late final ChartConnection? _chartConnection =
late final ChartVmConnection? _chartConnection =
(mode == DevToolsMode.connected)
? ChartConnection(
? ChartVmConnection(
data.timeline,
isAndroidChartVisible: isAndroidChartVisible,
)
Expand All @@ -43,7 +43,7 @@ class MemoryChartPaneController extends DisposableController
Future<void> get initialized => _initialized.future;
final _initialized = Completer<void>();

Future<void> _init(ChartData? offlineData) async {
void _init(ChartData? offlineData) {
assert(!_initialized.isCompleted);
if (mode == DevToolsMode.connected) {
data = ChartData(mode: DevToolsMode.connected);
Expand All @@ -53,11 +53,8 @@ class MemoryChartPaneController extends DisposableController
recomputeChartData();
}

await _onChartVisibilityChanged();
addAutoDisposeListener(
isChartVisible,
() => unawaited(_onChartVisibilityChanged()),
);
_updateChartVisibility();
addAutoDisposeListener(isChartVisible, _updateChartVisibility);

_maybeCalculateAndroidChartVisibility();
addAutoDisposeListener(
Expand Down Expand Up @@ -100,20 +97,9 @@ class MemoryChartPaneController extends DisposableController
final _paused = ValueNotifier<bool>(true);
void pause() => _paused.value = true;
void resume() {
assert(mode == DevToolsMode.connected && _chartConnection != null);
_paused.value = false;
}

/// Establishes the chart connection when the chart is expanded for the first time.
///
/// Returns true if the chart was already connected or the connection was established.
Future<bool> maybeConnect() async {
if (!_paused.value) return false;
if (mode != DevToolsMode.connected) return false;
await _chartConnection!.maybeInitialize();
return true;
}

final isAndroidChartVisible = ValueNotifier<bool>(false);
void _maybeCalculateAndroidChartVisibility() {
if (!isChartVisible.value) return;
Expand All @@ -127,8 +113,11 @@ class MemoryChartPaneController extends DisposableController
}

ValueListenable<bool> get isChartVisible => preferences.memory.showChart;
Future<void> _onChartVisibilityChanged() async {
if (isChartVisible.value && await maybeConnect()) resume();
void _updateChartVisibility() {
if (isChartVisible.value && mode != DevToolsMode.offlineData) {
_chartConnection!.maybeInit();
resume();
}
_maybeCalculateAndroidChartVisibility();
}

Expand Down

0 comments on commit 7b05c33

Please sign in to comment.