Skip to content

Commit 35fe308

Browse files
committed
Merge pull request #38 from RichardBradley/report-memory-perf
Don't load the whole measurement file into memory at once -- it may be very large
2 parents b41e75e + ed78e36 commit 35fe308

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

src/main/scala/scoverage/IOUtils.scala

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package scoverage
22

33
import java.io._
44
import scala.xml.{XML, Utility, Node}
5+
import scala.collection.Set
6+
import scala.collection.mutable
7+
import scala.io.Source
58

69
/** @author Stephen Samuel */
710
object IOUtils {
@@ -28,14 +31,18 @@ object IOUtils {
2831
})
2932

3033
// loads all the invoked statement ids from the given files
31-
def invoked(files: Seq[File]): Seq[Int] = {
32-
files.flatMap {
33-
file =>
34-
val reader = new BufferedReader(new FileReader(file))
35-
val line = reader.readLine()
34+
def invoked(files: Seq[File]): Set[Int] = {
35+
val acc = mutable.Set[Int]()
36+
files.foreach { file =>
37+
val reader = Source.fromFile(file)
38+
for (line <- reader.getLines()) {
39+
if (!line.isEmpty) {
40+
acc += line.toInt
41+
}
42+
}
3643
reader.close()
37-
line.split(";").filterNot(_.isEmpty).map(_.toInt)
3844
}
45+
acc
3946
}
4047

4148
/**

src/main/scala/scoverage/Invoker.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ object Invoker {
3131
writer = new FileWriter(file, true)
3232
threadFile.set(writer)
3333
}
34-
writer.append(id.toString + ';').flush()
34+
writer.append(id.toString + '\n').flush()
3535
}
3636
}

src/test/scala/scoverage/IOUtilsTest.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class IOUtilsTest extends FunSuite with MockitoSugar with OneInstancePerTest {
4646
test("io utils should parse measurement file") {
4747
val file = File.createTempFile("scoveragemeasurementtest", "txt")
4848
val writer = new FileWriter(file)
49-
writer.write("1;5;9;;10;")
49+
writer.write("1\n5\n9\n\n10\n")
5050
writer.close()
5151
val invoked = IOUtils.invoked(Seq(file))
5252
assert(invoked.toSet === Set(1, 5, 9, 10))
@@ -62,12 +62,12 @@ class IOUtilsTest extends FunSuite with MockitoSugar with OneInstancePerTest {
6262

6363
val file1 = File.createTempFile("scoverage.measurements.1", "txt")
6464
val writer1 = new FileWriter(file1)
65-
writer1.write("1;5;9;;10;")
65+
writer1.write("1\n5\n9\n\n10\n")
6666
writer1.close()
6767

6868
val file2 = File.createTempFile("scoverage.measurements.2", "txt")
6969
val writer2 = new FileWriter(file2)
70-
writer2.write("1;7;14;;2;")
70+
writer2.write("1\n7\n14\n\n2\n")
7171
writer2.close()
7272

7373
val files = IOUtils.findMeasurementFiles(file1.getParent)

0 commit comments

Comments
 (0)