This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 254944 - [newcodemodel] slow code completion caused by multiple preprocessing of the same file
Summary: [newcodemodel] slow code completion caused by multiple preprocessing of the s...
Status: RESOLVED FIXED
Alias: None
Product: cnd
Classification: Unclassified
Component: Code Completion (show other bugs)
Version: 8.1
Hardware: All All
: P3 normal (vote)
Assignee: Vladimir Kvashin
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-09-02 16:38 UTC by Vladimir Kvashin
Modified: 2015-09-17 11:01 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vladimir Kvashin 2015-09-02 16:38:47 UTC
Now when user edits a file and presses Ctrl-space, file is preprocessed several times before completion result is shown. This slows down completion. This amount (of preprocessor passes the same file on completion) should be reduced - ideally to 1.
Comment 1 Vladimir Kvashin 2015-09-02 16:40:38 UTC
Righ now I see 5 passes (2 of them are in parallel, so we can think that we have 4 passes now):

1) In parallel:
"Code Model Parser 0: ONE FILE Reparsing /home/vkvashin/NetBeansProjects/00001/f00001.c"
	at org.netbeans.modules.cnd.apt.support.ClankDriver.preprocess(ClankDriver.java:98)
	at org.netbeans.modules.cnd.modelimpl.parser.clank.ClankTokenStreamProducer.getTokenStream(ClankTokenStreamProducer.java:148)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.doParse(FileImpl.java:1448)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl._reparse(FileImpl.java:955)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.ensureParsedImpl(FileImpl.java:742)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.ensureParsed(FileImpl.java:624)
	at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread._run(ParserThread.java:148)
	at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread.run(ParserThread.java:74)
	at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThreadManager$Wrapper.run(ParserThreadManager.java:92)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)
and
"Code Completion (find declaration at /home/vkvashin/NetBeansProjects/00001/f00001.c[7,15], token "<unknown>")"
	at org.netbeans.modules.cnd.apt.support.ClankDriver.preprocess(ClankDriver.java:98)
	at org.netbeans.modules.cnd.modelimpl.parser.clank.ClankTokenStreamProducer.getTokenStream(ClankTokenStreamProducer.java:148)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.createAndCacheFullTokenStream(FileImpl.java:1185)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.getTokenStream(FileImpl.java:1238)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.getFileTokenSequence(MacroExpansionDocProviderImpl.java:852)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.expand(MacroExpansionDocProviderImpl.java:509)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.getMacroTable(MacroExpansionDocProviderImpl.java:1536)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.expand(MacroExpansionDocProviderImpl.java:331)
	at org.netbeans.modules.cnd.api.model.services.CsmMacroExpansion.expand(CsmMacroExpansion.java:161)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmExpandedTokenProcessor.create(CsmExpandedTokenProcessor.java:101)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmExpandedTokenProcessor.create(CsmExpandedTokenProcessor.java:93)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.processTokensInFile(CsmCompletionQuery.java:723)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.queryImpl(CsmCompletionQuery.java:563)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:527)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:520)
	at org.netbeans.modules.cnd.completion.csm.CompletionUtilities.findItemsReferencedAtCaretPos(CompletionUtilities.java:163)
	at org.netbeans.modules.cnd.completion.impl.xref.ReferencesSupport.findDeclaration(ReferencesSupport.java:491)
	at org.netbeans.modules.cnd.completion.impl.xref.ReferencesSupport.findDeclaration(ReferencesSupport.java:428)
	at org.netbeans.modules.cnd.completion.impl.xref.ReferencesSupport.findDeclaration(ReferencesSupport.java:266)
	at org.netbeans.modules.cnd.completion.cplusplus.CsmCompletionProvider$DocumentationQuery.query(CsmCompletionProvider.java:571)
	at org.netbeans.spi.editor.completion.support.AsyncCompletionTask.run(AsyncCompletionTask.java:223)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)

2) "Code Model Parser 0: ONE FILE Reparsing /home/vkvashin/NetBeansProjects/00001/f00001.c"
	at org.netbeans.modules.cnd.apt.support.ClankDriver.preprocess(ClankDriver.java:98)
	at org.netbeans.modules.cnd.modelimpl.parser.clank.ClankTokenStreamProducer.getTokenStream(ClankTokenStreamProducer.java:148)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.doParse(FileImpl.java:1448)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl._reparse(FileImpl.java:955)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.ensureParsedImpl(FileImpl.java:742)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.ensureParsed(FileImpl.java:624)
	at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread._run(ParserThread.java:148)
	at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread.run(ParserThread.java:74)
	at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThreadManager$Wrapper.run(ParserThreadManager.java:92)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)

3) "Code Completion"
	at org.netbeans.modules.cnd.apt.support.ClankDriver.preprocess(ClankDriver.java:98)
	at org.netbeans.modules.cnd.modelimpl.parser.clank.ClankMacroUsagesProducer.getMacroUsages(ClankMacroUsagesProducer.java:100)
	at org.netbeans.modules.cnd.modelimpl.parser.clank.ClankFileInfoQuerySupport.getMacroUsages(ClankFileInfoQuerySupport.java:83)
	at org.netbeans.modules.cnd.modelimpl.impl.services.FileInfoQueryImpl.getMacroUsages(FileInfoQueryImpl.java:331)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmExpandedTokenProcessor.create(CsmExpandedTokenProcessor.java:91)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.processTokensInFile(CsmCompletionQuery.java:723)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.queryImpl(CsmCompletionQuery.java:563)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:527)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:520)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:240)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:219)
	at org.netbeans.modules.cnd.completion.cplusplus.CsmCompletionProvider$Query.query(CsmCompletionProvider.java:283)
	at org.netbeans.spi.editor.completion.support.AsyncCompletionTask.run(AsyncCompletionTask.java:223)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)

4) "Code Completion"
	at org.netbeans.modules.cnd.apt.support.ClankDriver.preprocess(ClankDriver.java:98)
	at org.netbeans.modules.cnd.modelimpl.parser.clank.ClankTokenStreamProducer.getTokenStream(ClankTokenStreamProducer.java:148)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.createAndCacheFullTokenStream(FileImpl.java:1185)
	at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.getTokenStream(FileImpl.java:1238)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.getFileTokenSequence(MacroExpansionDocProviderImpl.java:852)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.expand(MacroExpansionDocProviderImpl.java:509)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.getMacroTable(MacroExpansionDocProviderImpl.java:1536)
	at org.netbeans.modules.cnd.modelimpl.impl.services.MacroExpansionDocProviderImpl.expand(MacroExpansionDocProviderImpl.java:331)
	at org.netbeans.modules.cnd.api.model.services.CsmMacroExpansion.expand(CsmMacroExpansion.java:161)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmExpandedTokenProcessor.create(CsmExpandedTokenProcessor.java:101)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmExpandedTokenProcessor.create(CsmExpandedTokenProcessor.java:93)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.processTokensInFile(CsmCompletionQuery.java:723)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.queryImpl(CsmCompletionQuery.java:563)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:527)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:520)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:240)
	at org.netbeans.modules.cnd.completion.cplusplus.ext.CsmCompletionQuery.query(CsmCompletionQuery.java:219)
	at org.netbeans.modules.cnd.completion.cplusplus.CsmCompletionProvider$Query.query(CsmCompletionProvider.java:283)
	at org.netbeans.spi.editor.completion.support.AsyncCompletionTask.run(AsyncCompletionTask.java:223)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)
Comment 2 Quality Engineering 2015-09-11 01:22:53 UTC
Integrated into 'main-silver', will be available in build *201509110002* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)

Changeset: http://hg.netbeans.org/main-silver/rev/844e436ffea3
User: Vladimir Kvashin <vkvashin@netbeans.org>
Log: fixed latent NPE (fixing #254944 - [newcodemodel] slow code completion caused by multiple preprocessing of the same file)
Comment 3 Quality Engineering 2015-09-12 03:05:54 UTC
Integrated into 'main-silver', will be available in build *201509120002* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)

Changeset: http://hg.netbeans.org/main-silver/rev/4dc65f20a7c0
User: Vladimir Kvashin <vkvashin@netbeans.org>
Log: cache tokens after parse  (fixing #254944 - [newcodemodel] slow code completion caused by multiple preprocessing of the same file)
Comment 4 Quality Engineering 2015-09-16 01:26:28 UTC
Integrated into 'main-silver', will be available in build *201509160002* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)

Changeset: http://hg.netbeans.org/main-silver/rev/66bbbbbec32a
User: Vladimir Kvashin <vkvashin@netbeans.org>
Log: cache macro usages on parse of modified file (fixing #254944 - [newcodemodel] slow code completion caused by multiple preprocessing of the same file)