| Index: pkg/analysis_server/lib/src/get_handler.dart
|
| diff --git a/pkg/analysis_server/lib/src/get_handler.dart b/pkg/analysis_server/lib/src/get_handler.dart
|
| index 776f38a5d124fd44d58042da5f4ae16c2e2081b7..8aeafe67d5082f917cda2f31148d8ba164a688a1 100644
|
| --- a/pkg/analysis_server/lib/src/get_handler.dart
|
| +++ b/pkg/analysis_server/lib/src/get_handler.dart
|
| @@ -30,6 +30,7 @@ import 'package:analyzer/src/generated/engine.dart';
|
| import 'package:analyzer/src/generated/java_engine.dart';
|
| import 'package:analyzer/src/generated/source.dart';
|
| import 'package:analyzer/src/generated/utilities_general.dart';
|
| +import 'package:analyzer/task/model.dart' as newTask;
|
| import 'package:plugin/plugin.dart';
|
|
|
| /**
|
| @@ -261,58 +262,95 @@ class GetHandler {
|
| _writePage(buffer, 'Analysis Server - Analysis Performance', [],
|
| (StringBuffer buffer) {
|
| buffer.write('<h3>Analysis Performance</h3>');
|
| -
|
| - {
|
| - buffer.write('<p><b>Time spent in each phase of analysis</b></p>');
|
| + if (AnalysisEngine.instance.useTaskModel) {
|
| + //
|
| + // Write new task model timing information.
|
| + //
|
| + buffer.write('<p><b>Task performace data</b></p>');
|
| buffer.write(
|
| '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
|
| - _writeRow(buffer, ['Time (in ms)', 'Percent', 'Analysis Phase'],
|
| - header: true);
|
| - // prepare sorted tags
|
| - List<PerformanceTag> tags = PerformanceTag.all.toList();
|
| - tags.remove(ServerPerformanceStatistics.idle);
|
| - tags.sort((a, b) => b.elapsedMs - a.elapsedMs);
|
| - // prepare total time
|
| - int totalTime = 0;
|
| - tags.forEach((PerformanceTag tag) {
|
| - totalTime += tag.elapsedMs;
|
| + _writeRow(buffer, [
|
| + 'Task Name',
|
| + 'Count',
|
| + 'Total Time (in ms)',
|
| + 'Average Time (in ms)'
|
| + ], header: true);
|
| +
|
| + Map<Type, int> countMap = newTask.AnalysisTask.countMap;
|
| + Map<Type, Stopwatch> stopwatchMap = newTask.AnalysisTask.stopwatchMap;
|
| + List<Type> taskClasses = stopwatchMap.keys.toList();
|
| + taskClasses.sort((Type first, Type second) =>
|
| + first.toString().compareTo(second.toString()));
|
| + taskClasses.forEach((Type taskClass) {
|
| + int count = countMap[taskClass];
|
| + if (count == null) {
|
| + count = 0;
|
| + }
|
| + int totalTime = stopwatchMap[taskClass].elapsedMilliseconds;
|
| + _writeRow(buffer, [
|
| + taskClass.toString(),
|
| + count,
|
| + totalTime,
|
| + count <= 0 ? '-' : totalTime / count
|
| + ], classes: [null, "right", "right", "right"]);
|
| });
|
| - // write rows
|
| - void writeRow(PerformanceTag tag) {
|
| - double percent = (tag.elapsedMs * 100) / totalTime;
|
| - String percentStr = '${percent.toStringAsFixed(2)}%';
|
| - _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label],
|
| - classes: ["right", "right", null]);
|
| - }
|
| - tags.forEach(writeRow);
|
| buffer.write('</table>');
|
| - }
|
| -
|
| - Map<DataDescriptor, Map<CacheState, int>> transitionMap =
|
| - SourceEntry.transitionMap;
|
| - buffer.write(
|
| - '<p><b>Number of times a state transitioned to VALID (grouped by descriptor)</b></p>');
|
| - if (transitionMap.isEmpty) {
|
| - buffer.write('<p>none</p>');
|
| } else {
|
| - List<DataDescriptor> descriptors = transitionMap.keys.toList();
|
| - descriptors.sort((DataDescriptor first, DataDescriptor second) =>
|
| - first.toString().compareTo(second.toString()));
|
| - for (DataDescriptor key in descriptors) {
|
| - Map<CacheState, int> countMap = transitionMap[key];
|
| - List<CacheState> oldStates = countMap.keys.toList();
|
| - oldStates.sort((CacheState first, CacheState second) =>
|
| - first.toString().compareTo(second.toString()));
|
| - buffer.write('<p>${key.toString()}</p>');
|
| + //
|
| + // Write old task model timing information.
|
| + //
|
| + {
|
| + buffer.write('<p><b>Time spent in each phase of analysis</b></p>');
|
| buffer.write(
|
| '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
|
| - _writeRow(buffer, ['Count', 'Previous State'], header: true);
|
| - for (CacheState state in oldStates) {
|
| - _writeRow(buffer, [countMap[state], state.toString()],
|
| - classes: ["right", null]);
|
| + _writeRow(buffer, ['Time (in ms)', 'Percent', 'Analysis Phase'],
|
| + header: true);
|
| + // prepare sorted tags
|
| + List<PerformanceTag> tags = PerformanceTag.all.toList();
|
| + tags.remove(ServerPerformanceStatistics.idle);
|
| + tags.sort((a, b) => b.elapsedMs - a.elapsedMs);
|
| + // prepare total time
|
| + int totalTime = 0;
|
| + tags.forEach((PerformanceTag tag) {
|
| + totalTime += tag.elapsedMs;
|
| + });
|
| + // write rows
|
| + void writeRow(PerformanceTag tag) {
|
| + double percent = (tag.elapsedMs * 100) / totalTime;
|
| + String percentStr = '${percent.toStringAsFixed(2)}%';
|
| + _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label],
|
| + classes: ["right", "right", null]);
|
| }
|
| + tags.forEach(writeRow);
|
| buffer.write('</table>');
|
| }
|
| +
|
| + Map<DataDescriptor, Map<CacheState, int>> transitionMap =
|
| + SourceEntry.transitionMap;
|
| + buffer.write(
|
| + '<p><b>Number of times a state transitioned to VALID (grouped by descriptor)</b></p>');
|
| + if (transitionMap.isEmpty) {
|
| + buffer.write('<p>none</p>');
|
| + } else {
|
| + List<DataDescriptor> descriptors = transitionMap.keys.toList();
|
| + descriptors.sort((DataDescriptor first, DataDescriptor second) =>
|
| + first.toString().compareTo(second.toString()));
|
| + for (DataDescriptor key in descriptors) {
|
| + Map<CacheState, int> countMap = transitionMap[key];
|
| + List<CacheState> oldStates = countMap.keys.toList();
|
| + oldStates.sort((CacheState first, CacheState second) =>
|
| + first.toString().compareTo(second.toString()));
|
| + buffer.write('<p>${key.toString()}</p>');
|
| + buffer.write(
|
| + '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
|
| + _writeRow(buffer, ['Count', 'Previous State'], header: true);
|
| + for (CacheState state in oldStates) {
|
| + _writeRow(buffer, [countMap[state], state.toString()],
|
| + classes: ["right", null]);
|
| + }
|
| + buffer.write('</table>');
|
| + }
|
| + }
|
| }
|
| });
|
| });
|
|
|