File indexing completed on 2024-05-12 04:39:14
0001 /* 0002 SPDX-FileCopyrightText: 2016 Milian Wolff <mail@milianw.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "bench_codecompletion.h" 0008 0009 #include <QTest> 0010 #include <QSignalSpy> 0011 0012 #include <KTextEditor/Cursor> 0013 0014 #include <tests/testfile.h> 0015 0016 #include <language/duchain/duchainlock.h> 0017 0018 #include "duchain/parsesession.h" 0019 #include "duchain/clangindex.h" 0020 0021 #include "codecompletion/model.h" 0022 0023 QTEST_MAIN(BenchCodeCompletion) 0024 0025 using namespace KDevelop; 0026 0027 BenchCodeCompletion::BenchCodeCompletion() 0028 : m_index(new ClangIndex) 0029 , m_model(new ClangCodeCompletionModel(m_index.data(), this)) 0030 { 0031 m_model->initialize(); 0032 } 0033 0034 BenchCodeCompletion::~BenchCodeCompletion() = default; 0035 0036 void BenchCodeCompletion::benchCodeCompletion_data() 0037 { 0038 QTest::addColumn<QString>("code"); 0039 QTest::addColumn<KTextEditor::Cursor>("position"); 0040 0041 QTest::newRow("empty") << "" << KTextEditor::Cursor(0, 0); 0042 0043 QTest::newRow("stl") << R"( 0044 #include <vector> 0045 #include <unordered_map> 0046 #include <unordered_set> 0047 0048 int main() 0049 { 0050 return 0; 0051 } 0052 )" << KTextEditor::Cursor(7, 0); 0053 0054 QTest::newRow("clib") << R"( 0055 #include <cstring> 0056 #include <cstdio> 0057 #include <cmath> 0058 0059 int main() 0060 { 0061 return 0; 0062 } 0063 )" << KTextEditor::Cursor(7, 0); 0064 } 0065 0066 void BenchCodeCompletion::benchCodeCompletion() 0067 { 0068 QFETCH(QString, code); 0069 QFETCH(KTextEditor::Cursor, position); 0070 0071 TestFile file(code, "cpp"); 0072 QVERIFY(file.parseAndWait(TopDUContext::AllDeclarationsContextsUsesAndAST, 1, 5000)); 0073 0074 auto view = createView(file.url().toUrl()); 0075 0076 QSignalSpy spy(m_model, &QAbstractItemModel::modelReset); 0077 QBENCHMARK { 0078 m_model->completionInvoked(view.get(), {position, position}, KTextEditor::CodeCompletionModel::UserInvocation); 0079 do { 0080 spy.wait(); 0081 } while (!m_model->rowCount()); 0082 } 0083 } 0084 0085 #include "moc_bench_codecompletion.cpp"