X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fmodule%2Fcoverage%2FCoverageBuilder.java;fp=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fmodule%2Fcoverage%2FCoverageBuilder.java;h=b3bfcd88902bcaf5f9ce731ee1a2b54f05797b0d;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/coverage/CoverageBuilder.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/coverage/CoverageBuilder.java new file mode 100644 index 000000000..b3bfcd889 --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/coverage/CoverageBuilder.java @@ -0,0 +1,61 @@ +package org.simantics.scl.compiler.module.coverage; + +import org.simantics.scl.compiler.module.Module; +import org.simantics.scl.runtime.profiling.BranchPoint; + +import gnu.trove.map.hash.THashMap; +import gnu.trove.procedure.TObjectObjectProcedure; + +public class CoverageBuilder { + THashMap> combined = + new THashMap>(); + + public void addCoverage(Module module) { + THashMap branchPointMap = module.getBranchPoints(); + if(branchPointMap == null) + return; + THashMap oldBranchPointMap = combined.get(module.getName()); + if(oldBranchPointMap == null) { + oldBranchPointMap = new THashMap(); + combined.put(module.getName(), oldBranchPointMap); + } + THashMap oldBranchPointMap_ = oldBranchPointMap; + branchPointMap.forEachEntry(new TObjectObjectProcedure() { + @Override + public boolean execute(String name, BranchPoint[] branchPoints) { + BranchPoint[] oldBranchPoints = oldBranchPointMap_.get(name); + if(oldBranchPoints == null) + oldBranchPointMap_.put(name, branchPoints); + else + combineCounters(oldBranchPoints, branchPoints); + return true; + } + }); + } + + private static void combineCounters(BranchPoint[] oldBranchPoints, BranchPoint[] branchPoints) { + if(oldBranchPoints.length != branchPoints.length) + throw new IllegalArgumentException("Incompatible branch points."); + for(int i=0;i moduleCoverages = + new THashMap(); + combined.forEachEntry(new TObjectObjectProcedure>() { + @Override + public boolean execute(String name, THashMap branchPoints) { + moduleCoverages.put(name, CoverageUtils.getCoverage(name, branchPoints)); + return true; + } + }); + return CoverageUtils.combineCoverages(moduleCoverages); + } +}