Commit Graph

11930 Commits

Author SHA1 Message Date
Ethan Atkins 1d08116a2e Stop instrumenting scripted
The commit 388ed641fb added an autoplugin
that was compiled for every scripted test. Compiling autoplugins
introduces a fair bit of overhead because it can easily take 3-4 seconds
to compile with a cold compiler and even a warn compiler takes a second
or so. Removing the instrumentation caused 3 tests to fail:

1. genereated-root-no-publish relied on setUpScripted modifing the project
   name. Explicitly setting the name in the project build.sbt fixed it.

2. cp-order I'm not sure why this change broke that test, but changing
   the coursier classpath ordering setting does not automatically
   trigger a reload on the next update. I have a more involved change
   that makes changing coursier settings invalidate the update cache
   but I'm markign the test as pending for now. It could be fixed by
   adding a call to `update` after
   `set csrConfiguration ~= (_.withClasspathOrder(false))` but I think
   it's better that the test actually reflect the expected behavior
   until I push the fix.

3. auto-plugins there was a hack that seemed added to address
   https://github.com/sbt/sbt/issues/3164. I cannot tell from either the
   issue or the linked PR what was going on and since removing the
   lines that were explicitly commented as being temporary fixed it,
   I figured it was ok to remove them.

This reverts commit e01f5f5ef1.
2020-07-31 18:56:04 -07:00
Ethan Atkins 50eed6d62e Disable pending dependency management tests
Pending tests really slow down scripted runs because they tend often
cause sbt to exit which means the next test has to reload the whole
build instead of just reloading. Unfortunately cold loading is still
pretty slow so this is significant overhead.

Before disabling these, the dependency-management suite took 335 seconds
on my computer. After, it dropped to 280 seconds.
2020-07-30 20:01:36 -07:00
eugene yokota 5afe8821d8
Merge pull request #5709 from eatkins/library-stamps
Don't use managedCache for library stamps
2020-07-29 14:11:49 -04:00
Ethan Atkins 7ba5fd79f8 Use time wrapped stamper for dependency classpath
It is expensive to compute the the hash of every jar on the classpath so
we can try to avoid that by using the timeWrappedStamper which only
computes the hash if the last modified time has changed.
2020-07-28 13:52:57 -07:00
Ethan Atkins c9dc041643 Don't use managedCache for library stamps
Using the managedCached introduced an unintended performance regression
because it ensured that we always computed the hash of each jar on the
dependency classpath. The backing ReadStamps only computes the stamp if
the timestamp of the jar has changed.
2020-07-28 13:50:49 -07:00
Eugene Yokota e66282433a Reproduce missingOk bug
Ref https://github.com/sbt/sbt/issues/4707
2020-07-28 16:33:28 -04:00
eugene yokota b345205c28
Merge pull request #5700 from eed3si9n/wip/bumpzinc
Drop unused Scala X-Ray (sxr) integration
2020-07-27 17:45:50 -04:00
eugene yokota 8e85035773
Merge pull request #5686 from eatkins/sbt-build-lint
Remove lint warnings in sbt build
2020-07-27 15:27:42 -04:00
eugene yokota 2072eba0a9
Merge pull request #5677 from adpi2/fix/exit-bsp-client
Exit BspClient after server socket is closed
2020-07-27 12:55:31 -04:00
Ethan Atkins 4698f388e9 Remove lint warnings in sbt build
There were a number of unused key lint warnings when loading the sbt
build. In the case of `fork in compile` and `crossVersion in update`, it
wasn't clear that these were actually used, so I removed those settings.
The others seemed to be used so I just added them to the exclude list.

To make this work with legacy versions of sbt, I redefined the
excludeLintKeys key. Once we update the build.properties to a 1.4.x
version, we can drop the `val excludeLint` definition and replace
`excludeLint` with `excludeLintKeys`.

Side note: ++= does not work with excludeLintKeys which is why I used +=
for the excludes.
2020-07-27 09:37:53 -07:00
Ethan Atkins 45a940a080 Add lintUnusedKeysOnLoad to lint ignore keys
I noticed that if lintUnusedKeysOnLoad := true is set, it emits a lint
warning.

As a side note, Project linting takes about 300-400ms in the sbt project
so we might want to consider disabling it by default in batch mode at
least.
2020-07-27 08:57:29 -07:00
Ethan Atkins 67e7b51979
Merge pull request #5701 from eatkins/build-load-perf
Improve sbt build load time by 25%
2020-07-27 08:49:50 -07:00
Eugene Yokota 8c1f6e3c34 Fix root doc 2020-07-27 02:28:47 -04:00
Ethan Atkins 38d67cfdf0 Improve sbt build load time by 25%
The sbt project load made a number of relatively inefficient
transformations of scala collecitons. I went through and found the slow
parts during project loading and made my best attempt at fixing them.
The most significant changes I made were in places using IMap. An IMap
is more or less a wrapper around an immutable Map. It can be much faster
to construct an IMap by creating a java mutable hashmap, wrapping it a
scala Map that delegates to the underlying java hashmap (with a copy on
write if the map is modified) and constructing the IMap from the wrapped
map. It was also in many cases to parallelize some transformations
wherever the order didn't matter.

After applying all of these changes, I found that loading the sbt
project took generally between 8.5 and 9 seconds on my laptop. With
1.3.13, it hovered around 11.5 seconds. I saw a similar speedup in zinc.
The biggest specific improvement was that generating the compiled map
dropped from between 3.5-4 seconds to pretty consistently being around
1.5 seconds.
2020-07-26 19:52:26 -07:00
Eugene Yokota 44e39ec15e Drop unused Sxr 2020-07-25 15:26:35 -04:00
eugene yokota 627a79c254
Merge pull request #5699 from sbt/pr/5697
Zinc 1.4.0-M7
2020-07-25 12:03:34 -04:00
Eugene Yokota 9fbef411bf Comment out test that is timing out 2020-07-25 10:26:33 -04:00
Eugene Yokota fdae1a1858 Bring back Dotty 2020-07-25 00:29:56 -04:00
Eugene Yokota 9c18fb0cf6 Remove tests that are in Zinc repo 2020-07-25 00:23:58 -04:00
Eugene Yokota 7741b9ae2d Zinc 1.4.0-M7 2020-07-24 23:50:54 -04:00
eugene yokota 6a29b7f927
Merge pull request #5696 from eatkins/progress-blinking
Make progress lines blink less
2020-07-24 00:23:59 -04:00
Ethan Atkins eb88d523e0 Update sbt for latest zinc apis 2020-07-22 15:00:56 -07:00
Ethan Atkins d68e2a6361 Make progress lines blink less
The more we call flush, the more likely progress status is to blink. To
reduce the amount of calls to flush, we can instead batch all of the
bytes that are going to be written and wriite them all at once. This
change made progress noticeably less blinky in the zinc project running
the latest sbt snapshot (which frankly was almost siezure inducing when
running publishLocal)
2020-07-22 14:55:25 -07:00
Ethan Atkins 88e0bd678a
Merge pull request #5695 from eatkins/client-system-err
Support System.err in thin client
2020-07-22 14:54:17 -07:00
Ethan Atkins 7b39118214
Merge branch 'develop' into client-system-err 2020-07-22 09:16:10 -07:00
eugene yokota 3908949d73
Merge pull request #5688 from eatkins/client-jline-ui-fixes
Miscellaneous ui/jline fixes
2020-07-21 23:06:44 -04:00
Ethan Atkins 9b332379dd Clear prompt on log messages
Printing a new line was not great ux. You might see something like:

[info] set current project to project (in build file:project)
sbt:project>
[info] new client connected: network-1
sbt:project>

instead of initially

[info] set current project to project (in build file:project)
sbt:project>

and then after the client connects:
[info] set current project to project (in build file:project)
[info] new client connected: network-1
sbt:project>
2020-07-21 13:27:44 -07:00
Ethan Atkins 12112741cb Revert "Unprompt channels during project load"
This reverts commit b1dcf031a5.

I found that b1dcf031a5 had some
unintended consequences that seemed to mess up the prompt state. The
real problem that it was trying to address was that the prompt was being
interleaved with log messages in some scenarios. There was a different
way to fix that in ProgressState that was both simpler and more
reliable.
2020-07-21 13:27:44 -07:00
Ethan Atkins 901c8ee5df Use new history file path for jline3
The jline2 history file format is incompatible with jline3 and jline3
prints a very noisy warning if it detects such a file. History will also
not work with jline3 until you remove or reformat the old file.
2020-07-21 13:27:44 -07:00
Ethan Atkins 761c926944 Catch ClosedChannelException in TaskTraceEvent
sbt would print a stack trace on exit when run with
-Dsbt.task.timings=true. This removes that annoying stack trace.
2020-07-21 13:27:44 -07:00
Ethan Atkins cd26abd656 Print ClearScreenAfterCursor on shutdown
There are scenarios in which sbt can leave behind stray progress lines
after it exits. This attempts to delete them.
2020-07-21 13:27:44 -07:00
Ethan Atkins e82c3405b9 Support System.err in thin client
I noticed that when reloading the build, that certain errors are logged
by sbt to System.err. These were not shown to a thin client because we
weren't forwarding System.err. This change remedies that.

System.err is handled more simply than System.out. We do not put
System.err through the progress state because generally System.err is
tends to be unbuffered. I had hesitated to add System.err to the
Terminal interface at all to give users an escape hatch but I couldn't
get project loading to work well with the thin client without it.
2020-07-21 13:27:32 -07:00
eugene yokota d53ebaa686
Merge pull request #5680 from adpi2/develop
Make the BuildServerReporter stop blinking
2020-07-21 15:35:32 -04:00
adpi2 ac06026015 Exit BspClient after server socket is closed 2020-07-20 16:53:37 +02:00
eugene yokota e985d77ace
Merge pull request #5690 from eatkins/jline2-raw-mode
Use jline2 for raw mode
2020-07-20 07:23:07 -04:00
eugene yokota 23ade8c650
Merge pull request #5692 from eatkins/task-progress
Clear singleton TaskProgress between runs
2020-07-20 07:19:58 -04:00
adpi2 6c694fb04d Rework BuildServerReporter
Make it stop blinking
Use `reset` field to reduce verbosity
2020-07-20 09:17:12 +02:00
Ethan Atkins f7f25bea81
Merge branch 'develop' into task-progress 2020-07-19 21:42:00 -07:00
Ethan Atkins 8bd43a9fa3
Merge pull request #5689 from eatkins/parallel-stamping
Stamp source files in parallel
2020-07-19 21:41:44 -07:00
Ethan Atkins c6ef4c477d
Merge branch 'develop' into parallel-stamping 2020-07-19 18:31:21 -07:00
Ethan Atkins 28ded81fba
Merge pull request #5521 from eatkins/external-hooks
Restore zinc source file invalidation performance
2020-07-19 18:30:53 -07:00
Ethan Atkins d227b6423f Clear singleton TaskProgress between runs
In db4878c786, TaskProgress became an
object which mostly made things easier to reason about. The one problem
was that it started leaking tasks with every run because the timings map
would accumulate tasks that weren't cleared. To fix this, we can clear
the timings and activeTasksMap in the TaskProgress object in the
afterAllCompleted callback. Some extra null checks needed to be added
since it's possible for the maps to not contain a previously added key
after reset has been called.
2020-07-19 13:08:56 -07:00
Ethan Atkins a19ec581c0 Use jline2 for raw mode
Using the JLine3 implementation of raw mode breaks the scala console for
the console channel.
2020-07-19 12:51:19 -07:00
Ethan Atkins 1b5cbd8ead Stamp source files in parallel
I noticed a modest performance increase could be achieved by stamping
the source files in parallel.
2020-07-19 12:21:25 -07:00
Ethan Atkins e81d459f69 Remove custom ExternalHooks
This is now handled by passing a custom instance of ReadStamps to
CompileOptions instead.
2020-07-19 12:16:37 -07:00
Ethan Atkins 329d989e73 Use sbt source file stamps in zinc
This fixes the nio/external-hooks test and also restores the performance
of the benchmarks for the latest sbt version in
https://github.com/eatkins/scala-build-watch-performance which had
regressed when the custom ExternalHooks were disabled in
7c4b01d9f7.

The main change is that it changes the ReadStamps object that is passed
into the compiler options to one that uses the unmanagedFileStampCache
and managedFileStampCache for source files and falls back to the default
stamper otherwise. This improves the performance quite significantly
since we only hash the files once. It also makes it so that the analysis
file will contain the source file stamps of the files when compilation
began, rather than when compilation ended. That is what
nio/external-hooks was testing. In the real world what could happen was
that one modified a source file during compilation but then no
incremental re-compilation would occur because after the initial
compilation completed, zinc wrote the stamp of the modified source file
in the analysis file even though it may have actually compiled a
different version of the source file.
2020-07-19 12:16:37 -07:00
eugene yokota b678d2115f
Merge pull request #5687 from eatkins/rejected-execution
Handle closed executor in network channel flush
2020-07-19 13:47:15 -04:00
Ethan Atkins 4acf3d14c2 Handle closed executor in network channel flush
I noticed some RejectedExecutionExceptions in travis failures of
ClientTest. This could happen if we try to write output to the
network channel after it has been closed. To avoid this problem, we can
catch RejectedExecutionExceptions and do an immediate flush if the
executor has been shutdown.
2020-07-19 10:09:54 -07:00
Eric Peters 19da0b75e9 Use java9rtexport library 2020-07-15 14:51:27 -07:00
Jacob Wang af7acdf3de
Merge pull request #192 from MasseGuillaume/optimize-width-browser
Optimize the screen space for dependencyBrowseGraph
2020-07-14 11:40:54 +12:00