Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: pkg/analysis_server/lib/src/status/memory_use.dart

Issue 2918553002: Remove dead code related to the diagnostics server. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/status/memory_use.dart
diff --git a/pkg/analysis_server/lib/src/status/memory_use.dart b/pkg/analysis_server/lib/src/status/memory_use.dart
deleted file mode 100644
index becf0395976fe410ec2a7ba85d49bfac5d7a586d..0000000000000000000000000000000000000000
--- a/pkg/analysis_server/lib/src/status/memory_use.dart
+++ /dev/null
@@ -1,314 +0,0 @@
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:collection';
-
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/visitor.dart';
-import 'package:analyzer/src/context/cache.dart';
-import 'package:analyzer/src/context/context.dart' show AnalysisContextImpl;
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/task/dart.dart';
-import 'package:analyzer/task/model.dart';
-
-/**
- * A visitor that will count the number of instances of each type of AST node.
- */
-class AstNodeCounter extends UnifyingAstVisitor<Null> {
- /**
- * A table mapping the types of the AST nodes to the number of instances
- * visited.
- */
- final Map<Type, int> nodeCounts;
-
- /**
- * Initialize a newly created counter to increment the counts in the given map
- * of [nodeCounts].
- */
- AstNodeCounter(this.nodeCounts);
-
- @override
- visitNode(AstNode node) {
- Type type = node.runtimeType;
- int count = nodeCounts[type] ?? 0;
- nodeCounts[type] = count + 1;
- super.visitNode(node);
- }
-}
-
-/**
- * A visitor that will count the number of instances of each type of element.
- */
-class ElementCounter extends GeneralizingElementVisitor<Null> {
- /**
- * A table mapping the types of the elements to the number of instances
- * visited.
- */
- final Map<Type, int> elementCounts;
-
- /**
- * A table mapping the types of the AST nodes to the number of instances
- * visited.
- */
- final Map<Type, int> nodeCounts;
-
- /**
- * Initialize a newly created counter to increment the counts in the given map
- * of [elementCounts].
- */
- ElementCounter(this.elementCounts, this.nodeCounts);
-
- @override
- visitConstructorElement(ConstructorElement element) {
- if (element is ConstructorElementImpl) {
- List<ConstructorInitializer> initializers = element.constantInitializers;
- if (initializers != null) {
- initializers.forEach((ConstructorInitializer initializer) {
- _countNodes(initializer);
- });
- }
- }
- visitElement(element);
- }
-
- @override
- visitElement(Element element) {
- Type type = element.runtimeType;
- int count = elementCounts[type] ?? 0;
- elementCounts[type] = count + 1;
- element.metadata.forEach((ElementAnnotation annotation) {
- if (annotation is ElementAnnotationImpl) {
- _countNodes(annotation.annotationAst);
- }
- });
- super.visitElement(element);
- }
-
- visitFieldElement(FieldElement element) {
- if (element is ConstVariableElement) {
- _countInitializer(element as ConstVariableElement);
- }
- visitElement(element);
- }
-
- visitLocalVariableElement(LocalVariableElement element) {
- if (element is ConstVariableElement) {
- _countInitializer(element as ConstVariableElement);
- }
- visitElement(element);
- }
-
- visitParameterElement(ParameterElement element) {
- if (element is ConstVariableElement) {
- _countInitializer(element as ConstVariableElement);
- }
- visitElement(element);
- }
-
- visitTopLevelVariableElement(TopLevelVariableElement element) {
- if (element is ConstVariableElement) {
- _countInitializer(element as ConstVariableElement);
- }
- visitElement(element);
- }
-
- void _countInitializer(ConstVariableElement element) {
- _countNodes(element.constantInitializer);
- }
-
- void _countNodes(AstNode node) {
- if (node != null) {
- node.accept(new AstNodeCounter(nodeCounts));
- }
- }
-}
-
-/**
- * A set used when the number of instances of some type is too large to be kept.
- */
-class InfiniteSet implements Set {
- /**
- * The unique instance of this class.
- */
- static final InfiniteSet instance = new InfiniteSet();
-
- @override
- int get length => -1;
-
- @override
- dynamic noSuchMethod(Invocation invocation) {
- throw new UnsupportedError('Do not use instances of InfiniteSet');
- }
-}
-
-/**
- * Computes memory usage data by traversing the data structures reachable from
- * an analysis server.
- */
-class MemoryUseData {
- /**
- * The maximum size of an instance set.
- */
- static const int maxInstanceSetSize = 1000000;
-
- /**
- * A table mapping classes to instances of the class.
- */
- Map<Type, Set> instances = new HashMap<Type, Set>();
-
- /**
- * A table mapping classes to the classes of objects from which they were
- * reached.
- */
- Map<Type, Set<Type>> ownerMap = new HashMap<Type, Set<Type>>();
-
- /**
- * A set of all the library specific units, using equality rather than
- * identity in order to determine whether re-using equal instances would save
- * significant space.
- */
- Set<LibrarySpecificUnit> uniqueLSUs = new HashSet<LibrarySpecificUnit>();
-
- /**
- * A set of all the targeted results, using equality rather than identity in
- * order to determine whether re-using equal instances would save significant
- * space.
- */
- Set<TargetedResult> uniqueTargetedResults = new HashSet<TargetedResult>();
-
- /**
- * A set containing all of the analysis targets for which the key in the
- * cache partition is not the same instance as the target stored in the entry.
- */
- Set<AnalysisTarget> mismatchedTargets = new HashSet<AnalysisTarget>();
-
- /**
- * A table mapping the types of AST nodes to the number of instances being
- * held directly (as values in the cache).
- */
- Map<Type, int> directNodeCounts = new HashMap<Type, int>();
-
- /**
- * A table mapping the types of AST nodes to the number of instances being
- * held indirectly (such as nodes reachable from element models).
- */
- Map<Type, int> indirectNodeCounts = new HashMap<Type, int>();
-
- /**
- * A table mapping the types of the elements to the number of instances being
- * held directly (as values in the cache).
- */
- final Map<Type, int> elementCounts = new HashMap<Type, int>();
-
- /**
- * Initialize a newly created instance.
- */
- MemoryUseData();
-
- /**
- * Traverse an analysis [server] to compute memory usage data.
- */
- void processAnalysisServer(AnalysisServer server) {
- _recordInstance(server, null);
- Iterable<AnalysisContext> contexts = server.analysisContexts;
- for (AnalysisContextImpl context in contexts) {
- _processAnalysisContext(context, server);
- }
- DartSdkManager manager = server.sdkManager;
- List<SdkDescription> descriptors = manager.sdkDescriptors;
- for (SdkDescription descriptor in descriptors) {
- DartSdk sdk = manager.getSdk(descriptor, () => null);
- if (sdk != null) {
- _processAnalysisContext(sdk.context, manager);
- }
- }
- }
-
- void _processAnalysisContext(AnalysisContextImpl context, Object owner) {
- _recordInstance(context, owner);
- _recordInstance(context.analysisCache, context);
- CachePartition partition = context.privateAnalysisCachePartition;
- Map<AnalysisTarget, CacheEntry> map = partition.entryMap;
- map.forEach((AnalysisTarget target, CacheEntry entry) {
- _processAnalysisTarget(target, partition);
- _processCacheEntry(entry, partition);
- if (!identical(entry.target, target)) {
- mismatchedTargets.add(target);
- }
- });
- }
-
- void _processAnalysisTarget(AnalysisTarget target, Object owner) {
- _recordInstance(target, owner);
- }
-
- void _processCacheEntry(CacheEntry entry, Object owner) {
- _recordInstance(entry, owner);
- List<ResultDescriptor> descriptors = entry.nonInvalidResults;
- for (ResultDescriptor descriptor in descriptors) {
- _recordInstance(descriptor, entry);
- _processResultData(entry.getResultDataOrNull(descriptor), entry);
- }
- }
-
- void _processResultData(ResultData resultData, Object owner) {
- _recordInstance(resultData, owner);
- if (resultData != null) {
- _recordInstance(resultData.state, resultData);
- _recordInstance(resultData.value, resultData,
- onFirstOccurrence: (Object object) {
- if (object is AstNode) {
- object.accept(new AstNodeCounter(directNodeCounts));
- } else if (object is Element) {
- object.accept(new ElementCounter(elementCounts, indirectNodeCounts));
- }
- });
- resultData.dependedOnResults.forEach((TargetedResult result) =>
- _processTargetedResult(result, resultData));
- resultData.dependentResults.forEach((TargetedResult result) =>
- _processTargetedResult(result, resultData));
- }
- }
-
- void _processTargetedResult(TargetedResult result, Object owner) {
- _recordInstance(result, owner);
- uniqueTargetedResults.add(result);
- _recordInstance(result.target, result);
- _recordInstance(result.result, result);
- }
-
- /**
- * Record the given [instance] that was found. If this is the first time that
- * the instance has been found, execute the [onFirstOccurrence] function.
- *
- * Note that instances will not be recorded if there are more than
- * [maxInstanceSetSize] instances of the same type, and that the
- * [onFirstOccurrence] function will not be executed if the instance is not
- * recorded.
- */
- void _recordInstance(Object instance, Object owner,
- {void onFirstOccurrence(Object object)}) {
- Type type = instance.runtimeType;
- Set instanceSet = instances.putIfAbsent(type, () => new HashSet.identity());
- if (instanceSet != InfiniteSet.instance) {
- if (instanceSet.add(instance) && onFirstOccurrence != null) {
- onFirstOccurrence(instance);
- }
- if (instanceSet.length >= maxInstanceSetSize) {
- instances[type] = InfiniteSet.instance;
- }
- }
- ownerMap
- .putIfAbsent(instance.runtimeType, () => new HashSet<Type>())
- .add(owner.runtimeType);
- if (instance is LibrarySpecificUnit) {
- uniqueLSUs.add(instance);
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698