Skip to content

Commit 8dd806c

Browse files
committed
merge
2 parents 64d384c + 86d7bcb commit 8dd806c

15 files changed

Lines changed: 180 additions & 61 deletions

File tree

analysis_options.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,6 @@ dart_code_metrics:
166166
- integration_test/**
167167
# Investigate internal usages of inspector_controller before removing.
168168
- lib/src/screens/inspector/**_controller.dart
169-
- lib/src/extensions/**
170-
- lib/src/framework/**
171169
- lib/src/service/**
172170
- lib/src/shared/**
173171
- lib/src/standalone_ui/**

packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class EmbeddedExtensionControllerImpl extends EmbeddedExtensionController
7878
final extensionPostEventStream =
7979
StreamController<DevToolsExtensionEvent>.broadcast();
8080

81-
// ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/9907): false positive.
81+
// ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/9907): false positive.
8282
bool _initialized = false;
8383

8484
@override

packages/devtools_app/lib/src/framework/home_screen.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class _ConnectInputState extends State<ConnectInput> with BlockingActionMixin {
171171
// developers who tend to repeatedly restart DevTools to debug the same
172172
// test application.
173173
final uri = await storage.getValue(_debugVmServiceUriKey);
174-
if (uri != null) {
174+
if (uri != null && mounted) {
175175
setState(() {
176176
connectDialogController.text = uri;
177177
});
@@ -253,10 +253,9 @@ class _ConnectInputState extends State<ConnectInput> with BlockingActionMixin {
253253
return;
254254
}
255255

256-
assert(() {
256+
if (kDebugMode) {
257257
safeUnawaited(storage.setValue(_debugVmServiceUriKey, uri));
258-
return true;
259-
}());
258+
}
260259

261260
// Cache the routerDelegate and notifications providers before the async
262261
// gap as the landing screen may not be displayed by the time the async gap

packages/devtools_app/lib/src/screens/accessibility/accessibility_screen.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class AccessibilityScreenBody extends StatefulWidget {
3434

3535
class _AccessibilityScreenBodyState extends State<AccessibilityScreenBody>
3636
with AutoDisposeMixin {
37-
// ignore: unused-code, temporarily ignore since this screen is under active development.
37+
// ignore: unused-code, temporarily ignore since this screen is under active development.
3838
late AccessibilityController controller;
3939

4040
@override

packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ class DiffTreeTypeDropdown extends StatelessWidget {
289289
height: defaultButtonHeight,
290290
child: RoundedDropDownButton<DiffTreeType>(
291291
key: AppSizeScreen.diffTypeDropdownKey,
292+
value: value,
292293
isDense: true,
293294
items: [
294295
_buildDiffTreeTypeMenuItem(DiffTreeType.combined),

packages/devtools_app/lib/src/screens/dtd/dtd_tools_model.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@ abstract class FeatureController extends DisposableController
1818
/// [service] may be null if this service method is a first party service
1919
/// method registered by DTD or by a DTD-internal service.
2020
class DtdServiceMethod implements Comparable<DtdServiceMethod> {
21-
const DtdServiceMethod({
22-
required this.service,
23-
required this.method,
24-
});
21+
const DtdServiceMethod({required this.service, required this.method});
2522

2623
final String? service;
2724
final String method;

packages/devtools_app/lib/src/screens/dtd/services.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,7 @@ class ServicesController extends FeatureController {
5757
}),
5858
for (final service in response.clientServices) ...[
5959
for (final method in service.methods.values)
60-
DtdServiceMethod(
61-
service: service.name,
62-
method: method.name,
63-
),
60+
DtdServiceMethod(service: service.name, method: method.name),
6461
],
6562
];
6663
}

packages/devtools_app/lib/src/screens/inspector/widget_properties/properties_view.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ import '../layout_explorer/flex/flex.dart';
2020
/// Table for the widget's properties, along with its render object and a
2121
/// flex layout explorer if the widget is part of a flex layout.
2222
class DetailsTable extends StatefulWidget {
23-
const DetailsTable({
24-
super.key,
25-
required this.controller,
26-
});
23+
const DetailsTable({super.key, required this.controller});
2724

2825
static const gaPrefix = 'inspectorDetailsTable';
2926

packages/devtools_app/lib/src/screens/logging/logging_controller.dart

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,13 @@ class LoggingController extends DevToolsScreenController
233233

234234
late final LogDetailsController logDetailsController;
235235

236+
/// Tracks the previous cumulative GC times (in seconds) for each active isolate.
237+
///
238+
/// This is used to compute the actual duration of the current GC event (by taking
239+
/// the delta between consecutive cumulative times), rather than displaying the
240+
/// total cumulative GC time.
241+
final _previousGcTimesByIsolate = <String, double>{};
242+
236243
List<LogData> data = <LogData>[];
237244

238245
final selectedLog = ValueNotifier<LogData?>(null);
@@ -281,6 +288,7 @@ class LoggingController extends DevToolsScreenController
281288

282289
void clear() {
283290
_updateData([]);
291+
_previousGcTimesByIsolate.clear();
284292
serviceConnection.errorBadgeManager.clearErrorCount(LoggingScreen.id);
285293
}
286294

@@ -448,11 +456,24 @@ class LoggingController extends DevToolsScreenController
448456
final usedBytes = newSpace.used! + oldSpace.used!;
449457
final capacityBytes = newSpace.capacity! + oldSpace.capacity!;
450458

451-
final time = ((newSpace.time! + oldSpace.time!) * 1000).round();
459+
final isolateId = e.isolate?.id;
460+
// Cumulative time, in seconds.
461+
final newCumulativeTime = newSpace.time! + oldSpace.time!;
462+
463+
String durationText = '';
464+
if (isolateId != null) {
465+
final previousGcTime = _previousGcTimesByIsolate[isolateId];
466+
_previousGcTimesByIsolate[isolateId] = newCumulativeTime;
467+
if (previousGcTime != null && newCumulativeTime >= previousGcTime) {
468+
// Multiply by 1000 to display in milliseconds.
469+
final durationMs = (newCumulativeTime - previousGcTime) * 1000;
470+
durationText = ' in ${durationMs.toStringAsFixed(1)} ms';
471+
}
472+
}
452473

453474
final summary =
454475
'${isolateRef['name']} • '
455-
'${e.json!['reason']} collection in $time ms • '
476+
'${e.json!['reason']} collection$durationText • '
456477
'${printBytes(usedBytes, unit: ByteUnit.mb, includeUnit: true)} used of '
457478
'${printBytes(capacityBytes, unit: ByteUnit.mb, includeUnit: true)}';
458479

packages/devtools_app/lib/src/screens/network/network_screen.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,7 @@ class _NetworkProfilerBody extends StatelessWidget {
319319
ValueListenableBuilder<List<NetworkRequest>>(
320320
valueListenable: controller.filteredData,
321321
builder: (context, filteredRequests, _) {
322-
return NetworkRequestsTable(
323-
requests: filteredRequests
324-
);
322+
return NetworkRequestsTable(requests: filteredRequests);
325323
},
326324
),
327325
const NetworkRequestInspector(),
@@ -331,10 +329,7 @@ class _NetworkProfilerBody extends StatelessWidget {
331329
}
332330

333331
class NetworkRequestsTable extends StatelessWidget {
334-
const NetworkRequestsTable({
335-
super.key,
336-
required this.requests,
337-
});
332+
const NetworkRequestsTable({super.key, required this.requests});
338333

339334
static const methodColumn = MethodColumn();
340335
static final addressColumn = AddressColumn();

0 commit comments

Comments
 (0)