47e988b781
Change-Id: Iee3110f92ab0f24312ddd1eff407d2229f895321 Reviewed-on: https://dart-review.googlesource.com/c/89101 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
112 lines
2.7 KiB
Dart
112 lines
2.7 KiB
Dart
// Copyright (c) 2014, 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:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:analyzer_plugin/protocol/protocol_common.dart';
|
|
import 'package:path/path.dart';
|
|
|
|
import '../timing_framework.dart';
|
|
|
|
/**
|
|
* Perform the timing test, printing the minimum, average and maximum times, as
|
|
* well as the standard deviation to the output.
|
|
*/
|
|
void main(List<String> args) {
|
|
SimpleTest test = new SimpleTest();
|
|
test.run().then((TimingResult result) {
|
|
print('minTime = ${result.minTime}');
|
|
print('averageTime = ${result.averageTime}');
|
|
print('maxTime = ${result.maxTime}');
|
|
print('standardDeviation = ${result.standardDeviation}');
|
|
print('');
|
|
print('Press return to exit');
|
|
return stdin.first;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* A test of how long it takes to get code completion results after making a
|
|
* minor change inside a method body.
|
|
*/
|
|
class SimpleTest extends TimingTest {
|
|
/**
|
|
* The path to the file in which code completion is to be performed.
|
|
*/
|
|
String mainFilePath;
|
|
|
|
/**
|
|
* The original content of the file.
|
|
*/
|
|
String originalContent;
|
|
|
|
/**
|
|
* The offset of the cursor when requesting code completion.
|
|
*/
|
|
int cursorOffset;
|
|
|
|
/**
|
|
* A completer that will be completed when code completion results have been
|
|
* received from the server.
|
|
*/
|
|
Completer completionReceived;
|
|
|
|
/**
|
|
* Initialize a newly created test.
|
|
*/
|
|
SimpleTest();
|
|
|
|
@override
|
|
Future oneTimeSetUp() {
|
|
return super.oneTimeSetUp().then((_) {
|
|
mainFilePath = sourcePath('test.dart');
|
|
originalContent = r'''
|
|
class C {
|
|
m() {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
f(C c) {
|
|
return c;
|
|
}
|
|
''';
|
|
cursorOffset = originalContent.indexOf('c;') + 1;
|
|
writeFile(mainFilePath, originalContent);
|
|
});
|
|
}
|
|
|
|
@override
|
|
Future perform() {
|
|
sendAnalysisUpdateContent({
|
|
mainFilePath:
|
|
new ChangeContentOverlay([new SourceEdit(cursorOffset, 0, '.')])
|
|
});
|
|
sendCompletionGetSuggestions(mainFilePath, cursorOffset + 1);
|
|
return completionReceived.future;
|
|
}
|
|
|
|
@override
|
|
Future setUp() {
|
|
completionReceived = new Completer();
|
|
onCompletionResults.listen((_) {
|
|
// We only care about the time to the first response.
|
|
if (!completionReceived.isCompleted) {
|
|
completionReceived.complete();
|
|
}
|
|
});
|
|
sendAnalysisSetAnalysisRoots([dirname(mainFilePath)], []);
|
|
sendAnalysisUpdateContent(
|
|
{mainFilePath: new AddContentOverlay(originalContent)});
|
|
return new Future.value();
|
|
}
|
|
|
|
@override
|
|
Future tearDown() {
|
|
sendAnalysisSetAnalysisRoots([], []);
|
|
return new Future.value();
|
|
}
|
|
}
|