On 17/05/2013, at 6:19 PM, Luke Daley <luke.da...@gradle.biz> wrote:

> 
> 
> On 17/05/2013, at 9:07, Adam Murdoch <adam.murd...@gradleware.com> wrote:
> 
>> 
>> The symptom is much slower script compilation in Gradle 1.6 relative to 
>> previous versions, so it particularly affects those people using a 
>> particular build for the first time or those who are authoring build scripts.
>> 
>> The cause was 2 things in combination: a much larger number of packages in 
>> the default imports, now that we generate it, and some inefficiencies in how 
>> we find classes in the class loader graph, in particular when looking for 
>> classes that don't exist. These two things meant that the Groovy compiler 
>> was spending a lot of time resolving unqualified class names when compiling 
>> scripts.
>> 
>> The solution is a bit of caching in key places in the class loader graph.
>> 
>> Some numbers: For a build with 100 projects, average execution time for 
>> `gradle help --recompile-scripts` is
>> 
>> Gradle 1.5           ~48sec
>> Gradle 1.6           ~96sec
>> Master                       ~24sec
>> 
>> The fix also knocks about about 30-40 minutes off the CI commit builds. 
>> Nice. Yet to see what impact it has on the coverage builds.
>> 
>> The daemon is also slightly faster for each build now, thanks to the caching.
> 
> Do we have performance test coverage for this? Is it worth it?

I think I'll add some coverage, as there are some important use cases that are 
affected by script compilation speed: first time use of a build, authoring 
build scripts, and upgrading Gradle versions.

> 
>> 
>> On 14/05/2013, at 9:20 PM, Luke Daley <luke.da...@gradleware.com> wrote:
>> 
>>> I think we have a problem.
>>> 
>>> I've been seeing something like this too I think.
>>> 
>>> What can we ask for short of access to the project? How can we see where 
>>> the time is being spent?
>>> 
>>> Begin forwarded message:
>>> 
>>>> From: Gradle <noreply.gra...@getsatisfaction.com>
>>>> Subject: New problem: Performance degradation in initial Gradle invocation 
>>>> when usin...
>>>> Date: 14 May 2013 12:15:18 PM GMT+01:00
>>>> To: luke.da...@gradleware.com
>>>> 
>>>> Stefan Marklund just reported this problem in Gradle:
>>>> 
>>>> Performance degradation in initial Gradle invocation when using 1.6
>>>> 
>>>> Hello All, 
>>>> 
>>>> After the other day having switched over to Gradle 1.6 from Gradle 1.5 I 
>>>> have noticed a significant performance decrease in the initial 
>>>> configuration step in Gradle 1.6 compared to the 1.5 version. With initial 
>>>> invocation of gradle I mean after having done a clean code checkout 
>>>> invoking Gradle for the very first time. 
>>>> 
>>>> See numbers below. Are you aware of any performance issue associated with 
>>>> the 1.6 version? 
>>>> 
>>>> I have not adjusted my build script for changes pending (for Gradle 2.0) 
>>>> so I do see some new deprication messages. 
>>>> 
>>>> My Gradle project is fairly large I'd imagine. It is a multiproject 
>>>> containing 198 subprojects. 
>>>> 
>>>> Performance numbers for an initial 'gradle tasks' 
>>>> 
>>>> 
>>>> Gradle 1.6: 
>>>> =========== 
>>>> Total time: 5 mins 25.951 secs 
>>>> Total time: 5 mins 47.84 secs 
>>>> Total time: 5 mins 32.74 secs 
>>>> Total time: 5 mins 7.843 secs (no daemon) 
>>>> Total time: 5 mins 31.888 secs (no daemon, profile) 
>>>> 
>>>> Profile: 
>>>> Description Duration 
>>>> Total Build Time 5m31.91s 
>>>> Startup 1.094s 
>>>> Settings and BuildSrc 3.249s 
>>>> Loading Projects 0.561s 
>>>> Configuring Projects 5m0.02s 
>>>> Task Execution 26.779s 
>>>> 
>>>> Dependency resolution 1.125s 
>>>> 
>>>> Gradle 1.5: 
>>>> =========== 
>>>> Total time: 2 mins 31.647 secs 
>>>> Total time: 2 mins 25.89 secs 
>>>> Total time: 2 mins 21.674 secs (no demon) 
>>>> Total time: 2 mins 28.045 secs 
>>>> Total time: 2 mins 48.135 secs (no-daemon, profile) 
>>>> 
>>>> Profile: 
>>>> Description Duration 
>>>> Total Build Time 2m48.16s 
>>>> Startup 1.060s 
>>>> Settings and BuildSrc 2.417s 
>>>> Loading Projects 0.573s 
>>>> Configuring Projects 2m17.26s 
>>>> Task Execution 26.138s 
>>>> 
>>>> Dependency resolution 1.164s 
>>>> 
>>>> 
>>>> 
>>>> Across the board the configuration time per subproject is about twice that 
>>>> of Gradle 1.5. The other items are virtually identical. 
>>>> I also supplied the dependency resolution times. 
>>>> 
>>>> Subsequent invocations of 'gradle tasks' are done in ~35s for both Gradle 
>>>> 1.5 and 1.6. 
>>>> 
>>>> I hope this aids you in your analysis. 
>>>> 
>>>> Thank you, 
>>>> Stefan Marklund
>>>> Reply | Notify me when people reply
>>>> 
>>>> This message sent from the Gradle community on Get Satisfaction. 
>>>> To unsubscribe or change your email settings, click here.
>>>> 
>>>> 
>>>> ----------------
>>>> Create a customer community for your company at GetSatisfaction.com.
>>>> 
>>> 
>>> -- 
>>> Luke Daley
>>> Principal Engineer, Gradleware 
>>> http://gradleware.com
>>> 
>>> Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: 
>>> http://www.gradlesummit.com
>>> 
>> 
>> 
>> --
>> Adam Murdoch
>> Gradle Co-founder
>> http://www.gradle.org
>> VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
>> http://www.gradleware.com
>> 
>> Join us at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: 
>> http://www.gradlesummit.com
>> 


--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com

Join us at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: 
http://www.gradlesummit.com

Reply via email to