blob: 251cfb6407132fd56a29b739276e2adaaca405bd [file]
// Copyright 2025 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
// ignore_for_file: prefer-correct-type-name
import 'dart:js_interop';
import 'dart:js_interop_unsafe';
import 'package:web/web.dart';
/// Estimates the memory usage of the DevTools web aplication, including all
/// iFrames and workers.
///
/// See https://developer.mozilla.org/en-US/docs/Web/API/Performance/measureUserAgentSpecificMemory.
Future<int?> measureMemoryUsageInBytes() async {
// Use of this API requires a secure context and cross origin isolation.
if (window.isSecureContext && window.crossOriginIsolated) {
final memory = await window.performance.measureUserAgentSpecificMemory();
return memory?.bytes;
}
return null;
}
extension on Performance {
@JS('measureUserAgentSpecificMemory')
external JSPromise<_UserAgentSpecificMemory>
_measureUserAgentSpecificMemory();
Future<_UserAgentSpecificMemory>? measureUserAgentSpecificMemory() =>
has('measureUserAgentSpecificMemory')
? _measureUserAgentSpecificMemory().toDart
: null;
}
@JS()
extension type _UserAgentSpecificMemory._(JSObject _) implements JSObject {
external int get bytes;
external JSArray<_UserAgentSpecificMemoryBreakdownElement> get breakdown;
}
@JS()
extension type _UserAgentSpecificMemoryBreakdownElement._(JSObject _)
implements JSObject {
external JSArray<_UserAgentSpecificMemoryBreakdownAttributionElement>
get attribution;
external int get bytes;
external JSArray<JSString> get types;
}
@JS()
extension type _UserAgentSpecificMemoryBreakdownAttributionElement._(JSObject _)
implements JSObject {
external _UserAgentSpecificMemoryBreakdownAttributionContainerElement?
get container;
external String get scope;
external String get url;
}
@JS()
extension type _UserAgentSpecificMemoryBreakdownAttributionContainerElement._(
JSObject _
)
implements JSObject {
external String get id;
external String get url;
}