General info:
- All apps compile with Java 7
- All apps minSdkVersion=14, targetSdkVersion=19, compileSdkVersion=19
- All apps build tools 19.0.0 (will ensure 19.0.1 doesn’t change
behavior)
Project structure:
$ tree -d -L 2
.
├── one
│ ├── one-app
│ └── one-protos
├── two
│ ├── two-protos
│ ├── two-v0
│ └── two-v1
├── common
│ ├── truststore
│ ├── typeface-square-market
│ └── zxing-qrcode
└── three
├── three-app
└── three-protos
App “One”:
apk
+--- com.jakewharton.hugo:hugo-annotations:1.0.0
+--- com.android.support:support-v4:19.0.+ -> 19.0.0
+--- com.google.android.gms:play-services:4.0.+ -> 4.0.30
| \--- com.android.support:support-v4:13.0.0 -> 19.0.0
+--- com.squareup.dagger:dagger:1.2.0
| \--- javax.inject:javax.inject:1
+--- com.squareup.okhttp:okhttp:1.2.1
| \--- com.squareup.okhttp:okhttp-protocols:1.2.1
+--- com.squareup.picasso:picasso:2.1.1
+--- com.squareup:pollexor:1.2.0
+--- com.squareup:otto:1.3.4
+--- com.squareup.retrofit:retrofit:1.3.0
| \--- com.google.code.gson:gson:2.2.4
+--- com.squareup.retrofit:converter-wire:1.3.0
| +--- com.squareup.retrofit:retrofit:1.3.0 (*)
| \--- com.squareup.wire:wire-runtime:1.2.0 -> 1.3.0-SNAPSHOT
+--- com.jakewharton:butterknife:4.0.1
+--- com.jakewharton.timber:timber:2.1.0
+--- com.netflix.rxjava:rxjava-core:0.16.0
+--- com.netflix.rxjava:rxjava-android:0.16.0
| \--- com.netflix.rxjava:rxjava-core:0.16.0
+--- com.crashlytics.android:crashlytics:1.+ -> 1.1.5
+--- sterling.common:truststore:unspecified
+--- sterling.common:typeface-square-market:unspecified
\--- sterling.one:one-protos:unspecified
\--- com.squareup.wire:wire-runtime:1.3.0-SNAPSHOT
debugApk
+--- com.jakewharton.hugo:hugo-runtime:1.0.0
| +--- com.jakewharton.hugo:hugo-annotations:1.0.0
| \--- org.aspectj:aspectjrt:1.7.4
+--- com.squareup.retrofit:retrofit-mock:1.3.0
| \--- com.squareup.retrofit:retrofit:1.3.0
| \--- com.google.code.gson:gson:2.2.4
+--- com.github.kevinsawicki:http-request:5.5
+--- com.jakewharton.madge:madge:1.1.1
\--- com.jakewharton.scalpel:scalpel:1.0.0
apt
\--- com.squareup.dagger:dagger-compiler:1.2.0
+--- com.squareup.dagger:dagger:1.2.0
| \--- javax.inject:javax.inject:1
+--- com.squareup:javawriter:2.3.0
\--- com.google.guava:guava:15.0
App “Two”:
apk
+--- com.android.support:support-v4:19.0.+ -> 19.0.0
+--- com.google.android.gms:play-services:4.0.+ -> 4.0.30
| \--- com.android.support:support-v4:13.0.0 -> 19.0.0
+--- com.squareup.retrofit:retrofit:1.2.1
| \--- com.google.code.gson:gson:2.2.4
+--- com.squareup.retrofit:converter-wire:1.2.1
| +--- com.squareup.retrofit:retrofit:1.2.1 (*)
| \--- com.squareup.wire:wire-runtime:1.0.1 -> 1.0.2-SNAPSHOT
+--- com.squareup.dagger:dagger:1.2.+ -> 1.2.0
| \--- javax.inject:javax.inject:1
+--- com.squareup.okhttp:okhttp:1.2.1
| \--- com.squareup.okhttp:okhttp-protocols:1.2.1
+--- com.squareup.picasso:picasso:2.0.2
+--- com.squareup.wire:wire-runtime:1.0.1 -> 1.0.2-SNAPSHOT
+--- com.crashlytics.android:crashlytics:1.0.2
+--- com.flurry:agent:2.2.5
+--- com.jakewharton:butterknife:4.0.+ -> 4.0.1
+--- com.jakewharton.timber:timber:2.0.+ -> 2.0.0
+--- sterling.common:typeface-square-market:unspecified
\--- sterling.two:two-protos:unspecified
\--- com.squareup.wire:wire-runtime:1.0.2-SNAPSHOT
apt
\--- com.squareup.dagger:dagger-compiler:1.2.+ -> 1.2.0
+--- com.squareup.dagger:dagger:1.2.0
| \--- javax.inject:javax.inject:1
+--- com.squareup:javawriter:2.3.0
\--- com.google.guava:guava:15.0
App “Three”:
apk
+--- com.android.support:support-v4:19.0.+ -> 19.0.0
+--- com.google.android.gms:play-services:3.2.+ -> 3.2.65
| \--- com.android.support:support-v4:13.0.0 -> 19.0.0
+--- com.squareup.dagger:dagger:1.0.1
| \--- javax.inject:javax.inject:1
+--- com.squareup.okhttp:okhttp:1.2.1
| \--- com.squareup.okhttp:okhttp-protocols:1.2.1
+--- com.squareup.picasso:picasso:2.1.1
+--- com.squareup.phrase:phrase:1.0-SNAPSHOT
+--- com.squareup.retrofit:retrofit:1.2.3-SNAPSHOT
| \--- com.google.code.gson:gson:2.2.4
+--- com.squareup.retrofit:converter-wire:1.2.3-SNAPSHOT
| +--- com.squareup.retrofit:retrofit:1.2.3-SNAPSHOT (*)
| \--- com.squareup.wire:wire-runtime:1.2.0 -> 1.3.0-SNAPSHOT
+--- com.jakewharton:butterknife:4.0.+ -> 4.0.1
+--- com.jakewharton.timber:timber:2.0.0
+--- com.netflix.rxjava:rxjava-core:0.15.+ -> 0.15.1
+--- com.netflix.rxjava:rxjava-android:0.15.+ -> 0.15.1
| \--- com.netflix.rxjava:rxjava-core:0.15.1
+--- com.crashlytics.android:crashlytics:1.0.+ -> 1.0.4
+--- sterling.common:truststore:unspecified
+--- sterling.common:typeface-square-market:unspecified
+--- sterling.common:zxing-qrcode:unspecified
\--- sterling.three:three-protos:unspecified
\--- com.squareup.wire:wire-runtime:1.3.0-SNAPSHOT
debugApk
\--- com.squareup.retrofit:retrofit-mock:1.2.3-SNAPSHOT
\--- com.squareup.retrofit:retrofit:1.2.3-SNAPSHOT
\--- com.google.code.gson:gson:2.2.4
---
Jake Wharton
http://about.me/jakewharton
On Wed, Jan 8, 2014 at 8:39 AM, Xavier Ducrohet <[email protected]> wrote:
> wow, the difference is crazy. If you can provide the dependency tree that
> would be nice.
>
> I was looking at the code for the PreDex task and realize we don't
> parallelize the pre-dexing when there are more than one library which I
> thought we did. I think dx is making use of all the cores but I'm not sure
> how much it would help for this case.
>
>
> On Wed, Jan 8, 2014 at 1:27 AM, Jake Wharton <[email protected]>wrote:
>
>> All of these benchmarks are done with nothing in gradle.properties.
>>
>> With pre-dexing off, ./gradlew clean assemble --profile --offline:
>>
>> :one:one-app 1m13.07s
>> :one:one-app:dexDogfood 17.612s
>> :one:one-app:dexRelease 17.261s
>> :one:one-app:dexDebug 15.849s
>>
>> :two:two-v1 1m1.84s
>> :two:two-v1:dexDogfood 15.553s
>> :two:two-v1:dexDebug 15.066s
>> :two:two-v1:dexRelease 14.183s
>>
>> :three:three-app 36.907s
>> :three:three-app:dexDebug 9.278s
>> :three:three-app:dexDogfood 8.848s
>> :three:three-app:dexRelease 8.654s
>>
>> With pre-dexing on, ./gradlew clean assemble --profile --offline:
>>
>> :one:one-app 3m14.97s
>> :one:one-app:preDexDebug 58.122s
>> :one:one-app:preDexRelease 51.320s
>> :one:one-app:preDexDogfood 50.261s
>> :one:one-app:dexDebug 5.591s
>> :one:one-app:dexDogfood 4.257s
>> :one:one-app:dexRelease 4.037s
>>
>> :two:two-v1 2m29.22s
>> :two:two-v1:preDexDogfood 36.434s
>> :two:two-v1:preDexDebug 36.408s
>> :two:two-v1:preDexRelease 35.988s
>> :two:two-v1:dexDogfood 14.891s
>> :two:two-v1:dexDebug 4.893s
>> :two:two-v1:dexRelease 4.003s
>>
>> :three:three-app 2m14.54s
>> :three:three-app:preDexRelease 44.191s
>> :three:three-app:preDexDebug 35.970s
>> :three:three-app:preDexDogfood 33.390s
>> :three:three-app:dexDebug 3.956s
>> :three:three-app:dexRelease 3.575s
>> :three:three-app:dexDogfood 3.451s
>>
>> $ java -version
>> java version "1.8.0-ea"
>> Java(TM) SE Runtime Environment (build 1.8.0-ea-b116)
>> Java HotSpot(TM) 64-Bit Server VM (build 25.0-b58, mixed mode)
>>
>> $ ./gradlew --version
>>
>> ------------------------------------------------------------
>> Gradle 1.9
>> ------------------------------------------------------------
>>
>> Build time: 2013-11-19 08:20:02 UTC
>> Build number: none
>> Revision: 7970ec3503b4f5767ee1c1c69f8b4186c4763e3d
>>
>> Groovy: 1.8.6
>> Ant: Apache Ant(TM) version 1.9.2 compiled on July 8 2013
>> Ivy: 2.2.0
>> JVM: 1.8.0-ea (Oracle Corporation 25.0-b58)
>> OS: Mac OS X 10.8.5 x86_64
>>
>> Let me know if there's anything else I can provide (e.g., dependency
>> tree?)
>>
>>
>>
>> ---
>> Jake Wharton
>> http://about.me/jakewharton
>>
>>
>> On Tue, Jan 7, 2014 at 9:39 PM, Xavier Ducrohet <[email protected]> wrote:
>>
>>> BTW I'm interested in the time it takes to do predex + dex vs dex only
>>> (no pre-dexing) for clean builds
>>>
>>> It's worth it in incremental builds, but I'm suprised clean builds are
>>> so much longer. I'd like to send some stats to the VM team (who owns dx)
>>>
>>> thanks.
>>>
>>>
>>>
>>> On Tue, Jan 7, 2014 at 11:36 PM, Xavier Ducrohet <[email protected]>wrote:
>>>
>>>> android {
>>>> dexOptions {
>>>> preDexLibraries = false
>>>> }
>>>> }
>>>>
>>>>
>>>> On Tue, Jan 7, 2014 at 3:13 PM, Jake Wharton <[email protected]>wrote:
>>>>
>>>>> Well it's definitely pre-dexing. Can this be easily disabled for CI
>>>>> builds?
>>>>>
>>>>> :app1:app1-app 3m14.13s
>>>>> :app1:app1-app:preDexDebug 1m5.23s
>>>>> :app1:app1-app:preDexDogfood 51.836s
>>>>> :app1:app1-app:preDexRelease 41.499s
>>>>>
>>>>> 81% of time spent pre-dexing
>>>>>
>>>>>
>>>>> :app2:app2-v1 2m25.18s
>>>>> :app2:app2-v1:preDexRelease 39.274s
>>>>> :app2:app2-v1:preDexDogfood 38.637s
>>>>> :app2:app2-v1:preDexDebug 36.630s
>>>>>
>>>>> 78% of time spent pre-dexing
>>>>>
>>>>>
>>>>> :app3:app3-app 2m18.30s
>>>>> :app3:app3-app:preDexRelease 45.504s
>>>>> :app3:app3-app:preDexDebug 36.681s
>>>>> :app3:app3-app:preDexDogfood 34.769s
>>>>>
>>>>> 84% of time spent pre-dexing
>>>>>
>>>>>
>>>>> ---
>>>>> Jake Wharton
>>>>> http://about.me/jakewharton
>>>>>
>>>>>
>>>>> On Mon, Jan 6, 2014 at 10:37 PM, Jake Wharton
>>>>> <[email protected]>wrote:
>>>>>
>>>>>> They were clean builds, yes. I'll dig deeper tomorrow. It was the end
>>>>>> of the work day for me when we started the comparisons.
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> Jake Wharton
>>>>>> http://about.me/jakewharton
>>>>>>
>>>>>>
>>>>>> On Mon, Jan 6, 2014 at 6:07 PM, Xavier Ducrohet <[email protected]>wrote:
>>>>>>
>>>>>>> incremental dexing has been disabled. There are some issues with it.
>>>>>>> We have implemented pre-dexing though, but I'm not sure how the
>>>>>>> performance
>>>>>>> is impacted.
>>>>>>>
>>>>>>> Are those time for clean builds? (which should not be impacted by
>>>>>>> the removal of the incremental dex).
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Jan 6, 2014 at 4:50 PM, Jake Wharton
>>>>>>> <[email protected]>wrote:
>>>>>>>
>>>>>>>> I forgot to ask a question... Is anyone else seeing anything like
>>>>>>>> this?
>>>>>>>>
>>>>>>>> I see this on small pet projects too. I can perceive tasks taking
>>>>>>>> 10x longer than when on 0.6.x. Usually those towards the latter end of
>>>>>>>> the
>>>>>>>> processing (preDex, dex, assemble).
>>>>>>>>
>>>>>>>> Still digging for more info to pinpoint what is happening.
>>>>>>>>
>>>>>>>>
>>>>>>>> ---
>>>>>>>> Jake Wharton
>>>>>>>> http://about.me/jakewharton
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Jan 6, 2014 at 4:44 PM, Jake Wharton <[email protected]
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Our project builds have experienced a serious regression in terms
>>>>>>>>> of performance upon upgrading to 0.7.x.
>>>>>>>>>
>>>>>>>>> Without --parallel:
>>>>>>>>>
>>>>>>>>> - 0.6.x: 4m 21s
>>>>>>>>> - 0.7.x: 9m 04s
>>>>>>>>>
>>>>>>>>> With --parallel:
>>>>>>>>>
>>>>>>>>> - 0.6.x: 3m 36s
>>>>>>>>> - 0.7.x: 6m 58s
>>>>>>>>>
>>>>>>>>> This project has 3 apps (each with three build types, no flavors),
>>>>>>>>> 4 library modules, and 3 java modules.
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>> Jake Wharton
>>>>>>>>> http://about.me/jakewharton
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "adt-dev" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to [email protected].
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Xavier Ducrohet
>>>>>>> Android SDK Tech Lead
>>>>>>> Google Inc.
>>>>>>> http://developer.android.com | http://tools.android.com
>>>>>>>
>>>>>>> Please do not send me questions directly. Thanks!
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "adt-dev" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>
>>>>>>
>>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "adt-dev" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Xavier Ducrohet
>>>> Android SDK Tech Lead
>>>> Google Inc.
>>>> http://developer.android.com | http://tools.android.com
>>>>
>>>> Please do not send me questions directly. Thanks!
>>>>
>>>
>>>
>>>
>>> --
>>> Xavier Ducrohet
>>> Android SDK Tech Lead
>>> Google Inc.
>>> http://developer.android.com | http://tools.android.com
>>>
>>> Please do not send me questions directly. Thanks!
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "adt-dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "adt-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
>
> --
> Xavier Ducrohet
> Android SDK Tech Lead
> Google Inc.
> http://developer.android.com | http://tools.android.com
>
> Please do not send me questions directly. Thanks!
>
> --
> You received this message because you are subscribed to the Google Groups
> "adt-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
--
You received this message because you are subscribed to the Google Groups
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.