├── .gitignore
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── sloydev
│ │ └── dependencyinjectionperformance
│ │ ├── FibonacciJava.java
│ │ ├── FibonacciKotlin.kt
│ │ ├── InjectionTest.kt
│ │ ├── Main.kt
│ │ ├── MainActivity.kt
│ │ ├── Utilities.kt
│ │ ├── custom
│ │ ├── CustomDI.kt
│ │ ├── CustomJavaModule.kt
│ │ └── CustomKotlinModule.kt
│ │ ├── dagger2
│ │ ├── DaggerComponent.kt
│ │ ├── DaggerJavaModule.kt
│ │ └── DaggerKotlinModule.kt
│ │ ├── katana
│ │ ├── KatanaJavaModule.kt
│ │ └── KatanaKotlinModule.kt
│ │ ├── kodein
│ │ ├── KodeinJavaModule.kt
│ │ └── KodeinKotlinModule.kt
│ │ └── koin
│ │ ├── KoinJavaModule.kt
│ │ └── KoinKotlinModule.kt
│ └── res
│ ├── drawable-v24
│ └── ic_launcher_foreground.xml
│ ├── drawable
│ └── ic_launcher_background.xml
│ ├── layout
│ ├── activity_main.xml
│ └── content_main.xml
│ ├── menu
│ └── menu_main.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ └── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches/build_file_checksums.ser
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | .DS_Store
9 | /build
10 | /captures
11 | .externalNativeBuild
12 | .idea
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Android Injection Performance
2 |
3 | This project aims to measure the performance of several Dependency Injection frameworks (or Service Locators) in different devices.
4 |
5 | ## Libraries tested
6 | - [Koin](https://insert-koin.io/) - 2.0.1
7 | - [Kodein](http://kodein.org/Kodein-DI/) - 5.3.0
8 | - [Dagger 2](https://google.github.io/dagger/) - 2.16
9 | - [Katana](https://github.com/rewe-digital-incubator/katana/) - 1.2.2
10 |
11 | ## The test
12 | The test data are classes with dependencies in a structure similar to Fibonacci sequence, to simulate multiple levels of transitive dependencies.
13 | For each library there is a test with Kotlin classes and one with Java classes, because some libraries seem to be affected by this difference.
14 |
15 | Each test injects one of this dependencies 100 times and prints the maximum time, the minimum and the average.
16 |
17 | The project contains an Android application that run the tests on its onCreate and prints the result to the Logcat.
18 |
19 | The actual test is implemented in the class [InjectionTest.kt](https://github.com/Sloy/android-dependency-injection-performance/blob/master/app/src/main/java/com/sloydev/dependencyinjectionperformance/InjectionTest.kt)
20 |
21 | ## Results
22 | Results can be quite different between different devices, so here are some results in different devices with different Android versions. Each table contains the **median** time of each library's setup and injection. More results are welcomed.
23 |
24 | - [Samsung Galaxy J5](#samsung-galaxy-j5)
25 | - [Samsung Galaxy S8](#samsung-galaxy-s8)
26 | - [Huawei P8 Lite](#huawei-p8-lite)
27 | - [Xiaomi MI A1](#xiaomi-mi-a1)
28 | - [OnePlus One](#oneplus-one)
29 | - [OnePlus 5](#oneplus-5)
30 | - [Nexus 6](#nexus-6)
31 |
32 | ### lge p1 with Android 6.0
33 |
34 | Koin 2.0
35 | Library | Setup Kotlin | Setup Java | Inject Kotlin | Inject Java
36 | --- | ---:| ---:| ---:| ---:
37 | **Custom** | 2.05 ms | 2.13 ms | 0.30 ms | 0.36 ms
38 | **Koin** | 10.72 ms | 11.01 ms | 1.40 ms | 1.48 ms
39 | **Kodein** | 39.95 ms | 37.38 ms | 3.58 ms | 3.76 ms
40 | **Katana** | 5.37 ms | 5.84 ms | 0.82 ms | 0.77 ms
41 | **Dagger** | 0.01 ms | 0.01 ms | 0.13 ms | 0.09 ms
42 |
43 | Koin 2.1
44 | Library | Setup Kotlin | Setup Java | Inject Kotlin | Inject Java
45 | --- | ---:| ---:| ---:| ---:
46 | **Custom** | 0.47 ms | 0.45 ms | 0.07 ms | 0.08 ms
47 | **Koin** | 4.11 ms | 4.19 ms | 0.29 ms | 0.28 ms
48 | **Kodein** | 14.50 ms | 14.58 ms | 0.77 ms | 0.78 ms
49 | **Katana** | 1.55 ms | 1.49 ms | 0.19 ms | 0.18 ms
50 | **Dagger** | 0.00 ms | 0.00 ms | 0.02 ms | 0.02 ms
51 |
52 | ### HONOR HNKIW-Q with Android 6.0.1
53 |
54 | Koin 2.1
55 | Library | Setup Kotlin | Setup Java | Inject Kotlin | Inject Java
56 | --- | ---:| ---:| ---:| ---:
57 | **Custom** | 0.46 ms | 0.41 ms | 0.06 ms | 0.08 ms
58 | **Koin** | 3.40 ms | 3.54 ms | 0.24 ms | 0.23 ms
59 | **Kodein** | 11.48 ms | 11.68 ms | 0.62 ms | 0.65 ms
60 | **Katana** | 1.60 ms | 1.61 ms | 0.15 ms | 0.14 ms
61 | **Dagger** | 0.00 ms | 0.00 ms | 0.02 ms | 0.02 ms
62 |
63 | ### Nokia B2N_sprout with Android 10
64 |
65 | Koin 2.1
66 | Library | Setup Kotlin | Setup Java | Inject Kotlin | Inject Java
67 | --- | ---:| ---:| ---:| ---:
68 | **Custom** | 0.09 ms | 0.09 ms | 0.12 ms | 0.08 ms
69 | **Koin** | 0.66 ms | 0.74 ms | 0.12 ms | 0.11 ms
70 | **Kodein** | 5.10 ms | 5.59 ms | 0.21 ms | 0.10 ms
71 | **Katana** | 0.47 ms | 0.42 ms | 0.12 ms | 0.10 ms
72 | **Dagger** | 0.00 ms | 0.00 ms | 0.04 ms | 0.04 ms
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 | apply plugin: 'kotlin-android'
3 | apply plugin: 'kotlin-android-extensions'
4 | apply plugin: 'kotlin-kapt'
5 |
6 | android {
7 | compileSdkVersion 28
8 | defaultConfig {
9 | applicationId "com.sloydev.dependencyinjectionperformance"
10 | minSdkVersion 15
11 | targetSdkVersion 28
12 | versionCode 1
13 | versionName "1.0"
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 | }
16 | buildTypes {
17 | release {
18 | minifyEnabled false
19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
20 | }
21 | }
22 | }
23 |
24 | dependencies {
25 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
26 | implementation 'androidx.appcompat:appcompat:1.0.2'
27 | implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
28 | implementation 'com.google.android.material:material:1.0.0'
29 |
30 | // Koin
31 | implementation "org.koin:koin-core:2.1.4"
32 |
33 | // Kodein
34 | implementation 'org.kodein.di:kodein-di-erased-jvm:5.3.0'
35 |
36 | // Dagger
37 | implementation 'com.google.dagger:dagger:2.16'
38 | kapt 'com.google.dagger:dagger-compiler:2.16'
39 |
40 | // Katana
41 | implementation 'com.github.rewe-digital-incubator.katana:katana-android:1.2.2'
42 | }
43 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/FibonacciKotlin.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance
2 |
3 |
4 | /**
5 | * Generated with https://gist.github.com/Sloy/12affca1e49ba052053ab4c8bfc5bcb4
6 | */
7 | class Fib1
8 | class Fib2
9 | class Fib3(val fibM1: Fib2, val fibM2: Fib1)
10 | class Fib4(val fibM1: Fib3, val fibM2: Fib2)
11 | class Fib5(val fibM1: Fib4, val fibM2: Fib3)
12 | class Fib6(val fibM1: Fib5, val fibM2: Fib4)
13 | class Fib7(val fibM1: Fib6, val fibM2: Fib5)
14 | class Fib8(val fibM1: Fib7, val fibM2: Fib6)
15 | class Fib9(val fibM1: Fib8, val fibM2: Fib7)
16 | class Fib10(val fibM1: Fib9, val fibM2: Fib8)
17 | class Fib11(val fibM1: Fib10, val fibM2: Fib9)
18 | class Fib12(val fibM1: Fib11, val fibM2: Fib10)
19 | class Fib13(val fibM1: Fib12, val fibM2: Fib11)
20 | class Fib14(val fibM1: Fib13, val fibM2: Fib12)
21 | class Fib15(val fibM1: Fib14, val fibM2: Fib13)
22 | class Fib16(val fibM1: Fib15, val fibM2: Fib14)
23 | class Fib17(val fibM1: Fib16, val fibM2: Fib15)
24 | class Fib18(val fibM1: Fib17, val fibM2: Fib16)
25 | class Fib19(val fibM1: Fib18, val fibM2: Fib17)
26 | class Fib20(val fibM1: Fib19, val fibM2: Fib18)
27 | class Fib21(val fibM1: Fib20, val fibM2: Fib19)
28 | class Fib22(val fibM1: Fib21, val fibM2: Fib20)
29 | class Fib23(val fibM1: Fib22, val fibM2: Fib21)
30 | class Fib24(val fibM1: Fib23, val fibM2: Fib22)
31 | class Fib25(val fibM1: Fib24, val fibM2: Fib23)
32 | class Fib26(val fibM1: Fib25, val fibM2: Fib24)
33 | class Fib27(val fibM1: Fib26, val fibM2: Fib25)
34 | class Fib28(val fibM1: Fib27, val fibM2: Fib26)
35 | class Fib29(val fibM1: Fib28, val fibM2: Fib27)
36 | class Fib30(val fibM1: Fib29, val fibM2: Fib28)
37 | class Fib31(val fibM1: Fib30, val fibM2: Fib29)
38 | class Fib32(val fibM1: Fib31, val fibM2: Fib30)
39 | class Fib33(val fibM1: Fib32, val fibM2: Fib31)
40 | class Fib34(val fibM1: Fib33, val fibM2: Fib32)
41 | class Fib35(val fibM1: Fib34, val fibM2: Fib33)
42 | class Fib36(val fibM1: Fib35, val fibM2: Fib34)
43 | class Fib37(val fibM1: Fib36, val fibM2: Fib35)
44 | class Fib38(val fibM1: Fib37, val fibM2: Fib36)
45 | class Fib39(val fibM1: Fib38, val fibM2: Fib37)
46 | class Fib40(val fibM1: Fib39, val fibM2: Fib38)
47 | class Fib41(val fibM1: Fib40, val fibM2: Fib39)
48 | class Fib42(val fibM1: Fib41, val fibM2: Fib40)
49 | class Fib43(val fibM1: Fib42, val fibM2: Fib41)
50 | class Fib44(val fibM1: Fib43, val fibM2: Fib42)
51 | class Fib45(val fibM1: Fib44, val fibM2: Fib43)
52 | class Fib46(val fibM1: Fib45, val fibM2: Fib44)
53 | class Fib47(val fibM1: Fib46, val fibM2: Fib45)
54 | class Fib48(val fibM1: Fib47, val fibM2: Fib46)
55 | class Fib49(val fibM1: Fib48, val fibM2: Fib47)
56 | class Fib50(val fibM1: Fib49, val fibM2: Fib48)
57 | class Fib51(val fibM1: Fib50, val fibM2: Fib49)
58 | class Fib52(val fibM1: Fib51, val fibM2: Fib50)
59 | class Fib53(val fibM1: Fib52, val fibM2: Fib51)
60 | class Fib54(val fibM1: Fib53, val fibM2: Fib52)
61 | class Fib55(val fibM1: Fib54, val fibM2: Fib53)
62 | class Fib56(val fibM1: Fib55, val fibM2: Fib54)
63 | class Fib57(val fibM1: Fib56, val fibM2: Fib55)
64 | class Fib58(val fibM1: Fib57, val fibM2: Fib56)
65 | class Fib59(val fibM1: Fib58, val fibM2: Fib57)
66 | class Fib60(val fibM1: Fib59, val fibM2: Fib58)
67 | class Fib61(val fibM1: Fib60, val fibM2: Fib59)
68 | class Fib62(val fibM1: Fib61, val fibM2: Fib60)
69 | class Fib63(val fibM1: Fib62, val fibM2: Fib61)
70 | class Fib64(val fibM1: Fib63, val fibM2: Fib62)
71 | class Fib65(val fibM1: Fib64, val fibM2: Fib63)
72 | class Fib66(val fibM1: Fib65, val fibM2: Fib64)
73 | class Fib67(val fibM1: Fib66, val fibM2: Fib65)
74 | class Fib68(val fibM1: Fib67, val fibM2: Fib66)
75 | class Fib69(val fibM1: Fib68, val fibM2: Fib67)
76 | class Fib70(val fibM1: Fib69, val fibM2: Fib68)
77 | class Fib71(val fibM1: Fib70, val fibM2: Fib69)
78 | class Fib72(val fibM1: Fib71, val fibM2: Fib70)
79 | class Fib73(val fibM1: Fib72, val fibM2: Fib71)
80 | class Fib74(val fibM1: Fib73, val fibM2: Fib72)
81 | class Fib75(val fibM1: Fib74, val fibM2: Fib73)
82 | class Fib76(val fibM1: Fib75, val fibM2: Fib74)
83 | class Fib77(val fibM1: Fib76, val fibM2: Fib75)
84 | class Fib78(val fibM1: Fib77, val fibM2: Fib76)
85 | class Fib79(val fibM1: Fib78, val fibM2: Fib77)
86 | class Fib80(val fibM1: Fib79, val fibM2: Fib78)
87 | class Fib81(val fibM1: Fib80, val fibM2: Fib79)
88 | class Fib82(val fibM1: Fib81, val fibM2: Fib80)
89 | class Fib83(val fibM1: Fib82, val fibM2: Fib81)
90 | class Fib84(val fibM1: Fib83, val fibM2: Fib82)
91 | class Fib85(val fibM1: Fib84, val fibM2: Fib83)
92 | class Fib86(val fibM1: Fib85, val fibM2: Fib84)
93 | class Fib87(val fibM1: Fib86, val fibM2: Fib85)
94 | class Fib88(val fibM1: Fib87, val fibM2: Fib86)
95 | class Fib89(val fibM1: Fib88, val fibM2: Fib87)
96 | class Fib90(val fibM1: Fib89, val fibM2: Fib88)
97 | class Fib91(val fibM1: Fib90, val fibM2: Fib89)
98 | class Fib92(val fibM1: Fib91, val fibM2: Fib90)
99 | class Fib93(val fibM1: Fib92, val fibM2: Fib91)
100 | class Fib94(val fibM1: Fib93, val fibM2: Fib92)
101 | class Fib95(val fibM1: Fib94, val fibM2: Fib93)
102 | class Fib96(val fibM1: Fib95, val fibM2: Fib94)
103 | class Fib97(val fibM1: Fib96, val fibM2: Fib95)
104 | class Fib98(val fibM1: Fib97, val fibM2: Fib96)
105 | class Fib99(val fibM1: Fib98, val fibM2: Fib97)
106 | class Fib100(val fibM1: Fib99, val fibM2: Fib98)
107 | class Fib101(val fibM1: Fib100, val fibM2: Fib99)
108 | class Fib102(val fibM1: Fib101, val fibM2: Fib100)
109 | class Fib103(val fibM1: Fib102, val fibM2: Fib101)
110 | class Fib104(val fibM1: Fib103, val fibM2: Fib102)
111 | class Fib105(val fibM1: Fib104, val fibM2: Fib103)
112 | class Fib106(val fibM1: Fib105, val fibM2: Fib104)
113 | class Fib107(val fibM1: Fib106, val fibM2: Fib105)
114 | class Fib108(val fibM1: Fib107, val fibM2: Fib106)
115 | class Fib109(val fibM1: Fib108, val fibM2: Fib107)
116 | class Fib110(val fibM1: Fib109, val fibM2: Fib108)
117 | class Fib111(val fibM1: Fib110, val fibM2: Fib109)
118 | class Fib112(val fibM1: Fib111, val fibM2: Fib110)
119 | class Fib113(val fibM1: Fib112, val fibM2: Fib111)
120 | class Fib114(val fibM1: Fib113, val fibM2: Fib112)
121 | class Fib115(val fibM1: Fib114, val fibM2: Fib113)
122 | class Fib116(val fibM1: Fib115, val fibM2: Fib114)
123 | class Fib117(val fibM1: Fib116, val fibM2: Fib115)
124 | class Fib118(val fibM1: Fib117, val fibM2: Fib116)
125 | class Fib119(val fibM1: Fib118, val fibM2: Fib117)
126 | class Fib120(val fibM1: Fib119, val fibM2: Fib118)
127 | class Fib121(val fibM1: Fib120, val fibM2: Fib119)
128 | class Fib122(val fibM1: Fib121, val fibM2: Fib120)
129 | class Fib123(val fibM1: Fib122, val fibM2: Fib121)
130 | class Fib124(val fibM1: Fib123, val fibM2: Fib122)
131 | class Fib125(val fibM1: Fib124, val fibM2: Fib123)
132 | class Fib126(val fibM1: Fib125, val fibM2: Fib124)
133 | class Fib127(val fibM1: Fib126, val fibM2: Fib125)
134 | class Fib128(val fibM1: Fib127, val fibM2: Fib126)
135 | class Fib129(val fibM1: Fib128, val fibM2: Fib127)
136 | class Fib130(val fibM1: Fib129, val fibM2: Fib128)
137 | class Fib131(val fibM1: Fib130, val fibM2: Fib129)
138 | class Fib132(val fibM1: Fib131, val fibM2: Fib130)
139 | class Fib133(val fibM1: Fib132, val fibM2: Fib131)
140 | class Fib134(val fibM1: Fib133, val fibM2: Fib132)
141 | class Fib135(val fibM1: Fib134, val fibM2: Fib133)
142 | class Fib136(val fibM1: Fib135, val fibM2: Fib134)
143 | class Fib137(val fibM1: Fib136, val fibM2: Fib135)
144 | class Fib138(val fibM1: Fib137, val fibM2: Fib136)
145 | class Fib139(val fibM1: Fib138, val fibM2: Fib137)
146 | class Fib140(val fibM1: Fib139, val fibM2: Fib138)
147 | class Fib141(val fibM1: Fib140, val fibM2: Fib139)
148 | class Fib142(val fibM1: Fib141, val fibM2: Fib140)
149 | class Fib143(val fibM1: Fib142, val fibM2: Fib141)
150 | class Fib144(val fibM1: Fib143, val fibM2: Fib142)
151 | class Fib145(val fibM1: Fib144, val fibM2: Fib143)
152 | class Fib146(val fibM1: Fib145, val fibM2: Fib144)
153 | class Fib147(val fibM1: Fib146, val fibM2: Fib145)
154 | class Fib148(val fibM1: Fib147, val fibM2: Fib146)
155 | class Fib149(val fibM1: Fib148, val fibM2: Fib147)
156 | class Fib150(val fibM1: Fib149, val fibM2: Fib148)
157 | class Fib151(val fibM1: Fib150, val fibM2: Fib149)
158 | class Fib152(val fibM1: Fib151, val fibM2: Fib150)
159 | class Fib153(val fibM1: Fib152, val fibM2: Fib151)
160 | class Fib154(val fibM1: Fib153, val fibM2: Fib152)
161 | class Fib155(val fibM1: Fib154, val fibM2: Fib153)
162 | class Fib156(val fibM1: Fib155, val fibM2: Fib154)
163 | class Fib157(val fibM1: Fib156, val fibM2: Fib155)
164 | class Fib158(val fibM1: Fib157, val fibM2: Fib156)
165 | class Fib159(val fibM1: Fib158, val fibM2: Fib157)
166 | class Fib160(val fibM1: Fib159, val fibM2: Fib158)
167 | class Fib161(val fibM1: Fib160, val fibM2: Fib159)
168 | class Fib162(val fibM1: Fib161, val fibM2: Fib160)
169 | class Fib163(val fibM1: Fib162, val fibM2: Fib161)
170 | class Fib164(val fibM1: Fib163, val fibM2: Fib162)
171 | class Fib165(val fibM1: Fib164, val fibM2: Fib163)
172 | class Fib166(val fibM1: Fib165, val fibM2: Fib164)
173 | class Fib167(val fibM1: Fib166, val fibM2: Fib165)
174 | class Fib168(val fibM1: Fib167, val fibM2: Fib166)
175 | class Fib169(val fibM1: Fib168, val fibM2: Fib167)
176 | class Fib170(val fibM1: Fib169, val fibM2: Fib168)
177 | class Fib171(val fibM1: Fib170, val fibM2: Fib169)
178 | class Fib172(val fibM1: Fib171, val fibM2: Fib170)
179 | class Fib173(val fibM1: Fib172, val fibM2: Fib171)
180 | class Fib174(val fibM1: Fib173, val fibM2: Fib172)
181 | class Fib175(val fibM1: Fib174, val fibM2: Fib173)
182 | class Fib176(val fibM1: Fib175, val fibM2: Fib174)
183 | class Fib177(val fibM1: Fib176, val fibM2: Fib175)
184 | class Fib178(val fibM1: Fib177, val fibM2: Fib176)
185 | class Fib179(val fibM1: Fib178, val fibM2: Fib177)
186 | class Fib180(val fibM1: Fib179, val fibM2: Fib178)
187 | class Fib181(val fibM1: Fib180, val fibM2: Fib179)
188 | class Fib182(val fibM1: Fib181, val fibM2: Fib180)
189 | class Fib183(val fibM1: Fib182, val fibM2: Fib181)
190 | class Fib184(val fibM1: Fib183, val fibM2: Fib182)
191 | class Fib185(val fibM1: Fib184, val fibM2: Fib183)
192 | class Fib186(val fibM1: Fib185, val fibM2: Fib184)
193 | class Fib187(val fibM1: Fib186, val fibM2: Fib185)
194 | class Fib188(val fibM1: Fib187, val fibM2: Fib186)
195 | class Fib189(val fibM1: Fib188, val fibM2: Fib187)
196 | class Fib190(val fibM1: Fib189, val fibM2: Fib188)
197 | class Fib191(val fibM1: Fib190, val fibM2: Fib189)
198 | class Fib192(val fibM1: Fib191, val fibM2: Fib190)
199 | class Fib193(val fibM1: Fib192, val fibM2: Fib191)
200 | class Fib194(val fibM1: Fib193, val fibM2: Fib192)
201 | class Fib195(val fibM1: Fib194, val fibM2: Fib193)
202 | class Fib196(val fibM1: Fib195, val fibM2: Fib194)
203 | class Fib197(val fibM1: Fib196, val fibM2: Fib195)
204 | class Fib198(val fibM1: Fib197, val fibM2: Fib196)
205 | class Fib199(val fibM1: Fib198, val fibM2: Fib197)
206 | class Fib200(val fibM1: Fib199, val fibM2: Fib198)
207 | class Fib201(val fibM1: Fib200, val fibM2: Fib199)
208 | class Fib202(val fibM1: Fib201, val fibM2: Fib200)
209 | class Fib203(val fibM1: Fib202, val fibM2: Fib201)
210 | class Fib204(val fibM1: Fib203, val fibM2: Fib202)
211 | class Fib205(val fibM1: Fib204, val fibM2: Fib203)
212 | class Fib206(val fibM1: Fib205, val fibM2: Fib204)
213 | class Fib207(val fibM1: Fib206, val fibM2: Fib205)
214 | class Fib208(val fibM1: Fib207, val fibM2: Fib206)
215 | class Fib209(val fibM1: Fib208, val fibM2: Fib207)
216 | class Fib210(val fibM1: Fib209, val fibM2: Fib208)
217 | class Fib211(val fibM1: Fib210, val fibM2: Fib209)
218 | class Fib212(val fibM1: Fib211, val fibM2: Fib210)
219 | class Fib213(val fibM1: Fib212, val fibM2: Fib211)
220 | class Fib214(val fibM1: Fib213, val fibM2: Fib212)
221 | class Fib215(val fibM1: Fib214, val fibM2: Fib213)
222 | class Fib216(val fibM1: Fib215, val fibM2: Fib214)
223 | class Fib217(val fibM1: Fib216, val fibM2: Fib215)
224 | class Fib218(val fibM1: Fib217, val fibM2: Fib216)
225 | class Fib219(val fibM1: Fib218, val fibM2: Fib217)
226 | class Fib220(val fibM1: Fib219, val fibM2: Fib218)
227 | class Fib221(val fibM1: Fib220, val fibM2: Fib219)
228 | class Fib222(val fibM1: Fib221, val fibM2: Fib220)
229 | class Fib223(val fibM1: Fib222, val fibM2: Fib221)
230 | class Fib224(val fibM1: Fib223, val fibM2: Fib222)
231 | class Fib225(val fibM1: Fib224, val fibM2: Fib223)
232 | class Fib226(val fibM1: Fib225, val fibM2: Fib224)
233 | class Fib227(val fibM1: Fib226, val fibM2: Fib225)
234 | class Fib228(val fibM1: Fib227, val fibM2: Fib226)
235 | class Fib229(val fibM1: Fib228, val fibM2: Fib227)
236 | class Fib230(val fibM1: Fib229, val fibM2: Fib228)
237 | class Fib231(val fibM1: Fib230, val fibM2: Fib229)
238 | class Fib232(val fibM1: Fib231, val fibM2: Fib230)
239 | class Fib233(val fibM1: Fib232, val fibM2: Fib231)
240 | class Fib234(val fibM1: Fib233, val fibM2: Fib232)
241 | class Fib235(val fibM1: Fib234, val fibM2: Fib233)
242 | class Fib236(val fibM1: Fib235, val fibM2: Fib234)
243 | class Fib237(val fibM1: Fib236, val fibM2: Fib235)
244 | class Fib238(val fibM1: Fib237, val fibM2: Fib236)
245 | class Fib239(val fibM1: Fib238, val fibM2: Fib237)
246 | class Fib240(val fibM1: Fib239, val fibM2: Fib238)
247 | class Fib241(val fibM1: Fib240, val fibM2: Fib239)
248 | class Fib242(val fibM1: Fib241, val fibM2: Fib240)
249 | class Fib243(val fibM1: Fib242, val fibM2: Fib241)
250 | class Fib244(val fibM1: Fib243, val fibM2: Fib242)
251 | class Fib245(val fibM1: Fib244, val fibM2: Fib243)
252 | class Fib246(val fibM1: Fib245, val fibM2: Fib244)
253 | class Fib247(val fibM1: Fib246, val fibM2: Fib245)
254 | class Fib248(val fibM1: Fib247, val fibM2: Fib246)
255 | class Fib249(val fibM1: Fib248, val fibM2: Fib247)
256 | class Fib250(val fibM1: Fib249, val fibM2: Fib248)
257 | class Fib251(val fibM1: Fib250, val fibM2: Fib249)
258 | class Fib252(val fibM1: Fib251, val fibM2: Fib250)
259 | class Fib253(val fibM1: Fib252, val fibM2: Fib251)
260 | class Fib254(val fibM1: Fib253, val fibM2: Fib252)
261 | class Fib255(val fibM1: Fib254, val fibM2: Fib253)
262 | class Fib256(val fibM1: Fib255, val fibM2: Fib254)
263 | class Fib257(val fibM1: Fib256, val fibM2: Fib255)
264 | class Fib258(val fibM1: Fib257, val fibM2: Fib256)
265 | class Fib259(val fibM1: Fib258, val fibM2: Fib257)
266 | class Fib260(val fibM1: Fib259, val fibM2: Fib258)
267 | class Fib261(val fibM1: Fib260, val fibM2: Fib259)
268 | class Fib262(val fibM1: Fib261, val fibM2: Fib260)
269 | class Fib263(val fibM1: Fib262, val fibM2: Fib261)
270 | class Fib264(val fibM1: Fib263, val fibM2: Fib262)
271 | class Fib265(val fibM1: Fib264, val fibM2: Fib263)
272 | class Fib266(val fibM1: Fib265, val fibM2: Fib264)
273 | class Fib267(val fibM1: Fib266, val fibM2: Fib265)
274 | class Fib268(val fibM1: Fib267, val fibM2: Fib266)
275 | class Fib269(val fibM1: Fib268, val fibM2: Fib267)
276 | class Fib270(val fibM1: Fib269, val fibM2: Fib268)
277 | class Fib271(val fibM1: Fib270, val fibM2: Fib269)
278 | class Fib272(val fibM1: Fib271, val fibM2: Fib270)
279 | class Fib273(val fibM1: Fib272, val fibM2: Fib271)
280 | class Fib274(val fibM1: Fib273, val fibM2: Fib272)
281 | class Fib275(val fibM1: Fib274, val fibM2: Fib273)
282 | class Fib276(val fibM1: Fib275, val fibM2: Fib274)
283 | class Fib277(val fibM1: Fib276, val fibM2: Fib275)
284 | class Fib278(val fibM1: Fib277, val fibM2: Fib276)
285 | class Fib279(val fibM1: Fib278, val fibM2: Fib277)
286 | class Fib280(val fibM1: Fib279, val fibM2: Fib278)
287 | class Fib281(val fibM1: Fib280, val fibM2: Fib279)
288 | class Fib282(val fibM1: Fib281, val fibM2: Fib280)
289 | class Fib283(val fibM1: Fib282, val fibM2: Fib281)
290 | class Fib284(val fibM1: Fib283, val fibM2: Fib282)
291 | class Fib285(val fibM1: Fib284, val fibM2: Fib283)
292 | class Fib286(val fibM1: Fib285, val fibM2: Fib284)
293 | class Fib287(val fibM1: Fib286, val fibM2: Fib285)
294 | class Fib288(val fibM1: Fib287, val fibM2: Fib286)
295 | class Fib289(val fibM1: Fib288, val fibM2: Fib287)
296 | class Fib290(val fibM1: Fib289, val fibM2: Fib288)
297 | class Fib291(val fibM1: Fib290, val fibM2: Fib289)
298 | class Fib292(val fibM1: Fib291, val fibM2: Fib290)
299 | class Fib293(val fibM1: Fib292, val fibM2: Fib291)
300 | class Fib294(val fibM1: Fib293, val fibM2: Fib292)
301 | class Fib295(val fibM1: Fib294, val fibM2: Fib293)
302 | class Fib296(val fibM1: Fib295, val fibM2: Fib294)
303 | class Fib297(val fibM1: Fib296, val fibM2: Fib295)
304 | class Fib298(val fibM1: Fib297, val fibM2: Fib296)
305 | class Fib299(val fibM1: Fib298, val fibM2: Fib297)
306 | class Fib300(val fibM1: Fib299, val fibM2: Fib298)
307 | class Fib301(val fibM1: Fib300, val fibM2: Fib299)
308 | class Fib302(val fibM1: Fib301, val fibM2: Fib300)
309 | class Fib303(val fibM1: Fib302, val fibM2: Fib301)
310 | class Fib304(val fibM1: Fib303, val fibM2: Fib302)
311 | class Fib305(val fibM1: Fib304, val fibM2: Fib303)
312 | class Fib306(val fibM1: Fib305, val fibM2: Fib304)
313 | class Fib307(val fibM1: Fib306, val fibM2: Fib305)
314 | class Fib308(val fibM1: Fib307, val fibM2: Fib306)
315 | class Fib309(val fibM1: Fib308, val fibM2: Fib307)
316 | class Fib310(val fibM1: Fib309, val fibM2: Fib308)
317 | class Fib311(val fibM1: Fib310, val fibM2: Fib309)
318 | class Fib312(val fibM1: Fib311, val fibM2: Fib310)
319 | class Fib313(val fibM1: Fib312, val fibM2: Fib311)
320 | class Fib314(val fibM1: Fib313, val fibM2: Fib312)
321 | class Fib315(val fibM1: Fib314, val fibM2: Fib313)
322 | class Fib316(val fibM1: Fib315, val fibM2: Fib314)
323 | class Fib317(val fibM1: Fib316, val fibM2: Fib315)
324 | class Fib318(val fibM1: Fib317, val fibM2: Fib316)
325 | class Fib319(val fibM1: Fib318, val fibM2: Fib317)
326 | class Fib320(val fibM1: Fib319, val fibM2: Fib318)
327 | class Fib321(val fibM1: Fib320, val fibM2: Fib319)
328 | class Fib322(val fibM1: Fib321, val fibM2: Fib320)
329 | class Fib323(val fibM1: Fib322, val fibM2: Fib321)
330 | class Fib324(val fibM1: Fib323, val fibM2: Fib322)
331 | class Fib325(val fibM1: Fib324, val fibM2: Fib323)
332 | class Fib326(val fibM1: Fib325, val fibM2: Fib324)
333 | class Fib327(val fibM1: Fib326, val fibM2: Fib325)
334 | class Fib328(val fibM1: Fib327, val fibM2: Fib326)
335 | class Fib329(val fibM1: Fib328, val fibM2: Fib327)
336 | class Fib330(val fibM1: Fib329, val fibM2: Fib328)
337 | class Fib331(val fibM1: Fib330, val fibM2: Fib329)
338 | class Fib332(val fibM1: Fib331, val fibM2: Fib330)
339 | class Fib333(val fibM1: Fib332, val fibM2: Fib331)
340 | class Fib334(val fibM1: Fib333, val fibM2: Fib332)
341 | class Fib335(val fibM1: Fib334, val fibM2: Fib333)
342 | class Fib336(val fibM1: Fib335, val fibM2: Fib334)
343 | class Fib337(val fibM1: Fib336, val fibM2: Fib335)
344 | class Fib338(val fibM1: Fib337, val fibM2: Fib336)
345 | class Fib339(val fibM1: Fib338, val fibM2: Fib337)
346 | class Fib340(val fibM1: Fib339, val fibM2: Fib338)
347 | class Fib341(val fibM1: Fib340, val fibM2: Fib339)
348 | class Fib342(val fibM1: Fib341, val fibM2: Fib340)
349 | class Fib343(val fibM1: Fib342, val fibM2: Fib341)
350 | class Fib344(val fibM1: Fib343, val fibM2: Fib342)
351 | class Fib345(val fibM1: Fib344, val fibM2: Fib343)
352 | class Fib346(val fibM1: Fib345, val fibM2: Fib344)
353 | class Fib347(val fibM1: Fib346, val fibM2: Fib345)
354 | class Fib348(val fibM1: Fib347, val fibM2: Fib346)
355 | class Fib349(val fibM1: Fib348, val fibM2: Fib347)
356 | class Fib350(val fibM1: Fib349, val fibM2: Fib348)
357 | class Fib351(val fibM1: Fib350, val fibM2: Fib349)
358 | class Fib352(val fibM1: Fib351, val fibM2: Fib350)
359 | class Fib353(val fibM1: Fib352, val fibM2: Fib351)
360 | class Fib354(val fibM1: Fib353, val fibM2: Fib352)
361 | class Fib355(val fibM1: Fib354, val fibM2: Fib353)
362 | class Fib356(val fibM1: Fib355, val fibM2: Fib354)
363 | class Fib357(val fibM1: Fib356, val fibM2: Fib355)
364 | class Fib358(val fibM1: Fib357, val fibM2: Fib356)
365 | class Fib359(val fibM1: Fib358, val fibM2: Fib357)
366 | class Fib360(val fibM1: Fib359, val fibM2: Fib358)
367 | class Fib361(val fibM1: Fib360, val fibM2: Fib359)
368 | class Fib362(val fibM1: Fib361, val fibM2: Fib360)
369 | class Fib363(val fibM1: Fib362, val fibM2: Fib361)
370 | class Fib364(val fibM1: Fib363, val fibM2: Fib362)
371 | class Fib365(val fibM1: Fib364, val fibM2: Fib363)
372 | class Fib366(val fibM1: Fib365, val fibM2: Fib364)
373 | class Fib367(val fibM1: Fib366, val fibM2: Fib365)
374 | class Fib368(val fibM1: Fib367, val fibM2: Fib366)
375 | class Fib369(val fibM1: Fib368, val fibM2: Fib367)
376 | class Fib370(val fibM1: Fib369, val fibM2: Fib368)
377 | class Fib371(val fibM1: Fib370, val fibM2: Fib369)
378 | class Fib372(val fibM1: Fib371, val fibM2: Fib370)
379 | class Fib373(val fibM1: Fib372, val fibM2: Fib371)
380 | class Fib374(val fibM1: Fib373, val fibM2: Fib372)
381 | class Fib375(val fibM1: Fib374, val fibM2: Fib373)
382 | class Fib376(val fibM1: Fib375, val fibM2: Fib374)
383 | class Fib377(val fibM1: Fib376, val fibM2: Fib375)
384 | class Fib378(val fibM1: Fib377, val fibM2: Fib376)
385 | class Fib379(val fibM1: Fib378, val fibM2: Fib377)
386 | class Fib380(val fibM1: Fib379, val fibM2: Fib378)
387 | class Fib381(val fibM1: Fib380, val fibM2: Fib379)
388 | class Fib382(val fibM1: Fib381, val fibM2: Fib380)
389 | class Fib383(val fibM1: Fib382, val fibM2: Fib381)
390 | class Fib384(val fibM1: Fib383, val fibM2: Fib382)
391 | class Fib385(val fibM1: Fib384, val fibM2: Fib383)
392 | class Fib386(val fibM1: Fib385, val fibM2: Fib384)
393 | class Fib387(val fibM1: Fib386, val fibM2: Fib385)
394 | class Fib388(val fibM1: Fib387, val fibM2: Fib386)
395 | class Fib389(val fibM1: Fib388, val fibM2: Fib387)
396 | class Fib390(val fibM1: Fib389, val fibM2: Fib388)
397 | class Fib391(val fibM1: Fib390, val fibM2: Fib389)
398 | class Fib392(val fibM1: Fib391, val fibM2: Fib390)
399 | class Fib393(val fibM1: Fib392, val fibM2: Fib391)
400 | class Fib394(val fibM1: Fib393, val fibM2: Fib392)
401 | class Fib395(val fibM1: Fib394, val fibM2: Fib393)
402 | class Fib396(val fibM1: Fib395, val fibM2: Fib394)
403 | class Fib397(val fibM1: Fib396, val fibM2: Fib395)
404 | class Fib398(val fibM1: Fib397, val fibM2: Fib396)
405 | class Fib399(val fibM1: Fib398, val fibM2: Fib397)
406 | class Fib400(val fibM1: Fib399, val fibM2: Fib398)
407 | class Fib401(val fibM1: Fib400, val fibM2: Fib399)
408 | class Fib402(val fibM1: Fib401, val fibM2: Fib400)
409 | class Fib403(val fibM1: Fib402, val fibM2: Fib401)
410 | class Fib404(val fibM1: Fib403, val fibM2: Fib402)
411 | class Fib405(val fibM1: Fib404, val fibM2: Fib403)
412 | class Fib406(val fibM1: Fib405, val fibM2: Fib404)
413 | class Fib407(val fibM1: Fib406, val fibM2: Fib405)
414 | class Fib408(val fibM1: Fib407, val fibM2: Fib406)
415 | class Fib409(val fibM1: Fib408, val fibM2: Fib407)
416 | class Fib410(val fibM1: Fib409, val fibM2: Fib408)
417 | class Fib411(val fibM1: Fib410, val fibM2: Fib409)
418 | class Fib412(val fibM1: Fib411, val fibM2: Fib410)
419 | class Fib413(val fibM1: Fib412, val fibM2: Fib411)
420 | class Fib414(val fibM1: Fib413, val fibM2: Fib412)
421 | class Fib415(val fibM1: Fib414, val fibM2: Fib413)
422 | class Fib416(val fibM1: Fib415, val fibM2: Fib414)
423 | class Fib417(val fibM1: Fib416, val fibM2: Fib415)
424 | class Fib418(val fibM1: Fib417, val fibM2: Fib416)
425 | class Fib419(val fibM1: Fib418, val fibM2: Fib417)
426 | class Fib420(val fibM1: Fib419, val fibM2: Fib418)
427 | class Fib421(val fibM1: Fib420, val fibM2: Fib419)
428 | class Fib422(val fibM1: Fib421, val fibM2: Fib420)
429 | class Fib423(val fibM1: Fib422, val fibM2: Fib421)
430 | class Fib424(val fibM1: Fib423, val fibM2: Fib422)
431 | class Fib425(val fibM1: Fib424, val fibM2: Fib423)
432 | class Fib426(val fibM1: Fib425, val fibM2: Fib424)
433 | class Fib427(val fibM1: Fib426, val fibM2: Fib425)
434 | class Fib428(val fibM1: Fib427, val fibM2: Fib426)
435 | class Fib429(val fibM1: Fib428, val fibM2: Fib427)
436 | class Fib430(val fibM1: Fib429, val fibM2: Fib428)
437 | class Fib431(val fibM1: Fib430, val fibM2: Fib429)
438 | class Fib432(val fibM1: Fib431, val fibM2: Fib430)
439 | class Fib433(val fibM1: Fib432, val fibM2: Fib431)
440 | class Fib434(val fibM1: Fib433, val fibM2: Fib432)
441 | class Fib435(val fibM1: Fib434, val fibM2: Fib433)
442 | class Fib436(val fibM1: Fib435, val fibM2: Fib434)
443 | class Fib437(val fibM1: Fib436, val fibM2: Fib435)
444 | class Fib438(val fibM1: Fib437, val fibM2: Fib436)
445 | class Fib439(val fibM1: Fib438, val fibM2: Fib437)
446 | class Fib440(val fibM1: Fib439, val fibM2: Fib438)
447 | class Fib441(val fibM1: Fib440, val fibM2: Fib439)
448 | class Fib442(val fibM1: Fib441, val fibM2: Fib440)
449 | class Fib443(val fibM1: Fib442, val fibM2: Fib441)
450 | class Fib444(val fibM1: Fib443, val fibM2: Fib442)
451 | class Fib445(val fibM1: Fib444, val fibM2: Fib443)
452 | class Fib446(val fibM1: Fib445, val fibM2: Fib444)
453 | class Fib447(val fibM1: Fib446, val fibM2: Fib445)
454 | class Fib448(val fibM1: Fib447, val fibM2: Fib446)
455 | class Fib449(val fibM1: Fib448, val fibM2: Fib447)
456 | class Fib450(val fibM1: Fib449, val fibM2: Fib448)
457 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/InjectionTest.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance
2 |
3 | import android.os.Build
4 | import com.sloydev.dependencyinjectionperformance.custom.DIContainer
5 | import com.sloydev.dependencyinjectionperformance.custom.customJavaModule
6 | import com.sloydev.dependencyinjectionperformance.custom.customKotlinModule
7 | import com.sloydev.dependencyinjectionperformance.dagger2.DaggerJavaDaggerComponent
8 | import com.sloydev.dependencyinjectionperformance.dagger2.DaggerKotlinDaggerComponent
9 | import com.sloydev.dependencyinjectionperformance.dagger2.JavaDaggerComponent
10 | import com.sloydev.dependencyinjectionperformance.dagger2.KotlinDaggerComponent
11 | import com.sloydev.dependencyinjectionperformance.katana.katanaJavaModule
12 | import com.sloydev.dependencyinjectionperformance.katana.katanaKotlinModule
13 | import com.sloydev.dependencyinjectionperformance.koin.koinJavaModule
14 | import com.sloydev.dependencyinjectionperformance.koin.koinKotlinModule
15 | import org.kodein.di.Kodein
16 | import org.kodein.di.direct
17 | import org.kodein.di.erased.instance
18 | import org.koin.core.Koin
19 | import org.koin.core.context.startKoin
20 | import org.koin.core.context.stopKoin
21 | import org.rewedigital.katana.Component
22 | import org.rewedigital.katana.Katana
23 | import org.rewedigital.katana.android.environment.AndroidEnvironmentContext
24 | import org.rewedigital.katana.android.environment.AndroidEnvironmentContext.Profile.SPEED
25 | import org.rewedigital.katana.createComponent
26 | import javax.inject.Inject
27 |
28 | class InjectionTest {
29 |
30 | private val kotlinDaggerTest = KotlinDaggerTest()
31 | private val javaDaggerTest = JavaDaggerTest()
32 |
33 | private val rounds = 100
34 |
35 | fun runTests() {
36 | val results = listOf(
37 | customTest(),
38 | koinTest(),
39 | kodeinTest(),
40 | katanaTest(),
41 | daggerTest()
42 | )
43 | reportMarkdown(results)
44 | }
45 |
46 | private fun reportMarkdown(results: List) {
47 | log("Done!")
48 | log(" ")
49 | log("${Build.BRAND} ${Build.DEVICE} with Android ${Build.VERSION.RELEASE}")
50 | log(" ")
51 | log("Library | Setup Kotlin | Setup Java | Inject Kotlin | Inject Java")
52 | log("--- | ---:| ---:| ---:| ---:")
53 | results.forEach {
54 | log("**${it.injectorName}** | ${it[Variant.KOTLIN].startupTime.median().format()} | ${it[Variant.JAVA].startupTime.median().format()} | ${it[Variant.KOTLIN].injectionTime.median().format()} | ${it[Variant.JAVA].injectionTime.median().format()}")
55 | }
56 | }
57 |
58 | private fun runTest(
59 | setup: () -> Unit,
60 | test: () -> Unit,
61 | teardown: () -> Unit = {}
62 | ): TestResult {
63 | val startup = (1..rounds).map { measureTime { setup() }.also { teardown() } }
64 | setup()
65 |
66 | val testDurations = (1..rounds).map { measureTime { test() } }
67 | teardown()
68 | return TestResult(startup, testDurations)
69 | }
70 |
71 | private fun koinTest(): LibraryResult {
72 | log("Running Koin...")
73 | lateinit var koin: Koin
74 | return LibraryResult("Koin", mapOf(
75 | Variant.KOTLIN to runTest(
76 | setup = {
77 | koin = startKoin {
78 | modules(koinKotlinModule)
79 | }.koin
80 | },
81 | test = { koin.get() },
82 | teardown = { stopKoin() }
83 | ),
84 | Variant.JAVA to runTest(
85 | setup = {
86 | koin = startKoin {
87 | modules(koinJavaModule)
88 | }.koin
89 | },
90 | test = { koin.get() },
91 | teardown = { stopKoin() }
92 | )
93 | ))
94 | }
95 |
96 | private fun kodeinTest(): LibraryResult {
97 | log("Running Kodein...")
98 | lateinit var kodein: Kodein
99 | return LibraryResult("Kodein", mapOf(
100 | Variant.KOTLIN to runTest(
101 | setup = { kodein = Kodein { import(kodeinKotlinModule) } },
102 | test = { kodein.direct.instance() }
103 | ),
104 | Variant.JAVA to runTest(
105 | setup = { kodein = Kodein { import(kodeinKotlinModule) } },
106 | test = { kodein.direct.instance() }
107 | )
108 | ))
109 | }
110 |
111 | private fun katanaTest(): LibraryResult {
112 | log("Running Katana...")
113 | Katana.environmentContext = AndroidEnvironmentContext(profile = SPEED)
114 | lateinit var component: Component
115 | return LibraryResult("Katana", mapOf(
116 | Variant.KOTLIN to runTest(
117 | setup = { component = createComponent(modules = listOf(katanaKotlinModule)) },
118 | test = { component.injectNow() }
119 | ),
120 | Variant.JAVA to runTest(
121 | setup = { component = createComponent(modules = listOf(katanaJavaModule)) },
122 | test = { component.injectNow() }
123 | )
124 | ))
125 | }
126 |
127 | private fun customTest(): LibraryResult {
128 | log("Running Custom...")
129 | return LibraryResult("Custom", mapOf(
130 | Variant.KOTLIN to runTest(
131 | setup = { DIContainer.loadModule(customKotlinModule) },
132 | test = { DIContainer.get() },
133 | teardown = { DIContainer.unloadModules() }
134 | ),
135 | Variant.JAVA to runTest(
136 | setup = { DIContainer.loadModule(customJavaModule) },
137 | test = { DIContainer.get() },
138 | teardown = { DIContainer.unloadModules() }
139 | )
140 | ))
141 | }
142 |
143 | private fun daggerTest(): LibraryResult {
144 | log("Running Dagger...")
145 | lateinit var kotlinComponent: KotlinDaggerComponent
146 | lateinit var javaComponent: JavaDaggerComponent
147 | return LibraryResult("Dagger", mapOf(
148 | Variant.KOTLIN to runTest(
149 | setup = { kotlinComponent = DaggerKotlinDaggerComponent.create() },
150 | test = { kotlinComponent.inject(kotlinDaggerTest) }
151 | ),
152 | Variant.JAVA to runTest(
153 | setup = { javaComponent = DaggerJavaDaggerComponent.create() },
154 | test = { javaComponent.inject(javaDaggerTest) }
155 | )
156 | ))
157 | }
158 |
159 | class KotlinDaggerTest {
160 | @Inject
161 | lateinit var daggerFib8: Fib8
162 | }
163 |
164 | class JavaDaggerTest {
165 | @Inject
166 | lateinit var daggerFib8: FibonacciJava.Fib8
167 | }
168 | }
169 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/Main.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance
2 |
3 | import com.sloydev.dependencyinjectionperformance.koin.koinKotlinModule
4 | import org.koin.dsl.koinApplication
5 |
6 | fun main(vararg args: String) {
7 | val koin = koinApplication {
8 | modules(koinKotlinModule)
9 | }.koin
10 | koin.get()
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance
2 |
3 | import android.os.Bundle
4 | import androidx.appcompat.app.AppCompatActivity
5 | import com.google.android.material.snackbar.Snackbar
6 | import kotlinx.android.synthetic.main.activity_main.*
7 |
8 | class MainActivity : AppCompatActivity() {
9 |
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | setContentView(R.layout.activity_main)
13 | setSupportActionBar(toolbar)
14 |
15 | fab.setOnClickListener { view ->
16 | Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
17 | .setAction("Action", null).show()
18 | }
19 |
20 | InjectionTest().runTests()
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/Utilities.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance
2 |
3 | import android.util.Log
4 | import java.util.*
5 | import kotlin.system.measureNanoTime
6 |
7 | typealias Milliseconds = Double
8 |
9 | data class LibraryResult(val injectorName: String, val results: Map) {
10 | operator fun get(variant: Variant) = results[variant]!!
11 | }
12 |
13 | data class TestResult(
14 | val startupTime: List,
15 | val injectionTime: List
16 | )
17 |
18 | enum class Variant {
19 | KOTLIN, JAVA
20 | }
21 |
22 | fun Milliseconds?.format() = String.format(Locale.ENGLISH, "%.2f ms", this)
23 |
24 | fun measureTime(block: () -> Unit): Milliseconds = measureNanoTime(block) / 1000000.0
25 |
26 | fun List.median() = sorted().let { (it[it.size / 2] + it[(it.size - 1) / 2]) / 2 }
27 |
28 |
29 | fun log(msg: String) {
30 | Log.i("DI-TEST", msg)
31 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/custom/CustomDI.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance.custom
2 |
3 | import kotlin.reflect.KClass
4 |
5 | data class DefinitionKey(val clazz: Class, val name: String?)
6 |
7 | sealed class Definition(val key: DefinitionKey, val create: () -> T) {
8 |
9 | class Factory(key: DefinitionKey, create: () -> T) : Definition(key, create)
10 |
11 | class Singleton(key: DefinitionKey, create: () -> T) : Definition(key, create)
12 | }
13 |
14 | class Module(val definitions: List>)
15 |
16 | class ModuleBuilder(val definitions: MutableList>) {
17 | inline fun factory(name: String? = null, noinline block: () -> T): Definition.Factory {
18 | val factory = Definition.Factory(DefinitionKey(T::class.java, name), block)
19 | definitions += factory
20 | return factory
21 | }
22 |
23 | inline fun single(name: String? = null, noinline block: () -> T): Definition.Singleton {
24 | val singleton = Definition.Singleton(DefinitionKey(T::class.java, name), block)
25 | definitions += singleton
26 | return singleton
27 | }
28 |
29 | inline fun get(name: String? = null) = DIContainer.get(name)
30 |
31 | inline infix fun Definition.bind(iface: KClass) {
32 | definitions += Definition.Factory(DefinitionKey(iface.java, null)) { get(key.name) }
33 | }
34 | }
35 |
36 | fun module(block: ModuleBuilder.() -> Unit): Module {
37 | val builder = ModuleBuilder(arrayListOf())
38 | builder.block()
39 | return Module(builder.definitions)
40 | }
41 |
42 | object DIContainer {
43 |
44 | private val definitions: MutableMap, Definition<*>> = HashMap()
45 | private val singletons: MutableMap, Any> = HashMap()
46 |
47 | fun loadModules(modules: List) {
48 | modules.forEach { loadModule(it) }
49 | }
50 |
51 | fun loadModule(module: Module) {
52 | module.definitions.forEach {
53 | definitions[it.key] = it
54 | singletons.remove(it.key)
55 | }
56 | }
57 |
58 | fun unloadModules() {
59 | definitions.clear()
60 | singletons.clear()
61 | }
62 |
63 | inline fun get(name: String? = null) = get(T::class.java, name)
64 |
65 | inline fun inject(name: String? = null) = inject(T::class.java, name)
66 |
67 | @JvmStatic
68 | @JvmOverloads
69 | fun get(clazz: Class, name: String? = null): T {
70 | val key = DefinitionKey(clazz, name)
71 | val singleton = singletons[key]
72 | if (singleton != null) {
73 | return singleton as T
74 | }
75 |
76 | val definition: Definition? = definitions[key] as Definition?
77 | if (definition != null) {
78 | val instance: T = definition.create()
79 | if (definition is Definition.Singleton) {
80 | singletons[key] = instance
81 | }
82 | return instance
83 | } else {
84 | throw IllegalStateException("No definition found for ${clazz.canonicalName} with name $name")
85 | }
86 | }
87 |
88 | @JvmStatic
89 | @JvmOverloads
90 | fun inject(clazz: Class, name: String? = null): Lazy {
91 | return lazy { get(clazz, name) }
92 | }
93 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/custom/CustomJavaModule.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance.custom
2 |
3 | import com.sloydev.dependencyinjectionperformance.FibonacciJava
4 |
5 |
6 | val customJavaModule = module {
7 | factory { FibonacciJava.Fib1() }
8 | factory { FibonacciJava.Fib2() }
9 | factory { FibonacciJava.Fib3(get(), get()) }
10 | factory { FibonacciJava.Fib4(get(), get()) }
11 | factory { FibonacciJava.Fib5(get(), get()) }
12 | factory { FibonacciJava.Fib6(get(), get()) }
13 | factory { FibonacciJava.Fib7(get(), get()) }
14 | factory { FibonacciJava.Fib8(get(), get()) }
15 | factory { FibonacciJava.Fib9(get(), get()) }
16 | factory { FibonacciJava.Fib10(get(), get()) }
17 | factory { FibonacciJava.Fib11(get(), get()) }
18 | factory { FibonacciJava.Fib12(get(), get()) }
19 | factory { FibonacciJava.Fib13(get(), get()) }
20 | factory { FibonacciJava.Fib14(get(), get()) }
21 | factory { FibonacciJava.Fib15(get(), get()) }
22 | factory { FibonacciJava.Fib16(get(), get()) }
23 | factory { FibonacciJava.Fib17(get(), get()) }
24 | factory { FibonacciJava.Fib18(get(), get()) }
25 | factory { FibonacciJava.Fib19(get(), get()) }
26 | factory { FibonacciJava.Fib20(get(), get()) }
27 | factory { FibonacciJava.Fib21(get(), get()) }
28 | factory { FibonacciJava.Fib22(get(), get()) }
29 | factory { FibonacciJava.Fib23(get(), get()) }
30 | factory { FibonacciJava.Fib24(get(), get()) }
31 | factory { FibonacciJava.Fib25(get(), get()) }
32 | factory { FibonacciJava.Fib26(get(), get()) }
33 | factory { FibonacciJava.Fib27(get(), get()) }
34 | factory { FibonacciJava.Fib28(get(), get()) }
35 | factory { FibonacciJava.Fib29(get(), get()) }
36 | factory { FibonacciJava.Fib30(get(), get()) }
37 | factory { FibonacciJava.Fib31(get(), get()) }
38 | factory { FibonacciJava.Fib32(get(), get()) }
39 | factory { FibonacciJava.Fib33(get(), get()) }
40 | factory { FibonacciJava.Fib34(get(), get()) }
41 | factory { FibonacciJava.Fib35(get(), get()) }
42 | factory { FibonacciJava.Fib36(get(), get()) }
43 | factory { FibonacciJava.Fib37(get(), get()) }
44 | factory { FibonacciJava.Fib38(get(), get()) }
45 | factory { FibonacciJava.Fib39(get(), get()) }
46 | factory { FibonacciJava.Fib40(get(), get()) }
47 | factory { FibonacciJava.Fib41(get(), get()) }
48 | factory { FibonacciJava.Fib42(get(), get()) }
49 | factory { FibonacciJava.Fib43(get(), get()) }
50 | factory { FibonacciJava.Fib44(get(), get()) }
51 | factory { FibonacciJava.Fib45(get(), get()) }
52 | factory { FibonacciJava.Fib46(get(), get()) }
53 | factory { FibonacciJava.Fib47(get(), get()) }
54 | factory { FibonacciJava.Fib48(get(), get()) }
55 | factory { FibonacciJava.Fib49(get(), get()) }
56 | factory { FibonacciJava.Fib50(get(), get()) }
57 | factory { FibonacciJava.Fib51(get(), get()) }
58 | factory { FibonacciJava.Fib52(get(), get()) }
59 | factory { FibonacciJava.Fib53(get(), get()) }
60 | factory { FibonacciJava.Fib54(get(), get()) }
61 | factory { FibonacciJava.Fib55(get(), get()) }
62 | factory { FibonacciJava.Fib56(get(), get()) }
63 | factory { FibonacciJava.Fib57(get(), get()) }
64 | factory { FibonacciJava.Fib58(get(), get()) }
65 | factory { FibonacciJava.Fib59(get(), get()) }
66 | factory { FibonacciJava.Fib60(get(), get()) }
67 | factory { FibonacciJava.Fib61(get(), get()) }
68 | factory { FibonacciJava.Fib62(get(), get()) }
69 | factory { FibonacciJava.Fib63(get(), get()) }
70 | factory { FibonacciJava.Fib64(get(), get()) }
71 | factory { FibonacciJava.Fib65(get(), get()) }
72 | factory { FibonacciJava.Fib66(get(), get()) }
73 | factory { FibonacciJava.Fib67(get(), get()) }
74 | factory { FibonacciJava.Fib68(get(), get()) }
75 | factory { FibonacciJava.Fib69(get(), get()) }
76 | factory { FibonacciJava.Fib70(get(), get()) }
77 | factory { FibonacciJava.Fib71(get(), get()) }
78 | factory { FibonacciJava.Fib72(get(), get()) }
79 | factory { FibonacciJava.Fib73(get(), get()) }
80 | factory { FibonacciJava.Fib74(get(), get()) }
81 | factory { FibonacciJava.Fib75(get(), get()) }
82 | factory { FibonacciJava.Fib76(get(), get()) }
83 | factory { FibonacciJava.Fib77(get(), get()) }
84 | factory { FibonacciJava.Fib78(get(), get()) }
85 | factory { FibonacciJava.Fib79(get(), get()) }
86 | factory { FibonacciJava.Fib80(get(), get()) }
87 | factory { FibonacciJava.Fib81(get(), get()) }
88 | factory { FibonacciJava.Fib82(get(), get()) }
89 | factory { FibonacciJava.Fib83(get(), get()) }
90 | factory { FibonacciJava.Fib84(get(), get()) }
91 | factory { FibonacciJava.Fib85(get(), get()) }
92 | factory { FibonacciJava.Fib86(get(), get()) }
93 | factory { FibonacciJava.Fib87(get(), get()) }
94 | factory { FibonacciJava.Fib88(get(), get()) }
95 | factory { FibonacciJava.Fib89(get(), get()) }
96 | factory { FibonacciJava.Fib90(get(), get()) }
97 | factory { FibonacciJava.Fib91(get(), get()) }
98 | factory { FibonacciJava.Fib92(get(), get()) }
99 | factory { FibonacciJava.Fib93(get(), get()) }
100 | factory { FibonacciJava.Fib94(get(), get()) }
101 | factory { FibonacciJava.Fib95(get(), get()) }
102 | factory { FibonacciJava.Fib96(get(), get()) }
103 | factory { FibonacciJava.Fib97(get(), get()) }
104 | factory { FibonacciJava.Fib98(get(), get()) }
105 | factory { FibonacciJava.Fib99(get(), get()) }
106 | factory { FibonacciJava.Fib100(get(), get()) }
107 | factory { FibonacciJava.Fib101(get(), get()) }
108 | factory { FibonacciJava.Fib102(get(), get()) }
109 | factory { FibonacciJava.Fib103(get(), get()) }
110 | factory { FibonacciJava.Fib104(get(), get()) }
111 | factory { FibonacciJava.Fib105(get(), get()) }
112 | factory { FibonacciJava.Fib106(get(), get()) }
113 | factory { FibonacciJava.Fib107(get(), get()) }
114 | factory { FibonacciJava.Fib108(get(), get()) }
115 | factory { FibonacciJava.Fib109(get(), get()) }
116 | factory { FibonacciJava.Fib110(get(), get()) }
117 | factory { FibonacciJava.Fib111(get(), get()) }
118 | factory { FibonacciJava.Fib112(get(), get()) }
119 | factory { FibonacciJava.Fib113(get(), get()) }
120 | factory { FibonacciJava.Fib114(get(), get()) }
121 | factory { FibonacciJava.Fib115(get(), get()) }
122 | factory { FibonacciJava.Fib116(get(), get()) }
123 | factory { FibonacciJava.Fib117(get(), get()) }
124 | factory { FibonacciJava.Fib118(get(), get()) }
125 | factory { FibonacciJava.Fib119(get(), get()) }
126 | factory { FibonacciJava.Fib120(get(), get()) }
127 | factory { FibonacciJava.Fib121(get(), get()) }
128 | factory { FibonacciJava.Fib122(get(), get()) }
129 | factory { FibonacciJava.Fib123(get(), get()) }
130 | factory { FibonacciJava.Fib124(get(), get()) }
131 | factory { FibonacciJava.Fib125(get(), get()) }
132 | factory { FibonacciJava.Fib126(get(), get()) }
133 | factory { FibonacciJava.Fib127(get(), get()) }
134 | factory { FibonacciJava.Fib128(get(), get()) }
135 | factory { FibonacciJava.Fib129(get(), get()) }
136 | factory { FibonacciJava.Fib130(get(), get()) }
137 | factory { FibonacciJava.Fib131(get(), get()) }
138 | factory { FibonacciJava.Fib132(get(), get()) }
139 | factory { FibonacciJava.Fib133(get(), get()) }
140 | factory { FibonacciJava.Fib134(get(), get()) }
141 | factory { FibonacciJava.Fib135(get(), get()) }
142 | factory { FibonacciJava.Fib136(get(), get()) }
143 | factory { FibonacciJava.Fib137(get(), get()) }
144 | factory { FibonacciJava.Fib138(get(), get()) }
145 | factory { FibonacciJava.Fib139(get(), get()) }
146 | factory { FibonacciJava.Fib140(get(), get()) }
147 | factory { FibonacciJava.Fib141(get(), get()) }
148 | factory { FibonacciJava.Fib142(get(), get()) }
149 | factory { FibonacciJava.Fib143(get(), get()) }
150 | factory { FibonacciJava.Fib144(get(), get()) }
151 | factory { FibonacciJava.Fib145(get(), get()) }
152 | factory { FibonacciJava.Fib146(get(), get()) }
153 | factory { FibonacciJava.Fib147(get(), get()) }
154 | factory { FibonacciJava.Fib148(get(), get()) }
155 | factory { FibonacciJava.Fib149(get(), get()) }
156 | factory { FibonacciJava.Fib150(get(), get()) }
157 | factory { FibonacciJava.Fib151(get(), get()) }
158 | factory { FibonacciJava.Fib152(get(), get()) }
159 | factory { FibonacciJava.Fib153(get(), get()) }
160 | factory { FibonacciJava.Fib154(get(), get()) }
161 | factory { FibonacciJava.Fib155(get(), get()) }
162 | factory { FibonacciJava.Fib156(get(), get()) }
163 | factory { FibonacciJava.Fib157(get(), get()) }
164 | factory { FibonacciJava.Fib158(get(), get()) }
165 | factory { FibonacciJava.Fib159(get(), get()) }
166 | factory { FibonacciJava.Fib160(get(), get()) }
167 | factory { FibonacciJava.Fib161(get(), get()) }
168 | factory { FibonacciJava.Fib162(get(), get()) }
169 | factory { FibonacciJava.Fib163(get(), get()) }
170 | factory { FibonacciJava.Fib164(get(), get()) }
171 | factory { FibonacciJava.Fib165(get(), get()) }
172 | factory { FibonacciJava.Fib166(get(), get()) }
173 | factory { FibonacciJava.Fib167(get(), get()) }
174 | factory { FibonacciJava.Fib168(get(), get()) }
175 | factory { FibonacciJava.Fib169(get(), get()) }
176 | factory { FibonacciJava.Fib170(get(), get()) }
177 | factory { FibonacciJava.Fib171(get(), get()) }
178 | factory { FibonacciJava.Fib172(get(), get()) }
179 | factory { FibonacciJava.Fib173(get(), get()) }
180 | factory { FibonacciJava.Fib174(get(), get()) }
181 | factory { FibonacciJava.Fib175(get(), get()) }
182 | factory { FibonacciJava.Fib176(get(), get()) }
183 | factory { FibonacciJava.Fib177(get(), get()) }
184 | factory { FibonacciJava.Fib178(get(), get()) }
185 | factory { FibonacciJava.Fib179(get(), get()) }
186 | factory { FibonacciJava.Fib180(get(), get()) }
187 | factory { FibonacciJava.Fib181(get(), get()) }
188 | factory { FibonacciJava.Fib182(get(), get()) }
189 | factory { FibonacciJava.Fib183(get(), get()) }
190 | factory { FibonacciJava.Fib184(get(), get()) }
191 | factory { FibonacciJava.Fib185(get(), get()) }
192 | factory { FibonacciJava.Fib186(get(), get()) }
193 | factory { FibonacciJava.Fib187(get(), get()) }
194 | factory { FibonacciJava.Fib188(get(), get()) }
195 | factory { FibonacciJava.Fib189(get(), get()) }
196 | factory { FibonacciJava.Fib190(get(), get()) }
197 | factory { FibonacciJava.Fib191(get(), get()) }
198 | factory { FibonacciJava.Fib192(get(), get()) }
199 | factory { FibonacciJava.Fib193(get(), get()) }
200 | factory { FibonacciJava.Fib194(get(), get()) }
201 | factory { FibonacciJava.Fib195(get(), get()) }
202 | factory { FibonacciJava.Fib196(get(), get()) }
203 | factory { FibonacciJava.Fib197(get(), get()) }
204 | factory { FibonacciJava.Fib198(get(), get()) }
205 | factory { FibonacciJava.Fib199(get(), get()) }
206 | factory { FibonacciJava.Fib200(get(), get()) }
207 | factory { FibonacciJava.Fib201(get(), get()) }
208 | factory { FibonacciJava.Fib202(get(), get()) }
209 | factory { FibonacciJava.Fib203(get(), get()) }
210 | factory { FibonacciJava.Fib204(get(), get()) }
211 | factory { FibonacciJava.Fib205(get(), get()) }
212 | factory { FibonacciJava.Fib206(get(), get()) }
213 | factory { FibonacciJava.Fib207(get(), get()) }
214 | factory { FibonacciJava.Fib208(get(), get()) }
215 | factory { FibonacciJava.Fib209(get(), get()) }
216 | factory { FibonacciJava.Fib210(get(), get()) }
217 | factory { FibonacciJava.Fib211(get(), get()) }
218 | factory { FibonacciJava.Fib212(get(), get()) }
219 | factory { FibonacciJava.Fib213(get(), get()) }
220 | factory { FibonacciJava.Fib214(get(), get()) }
221 | factory { FibonacciJava.Fib215(get(), get()) }
222 | factory { FibonacciJava.Fib216(get(), get()) }
223 | factory { FibonacciJava.Fib217(get(), get()) }
224 | factory { FibonacciJava.Fib218(get(), get()) }
225 | factory { FibonacciJava.Fib219(get(), get()) }
226 | factory { FibonacciJava.Fib220(get(), get()) }
227 | factory { FibonacciJava.Fib221(get(), get()) }
228 | factory { FibonacciJava.Fib222(get(), get()) }
229 | factory { FibonacciJava.Fib223(get(), get()) }
230 | factory { FibonacciJava.Fib224(get(), get()) }
231 | factory { FibonacciJava.Fib225(get(), get()) }
232 | factory { FibonacciJava.Fib226(get(), get()) }
233 | factory { FibonacciJava.Fib227(get(), get()) }
234 | factory { FibonacciJava.Fib228(get(), get()) }
235 | factory { FibonacciJava.Fib229(get(), get()) }
236 | factory { FibonacciJava.Fib230(get(), get()) }
237 | factory { FibonacciJava.Fib231(get(), get()) }
238 | factory { FibonacciJava.Fib232(get(), get()) }
239 | factory { FibonacciJava.Fib233(get(), get()) }
240 | factory { FibonacciJava.Fib234(get(), get()) }
241 | factory { FibonacciJava.Fib235(get(), get()) }
242 | factory { FibonacciJava.Fib236(get(), get()) }
243 | factory { FibonacciJava.Fib237(get(), get()) }
244 | factory { FibonacciJava.Fib238(get(), get()) }
245 | factory { FibonacciJava.Fib239(get(), get()) }
246 | factory { FibonacciJava.Fib240(get(), get()) }
247 | factory { FibonacciJava.Fib241(get(), get()) }
248 | factory { FibonacciJava.Fib242(get(), get()) }
249 | factory { FibonacciJava.Fib243(get(), get()) }
250 | factory { FibonacciJava.Fib244(get(), get()) }
251 | factory { FibonacciJava.Fib245(get(), get()) }
252 | factory { FibonacciJava.Fib246(get(), get()) }
253 | factory { FibonacciJava.Fib247(get(), get()) }
254 | factory { FibonacciJava.Fib248(get(), get()) }
255 | factory { FibonacciJava.Fib249(get(), get()) }
256 | factory { FibonacciJava.Fib250(get(), get()) }
257 | factory { FibonacciJava.Fib251(get(), get()) }
258 | factory { FibonacciJava.Fib252(get(), get()) }
259 | factory { FibonacciJava.Fib253(get(), get()) }
260 | factory { FibonacciJava.Fib254(get(), get()) }
261 | factory { FibonacciJava.Fib255(get(), get()) }
262 | factory { FibonacciJava.Fib256(get(), get()) }
263 | factory { FibonacciJava.Fib257(get(), get()) }
264 | factory { FibonacciJava.Fib258(get(), get()) }
265 | factory { FibonacciJava.Fib259(get(), get()) }
266 | factory { FibonacciJava.Fib260(get(), get()) }
267 | factory { FibonacciJava.Fib261(get(), get()) }
268 | factory { FibonacciJava.Fib262(get(), get()) }
269 | factory { FibonacciJava.Fib263(get(), get()) }
270 | factory { FibonacciJava.Fib264(get(), get()) }
271 | factory { FibonacciJava.Fib265(get(), get()) }
272 | factory { FibonacciJava.Fib266(get(), get()) }
273 | factory { FibonacciJava.Fib267(get(), get()) }
274 | factory { FibonacciJava.Fib268(get(), get()) }
275 | factory { FibonacciJava.Fib269(get(), get()) }
276 | factory { FibonacciJava.Fib270(get(), get()) }
277 | factory { FibonacciJava.Fib271(get(), get()) }
278 | factory { FibonacciJava.Fib272(get(), get()) }
279 | factory { FibonacciJava.Fib273(get(), get()) }
280 | factory { FibonacciJava.Fib274(get(), get()) }
281 | factory { FibonacciJava.Fib275(get(), get()) }
282 | factory { FibonacciJava.Fib276(get(), get()) }
283 | factory { FibonacciJava.Fib277(get(), get()) }
284 | factory { FibonacciJava.Fib278(get(), get()) }
285 | factory { FibonacciJava.Fib279(get(), get()) }
286 | factory { FibonacciJava.Fib280(get(), get()) }
287 | factory { FibonacciJava.Fib281(get(), get()) }
288 | factory { FibonacciJava.Fib282(get(), get()) }
289 | factory { FibonacciJava.Fib283(get(), get()) }
290 | factory { FibonacciJava.Fib284(get(), get()) }
291 | factory { FibonacciJava.Fib285(get(), get()) }
292 | factory { FibonacciJava.Fib286(get(), get()) }
293 | factory { FibonacciJava.Fib287(get(), get()) }
294 | factory { FibonacciJava.Fib288(get(), get()) }
295 | factory { FibonacciJava.Fib289(get(), get()) }
296 | factory { FibonacciJava.Fib290(get(), get()) }
297 | factory { FibonacciJava.Fib291(get(), get()) }
298 | factory { FibonacciJava.Fib292(get(), get()) }
299 | factory { FibonacciJava.Fib293(get(), get()) }
300 | factory { FibonacciJava.Fib294(get(), get()) }
301 | factory { FibonacciJava.Fib295(get(), get()) }
302 | factory { FibonacciJava.Fib296(get(), get()) }
303 | factory { FibonacciJava.Fib297(get(), get()) }
304 | factory { FibonacciJava.Fib298(get(), get()) }
305 | factory { FibonacciJava.Fib299(get(), get()) }
306 | factory { FibonacciJava.Fib300(get(), get()) }
307 | factory { FibonacciJava.Fib301(get(), get()) }
308 | factory { FibonacciJava.Fib302(get(), get()) }
309 | factory { FibonacciJava.Fib303(get(), get()) }
310 | factory { FibonacciJava.Fib304(get(), get()) }
311 | factory { FibonacciJava.Fib305(get(), get()) }
312 | factory { FibonacciJava.Fib306(get(), get()) }
313 | factory { FibonacciJava.Fib307(get(), get()) }
314 | factory { FibonacciJava.Fib308(get(), get()) }
315 | factory { FibonacciJava.Fib309(get(), get()) }
316 | factory { FibonacciJava.Fib310(get(), get()) }
317 | factory { FibonacciJava.Fib311(get(), get()) }
318 | factory { FibonacciJava.Fib312(get(), get()) }
319 | factory { FibonacciJava.Fib313(get(), get()) }
320 | factory { FibonacciJava.Fib314(get(), get()) }
321 | factory { FibonacciJava.Fib315(get(), get()) }
322 | factory { FibonacciJava.Fib316(get(), get()) }
323 | factory { FibonacciJava.Fib317(get(), get()) }
324 | factory { FibonacciJava.Fib318(get(), get()) }
325 | factory { FibonacciJava.Fib319(get(), get()) }
326 | factory { FibonacciJava.Fib320(get(), get()) }
327 | factory { FibonacciJava.Fib321(get(), get()) }
328 | factory { FibonacciJava.Fib322(get(), get()) }
329 | factory { FibonacciJava.Fib323(get(), get()) }
330 | factory { FibonacciJava.Fib324(get(), get()) }
331 | factory { FibonacciJava.Fib325(get(), get()) }
332 | factory { FibonacciJava.Fib326(get(), get()) }
333 | factory { FibonacciJava.Fib327(get(), get()) }
334 | factory { FibonacciJava.Fib328(get(), get()) }
335 | factory { FibonacciJava.Fib329(get(), get()) }
336 | factory { FibonacciJava.Fib330(get(), get()) }
337 | factory { FibonacciJava.Fib331(get(), get()) }
338 | factory { FibonacciJava.Fib332(get(), get()) }
339 | factory { FibonacciJava.Fib333(get(), get()) }
340 | factory { FibonacciJava.Fib334(get(), get()) }
341 | factory { FibonacciJava.Fib335(get(), get()) }
342 | factory { FibonacciJava.Fib336(get(), get()) }
343 | factory { FibonacciJava.Fib337(get(), get()) }
344 | factory { FibonacciJava.Fib338(get(), get()) }
345 | factory { FibonacciJava.Fib339(get(), get()) }
346 | factory { FibonacciJava.Fib340(get(), get()) }
347 | factory { FibonacciJava.Fib341(get(), get()) }
348 | factory { FibonacciJava.Fib342(get(), get()) }
349 | factory { FibonacciJava.Fib343(get(), get()) }
350 | factory { FibonacciJava.Fib344(get(), get()) }
351 | factory { FibonacciJava.Fib345(get(), get()) }
352 | factory { FibonacciJava.Fib346(get(), get()) }
353 | factory { FibonacciJava.Fib347(get(), get()) }
354 | factory { FibonacciJava.Fib348(get(), get()) }
355 | factory { FibonacciJava.Fib349(get(), get()) }
356 | factory { FibonacciJava.Fib350(get(), get()) }
357 | factory { FibonacciJava.Fib351(get(), get()) }
358 | factory { FibonacciJava.Fib352(get(), get()) }
359 | factory { FibonacciJava.Fib353(get(), get()) }
360 | factory { FibonacciJava.Fib354(get(), get()) }
361 | factory { FibonacciJava.Fib355(get(), get()) }
362 | factory { FibonacciJava.Fib356(get(), get()) }
363 | factory { FibonacciJava.Fib357(get(), get()) }
364 | factory { FibonacciJava.Fib358(get(), get()) }
365 | factory { FibonacciJava.Fib359(get(), get()) }
366 | factory { FibonacciJava.Fib360(get(), get()) }
367 | factory { FibonacciJava.Fib361(get(), get()) }
368 | factory { FibonacciJava.Fib362(get(), get()) }
369 | factory { FibonacciJava.Fib363(get(), get()) }
370 | factory { FibonacciJava.Fib364(get(), get()) }
371 | factory { FibonacciJava.Fib365(get(), get()) }
372 | factory { FibonacciJava.Fib366(get(), get()) }
373 | factory { FibonacciJava.Fib367(get(), get()) }
374 | factory { FibonacciJava.Fib368(get(), get()) }
375 | factory { FibonacciJava.Fib369(get(), get()) }
376 | factory { FibonacciJava.Fib370(get(), get()) }
377 | factory { FibonacciJava.Fib371(get(), get()) }
378 | factory { FibonacciJava.Fib372(get(), get()) }
379 | factory { FibonacciJava.Fib373(get(), get()) }
380 | factory { FibonacciJava.Fib374(get(), get()) }
381 | factory { FibonacciJava.Fib375(get(), get()) }
382 | factory { FibonacciJava.Fib376(get(), get()) }
383 | factory { FibonacciJava.Fib377(get(), get()) }
384 | factory { FibonacciJava.Fib378(get(), get()) }
385 | factory { FibonacciJava.Fib379(get(), get()) }
386 | factory { FibonacciJava.Fib380(get(), get()) }
387 | factory { FibonacciJava.Fib381(get(), get()) }
388 | factory { FibonacciJava.Fib382(get(), get()) }
389 | factory { FibonacciJava.Fib383(get(), get()) }
390 | factory { FibonacciJava.Fib384(get(), get()) }
391 | factory { FibonacciJava.Fib385(get(), get()) }
392 | factory { FibonacciJava.Fib386(get(), get()) }
393 | factory { FibonacciJava.Fib387(get(), get()) }
394 | factory { FibonacciJava.Fib388(get(), get()) }
395 | factory { FibonacciJava.Fib389(get(), get()) }
396 | factory { FibonacciJava.Fib390(get(), get()) }
397 | factory { FibonacciJava.Fib391(get(), get()) }
398 | factory { FibonacciJava.Fib392(get(), get()) }
399 | factory { FibonacciJava.Fib393(get(), get()) }
400 | factory { FibonacciJava.Fib394(get(), get()) }
401 | factory { FibonacciJava.Fib395(get(), get()) }
402 | factory { FibonacciJava.Fib396(get(), get()) }
403 | factory { FibonacciJava.Fib397(get(), get()) }
404 | factory { FibonacciJava.Fib398(get(), get()) }
405 | factory { FibonacciJava.Fib399(get(), get()) }
406 | factory { FibonacciJava.Fib400(get(), get()) }
407 | factory { FibonacciJava.Fib401(get(), get()) }
408 | factory { FibonacciJava.Fib402(get(), get()) }
409 | factory { FibonacciJava.Fib403(get(), get()) }
410 | factory { FibonacciJava.Fib404(get(), get()) }
411 | factory { FibonacciJava.Fib405(get(), get()) }
412 | factory { FibonacciJava.Fib406(get(), get()) }
413 | factory { FibonacciJava.Fib407(get(), get()) }
414 | factory { FibonacciJava.Fib408(get(), get()) }
415 | factory { FibonacciJava.Fib409(get(), get()) }
416 | factory { FibonacciJava.Fib410(get(), get()) }
417 | factory { FibonacciJava.Fib411(get(), get()) }
418 | factory { FibonacciJava.Fib412(get(), get()) }
419 | factory { FibonacciJava.Fib413(get(), get()) }
420 | factory { FibonacciJava.Fib414(get(), get()) }
421 | factory { FibonacciJava.Fib415(get(), get()) }
422 | factory { FibonacciJava.Fib416(get(), get()) }
423 | factory { FibonacciJava.Fib417(get(), get()) }
424 | factory { FibonacciJava.Fib418(get(), get()) }
425 | factory { FibonacciJava.Fib419(get(), get()) }
426 | factory { FibonacciJava.Fib420(get(), get()) }
427 | factory { FibonacciJava.Fib421(get(), get()) }
428 | factory { FibonacciJava.Fib422(get(), get()) }
429 | factory { FibonacciJava.Fib423(get(), get()) }
430 | factory { FibonacciJava.Fib424(get(), get()) }
431 | factory { FibonacciJava.Fib425(get(), get()) }
432 | factory { FibonacciJava.Fib426(get(), get()) }
433 | factory { FibonacciJava.Fib427(get(), get()) }
434 | factory { FibonacciJava.Fib428(get(), get()) }
435 | factory { FibonacciJava.Fib429(get(), get()) }
436 | factory { FibonacciJava.Fib430(get(), get()) }
437 | factory { FibonacciJava.Fib431(get(), get()) }
438 | factory { FibonacciJava.Fib432(get(), get()) }
439 | factory { FibonacciJava.Fib433(get(), get()) }
440 | factory { FibonacciJava.Fib434(get(), get()) }
441 | factory { FibonacciJava.Fib435(get(), get()) }
442 | factory { FibonacciJava.Fib436(get(), get()) }
443 | factory { FibonacciJava.Fib437(get(), get()) }
444 | factory { FibonacciJava.Fib438(get(), get()) }
445 | factory { FibonacciJava.Fib439(get(), get()) }
446 | factory { FibonacciJava.Fib440(get(), get()) }
447 | factory { FibonacciJava.Fib441(get(), get()) }
448 | factory { FibonacciJava.Fib442(get(), get()) }
449 | factory { FibonacciJava.Fib443(get(), get()) }
450 | factory { FibonacciJava.Fib444(get(), get()) }
451 | factory { FibonacciJava.Fib445(get(), get()) }
452 | factory { FibonacciJava.Fib446(get(), get()) }
453 | factory { FibonacciJava.Fib447(get(), get()) }
454 | factory { FibonacciJava.Fib448(get(), get()) }
455 | factory { FibonacciJava.Fib449(get(), get()) }
456 | factory { FibonacciJava.Fib450(get(), get()) }
457 |
458 | }
459 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/custom/CustomKotlinModule.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance.custom
2 |
3 | import com.sloydev.dependencyinjectionperformance.*
4 |
5 | val customKotlinModule = module {
6 | single { Fib1() }
7 | single { Fib2() }
8 | factory { Fib3(get(), get()) }
9 | factory { Fib4(get(), get()) }
10 | factory { Fib5(get(), get()) }
11 | factory { Fib6(get(), get()) }
12 | factory { Fib7(get(), get()) }
13 | factory { Fib8(get(), get()) }
14 | factory { Fib9(get(), get()) }
15 | factory { Fib10(get(), get()) }
16 | factory { Fib11(get(), get()) }
17 | factory { Fib12(get(), get()) }
18 | factory { Fib13(get(), get()) }
19 | factory { Fib14(get(), get()) }
20 | factory { Fib15(get(), get()) }
21 | factory { Fib16(get(), get()) }
22 | factory { Fib17(get(), get()) }
23 | factory { Fib18(get(), get()) }
24 | factory { Fib19(get(), get()) }
25 | factory { Fib20(get(), get()) }
26 | factory { Fib21(get(), get()) }
27 | factory { Fib22(get(), get()) }
28 | factory { Fib23(get(), get()) }
29 | factory { Fib24(get(), get()) }
30 | factory { Fib25(get(), get()) }
31 | factory { Fib26(get(), get()) }
32 | factory { Fib27(get(), get()) }
33 | factory { Fib28(get(), get()) }
34 | factory { Fib29(get(), get()) }
35 | factory { Fib30(get(), get()) }
36 | factory { Fib31(get(), get()) }
37 | factory { Fib32(get(), get()) }
38 | factory { Fib33(get(), get()) }
39 | factory { Fib34(get(), get()) }
40 | factory { Fib35(get(), get()) }
41 | factory { Fib36(get(), get()) }
42 | factory { Fib37(get(), get()) }
43 | factory { Fib38(get(), get()) }
44 | factory { Fib39(get(), get()) }
45 | factory { Fib40(get(), get()) }
46 | factory { Fib41(get(), get()) }
47 | factory { Fib42(get(), get()) }
48 | factory { Fib43(get(), get()) }
49 | factory { Fib44(get(), get()) }
50 | factory { Fib45(get(), get()) }
51 | factory { Fib46(get(), get()) }
52 | factory { Fib47(get(), get()) }
53 | factory { Fib48(get(), get()) }
54 | factory { Fib49(get(), get()) }
55 | factory { Fib50(get(), get()) }
56 | factory { Fib51(get(), get()) }
57 | factory { Fib52(get(), get()) }
58 | factory { Fib53(get(), get()) }
59 | factory { Fib54(get(), get()) }
60 | factory { Fib55(get(), get()) }
61 | factory { Fib56(get(), get()) }
62 | factory { Fib57(get(), get()) }
63 | factory { Fib58(get(), get()) }
64 | factory { Fib59(get(), get()) }
65 | factory { Fib60(get(), get()) }
66 | factory { Fib61(get(), get()) }
67 | factory { Fib62(get(), get()) }
68 | factory { Fib63(get(), get()) }
69 | factory { Fib64(get(), get()) }
70 | factory { Fib65(get(), get()) }
71 | factory { Fib66(get(), get()) }
72 | factory { Fib67(get(), get()) }
73 | factory { Fib68(get(), get()) }
74 | factory { Fib69(get(), get()) }
75 | factory { Fib70(get(), get()) }
76 | factory { Fib71(get(), get()) }
77 | factory { Fib72(get(), get()) }
78 | factory { Fib73(get(), get()) }
79 | factory { Fib74(get(), get()) }
80 | factory { Fib75(get(), get()) }
81 | factory { Fib76(get(), get()) }
82 | factory { Fib77(get(), get()) }
83 | factory { Fib78(get(), get()) }
84 | factory { Fib79(get(), get()) }
85 | factory { Fib80(get(), get()) }
86 | factory { Fib81(get(), get()) }
87 | factory { Fib82(get(), get()) }
88 | factory { Fib83(get(), get()) }
89 | factory { Fib84(get(), get()) }
90 | factory { Fib85(get(), get()) }
91 | factory { Fib86(get(), get()) }
92 | factory { Fib87(get(), get()) }
93 | factory { Fib88(get(), get()) }
94 | factory { Fib89(get(), get()) }
95 | factory { Fib90(get(), get()) }
96 | factory { Fib91(get(), get()) }
97 | factory { Fib92(get(), get()) }
98 | factory { Fib93(get(), get()) }
99 | factory { Fib94(get(), get()) }
100 | factory { Fib95(get(), get()) }
101 | factory { Fib96(get(), get()) }
102 | factory { Fib97(get(), get()) }
103 | factory { Fib98(get(), get()) }
104 | factory { Fib99(get(), get()) }
105 | factory { Fib100(get(), get()) }
106 | factory { Fib101(get(), get()) }
107 | factory { Fib102(get(), get()) }
108 | factory { Fib103(get(), get()) }
109 | factory { Fib104(get(), get()) }
110 | factory { Fib105(get(), get()) }
111 | factory { Fib106(get(), get()) }
112 | factory { Fib107(get(), get()) }
113 | factory { Fib108(get(), get()) }
114 | factory { Fib109(get(), get()) }
115 | factory { Fib110(get(), get()) }
116 | factory { Fib111(get(), get()) }
117 | factory { Fib112(get(), get()) }
118 | factory { Fib113(get(), get()) }
119 | factory { Fib114(get(), get()) }
120 | factory { Fib115(get(), get()) }
121 | factory { Fib116(get(), get()) }
122 | factory { Fib117(get(), get()) }
123 | factory { Fib118(get(), get()) }
124 | factory { Fib119(get(), get()) }
125 | factory { Fib120(get(), get()) }
126 | factory { Fib121(get(), get()) }
127 | factory { Fib122(get(), get()) }
128 | factory { Fib123(get(), get()) }
129 | factory { Fib124(get(), get()) }
130 | factory { Fib125(get(), get()) }
131 | factory { Fib126(get(), get()) }
132 | factory { Fib127(get(), get()) }
133 | factory { Fib128(get(), get()) }
134 | factory { Fib129(get(), get()) }
135 | factory { Fib130(get(), get()) }
136 | factory { Fib131(get(), get()) }
137 | factory { Fib132(get(), get()) }
138 | factory { Fib133(get(), get()) }
139 | factory { Fib134(get(), get()) }
140 | factory { Fib135(get(), get()) }
141 | factory { Fib136(get(), get()) }
142 | factory { Fib137(get(), get()) }
143 | factory { Fib138(get(), get()) }
144 | factory { Fib139(get(), get()) }
145 | factory { Fib140(get(), get()) }
146 | factory { Fib141(get(), get()) }
147 | factory { Fib142(get(), get()) }
148 | factory { Fib143(get(), get()) }
149 | factory { Fib144(get(), get()) }
150 | factory { Fib145(get(), get()) }
151 | factory { Fib146(get(), get()) }
152 | factory { Fib147(get(), get()) }
153 | factory { Fib148(get(), get()) }
154 | factory { Fib149(get(), get()) }
155 | factory { Fib150(get(), get()) }
156 | factory { Fib151(get(), get()) }
157 | factory { Fib152(get(), get()) }
158 | factory { Fib153(get(), get()) }
159 | factory { Fib154(get(), get()) }
160 | factory { Fib155(get(), get()) }
161 | factory { Fib156(get(), get()) }
162 | factory { Fib157(get(), get()) }
163 | factory { Fib158(get(), get()) }
164 | factory { Fib159(get(), get()) }
165 | factory { Fib160(get(), get()) }
166 | factory { Fib161(get(), get()) }
167 | factory { Fib162(get(), get()) }
168 | factory { Fib163(get(), get()) }
169 | factory { Fib164(get(), get()) }
170 | factory { Fib165(get(), get()) }
171 | factory { Fib166(get(), get()) }
172 | factory { Fib167(get(), get()) }
173 | factory { Fib168(get(), get()) }
174 | factory { Fib169(get(), get()) }
175 | factory { Fib170(get(), get()) }
176 | factory { Fib171(get(), get()) }
177 | factory { Fib172(get(), get()) }
178 | factory { Fib173(get(), get()) }
179 | factory { Fib174(get(), get()) }
180 | factory { Fib175(get(), get()) }
181 | factory { Fib176(get(), get()) }
182 | factory { Fib177(get(), get()) }
183 | factory { Fib178(get(), get()) }
184 | factory { Fib179(get(), get()) }
185 | factory { Fib180(get(), get()) }
186 | factory { Fib181(get(), get()) }
187 | factory { Fib182(get(), get()) }
188 | factory { Fib183(get(), get()) }
189 | factory { Fib184(get(), get()) }
190 | factory { Fib185(get(), get()) }
191 | factory { Fib186(get(), get()) }
192 | factory { Fib187(get(), get()) }
193 | factory { Fib188(get(), get()) }
194 | factory { Fib189(get(), get()) }
195 | factory { Fib190(get(), get()) }
196 | factory { Fib191(get(), get()) }
197 | factory { Fib192(get(), get()) }
198 | factory { Fib193(get(), get()) }
199 | factory { Fib194(get(), get()) }
200 | factory { Fib195(get(), get()) }
201 | factory { Fib196(get(), get()) }
202 | factory { Fib197(get(), get()) }
203 | factory { Fib198(get(), get()) }
204 | factory { Fib199(get(), get()) }
205 | factory { Fib200(get(), get()) }
206 | factory { Fib201(get(), get()) }
207 | factory { Fib202(get(), get()) }
208 | factory { Fib203(get(), get()) }
209 | factory { Fib204(get(), get()) }
210 | factory { Fib205(get(), get()) }
211 | factory { Fib206(get(), get()) }
212 | factory { Fib207(get(), get()) }
213 | factory { Fib208(get(), get()) }
214 | factory { Fib209(get(), get()) }
215 | factory { Fib210(get(), get()) }
216 | factory { Fib211(get(), get()) }
217 | factory { Fib212(get(), get()) }
218 | factory { Fib213(get(), get()) }
219 | factory { Fib214(get(), get()) }
220 | factory { Fib215(get(), get()) }
221 | factory { Fib216(get(), get()) }
222 | factory { Fib217(get(), get()) }
223 | factory { Fib218(get(), get()) }
224 | factory { Fib219(get(), get()) }
225 | factory { Fib220(get(), get()) }
226 | factory { Fib221(get(), get()) }
227 | factory { Fib222(get(), get()) }
228 | factory { Fib223(get(), get()) }
229 | factory { Fib224(get(), get()) }
230 | factory { Fib225(get(), get()) }
231 | factory { Fib226(get(), get()) }
232 | factory { Fib227(get(), get()) }
233 | factory { Fib228(get(), get()) }
234 | factory { Fib229(get(), get()) }
235 | factory { Fib230(get(), get()) }
236 | factory { Fib231(get(), get()) }
237 | factory { Fib232(get(), get()) }
238 | factory { Fib233(get(), get()) }
239 | factory { Fib234(get(), get()) }
240 | factory { Fib235(get(), get()) }
241 | factory { Fib236(get(), get()) }
242 | factory { Fib237(get(), get()) }
243 | factory { Fib238(get(), get()) }
244 | factory { Fib239(get(), get()) }
245 | factory { Fib240(get(), get()) }
246 | factory { Fib241(get(), get()) }
247 | factory { Fib242(get(), get()) }
248 | factory { Fib243(get(), get()) }
249 | factory { Fib244(get(), get()) }
250 | factory { Fib245(get(), get()) }
251 | factory { Fib246(get(), get()) }
252 | factory { Fib247(get(), get()) }
253 | factory { Fib248(get(), get()) }
254 | factory { Fib249(get(), get()) }
255 | factory { Fib250(get(), get()) }
256 | factory { Fib251(get(), get()) }
257 | factory { Fib252(get(), get()) }
258 | factory { Fib253(get(), get()) }
259 | factory { Fib254(get(), get()) }
260 | factory { Fib255(get(), get()) }
261 | factory { Fib256(get(), get()) }
262 | factory { Fib257(get(), get()) }
263 | factory { Fib258(get(), get()) }
264 | factory { Fib259(get(), get()) }
265 | factory { Fib260(get(), get()) }
266 | factory { Fib261(get(), get()) }
267 | factory { Fib262(get(), get()) }
268 | factory { Fib263(get(), get()) }
269 | factory { Fib264(get(), get()) }
270 | factory { Fib265(get(), get()) }
271 | factory { Fib266(get(), get()) }
272 | factory { Fib267(get(), get()) }
273 | factory { Fib268(get(), get()) }
274 | factory { Fib269(get(), get()) }
275 | factory { Fib270(get(), get()) }
276 | factory { Fib271(get(), get()) }
277 | factory { Fib272(get(), get()) }
278 | factory { Fib273(get(), get()) }
279 | factory { Fib274(get(), get()) }
280 | factory { Fib275(get(), get()) }
281 | factory { Fib276(get(), get()) }
282 | factory { Fib277(get(), get()) }
283 | factory { Fib278(get(), get()) }
284 | factory { Fib279(get(), get()) }
285 | factory { Fib280(get(), get()) }
286 | factory { Fib281(get(), get()) }
287 | factory { Fib282(get(), get()) }
288 | factory { Fib283(get(), get()) }
289 | factory { Fib284(get(), get()) }
290 | factory { Fib285(get(), get()) }
291 | factory { Fib286(get(), get()) }
292 | factory { Fib287(get(), get()) }
293 | factory { Fib288(get(), get()) }
294 | factory { Fib289(get(), get()) }
295 | factory { Fib290(get(), get()) }
296 | factory { Fib291(get(), get()) }
297 | factory { Fib292(get(), get()) }
298 | factory { Fib293(get(), get()) }
299 | factory { Fib294(get(), get()) }
300 | factory { Fib295(get(), get()) }
301 | factory { Fib296(get(), get()) }
302 | factory { Fib297(get(), get()) }
303 | factory { Fib298(get(), get()) }
304 | factory { Fib299(get(), get()) }
305 | factory { Fib300(get(), get()) }
306 | factory { Fib301(get(), get()) }
307 | factory { Fib302(get(), get()) }
308 | factory { Fib303(get(), get()) }
309 | factory { Fib304(get(), get()) }
310 | factory { Fib305(get(), get()) }
311 | factory { Fib306(get(), get()) }
312 | factory { Fib307(get(), get()) }
313 | factory { Fib308(get(), get()) }
314 | factory { Fib309(get(), get()) }
315 | factory { Fib310(get(), get()) }
316 | factory { Fib311(get(), get()) }
317 | factory { Fib312(get(), get()) }
318 | factory { Fib313(get(), get()) }
319 | factory { Fib314(get(), get()) }
320 | factory { Fib315(get(), get()) }
321 | factory { Fib316(get(), get()) }
322 | factory { Fib317(get(), get()) }
323 | factory { Fib318(get(), get()) }
324 | factory { Fib319(get(), get()) }
325 | factory { Fib320(get(), get()) }
326 | factory { Fib321(get(), get()) }
327 | factory { Fib322(get(), get()) }
328 | factory { Fib323(get(), get()) }
329 | factory { Fib324(get(), get()) }
330 | factory { Fib325(get(), get()) }
331 | factory { Fib326(get(), get()) }
332 | factory { Fib327(get(), get()) }
333 | factory { Fib328(get(), get()) }
334 | factory { Fib329(get(), get()) }
335 | factory { Fib330(get(), get()) }
336 | factory { Fib331(get(), get()) }
337 | factory { Fib332(get(), get()) }
338 | factory { Fib333(get(), get()) }
339 | factory { Fib334(get(), get()) }
340 | factory { Fib335(get(), get()) }
341 | factory { Fib336(get(), get()) }
342 | factory { Fib337(get(), get()) }
343 | factory { Fib338(get(), get()) }
344 | factory { Fib339(get(), get()) }
345 | factory { Fib340(get(), get()) }
346 | factory { Fib341(get(), get()) }
347 | factory { Fib342(get(), get()) }
348 | factory { Fib343(get(), get()) }
349 | factory { Fib344(get(), get()) }
350 | factory { Fib345(get(), get()) }
351 | factory { Fib346(get(), get()) }
352 | factory { Fib347(get(), get()) }
353 | factory { Fib348(get(), get()) }
354 | factory { Fib349(get(), get()) }
355 | factory { Fib350(get(), get()) }
356 | factory { Fib351(get(), get()) }
357 | factory { Fib352(get(), get()) }
358 | factory { Fib353(get(), get()) }
359 | factory { Fib354(get(), get()) }
360 | factory { Fib355(get(), get()) }
361 | factory { Fib356(get(), get()) }
362 | factory { Fib357(get(), get()) }
363 | factory { Fib358(get(), get()) }
364 | factory { Fib359(get(), get()) }
365 | factory { Fib360(get(), get()) }
366 | factory { Fib361(get(), get()) }
367 | factory { Fib362(get(), get()) }
368 | factory { Fib363(get(), get()) }
369 | factory { Fib364(get(), get()) }
370 | factory { Fib365(get(), get()) }
371 | factory { Fib366(get(), get()) }
372 | factory { Fib367(get(), get()) }
373 | factory { Fib368(get(), get()) }
374 | factory { Fib369(get(), get()) }
375 | factory { Fib370(get(), get()) }
376 | factory { Fib371(get(), get()) }
377 | factory { Fib372(get(), get()) }
378 | factory { Fib373(get(), get()) }
379 | factory { Fib374(get(), get()) }
380 | factory { Fib375(get(), get()) }
381 | factory { Fib376(get(), get()) }
382 | factory { Fib377(get(), get()) }
383 | factory { Fib378(get(), get()) }
384 | factory { Fib379(get(), get()) }
385 | factory { Fib380(get(), get()) }
386 | factory { Fib381(get(), get()) }
387 | factory { Fib382(get(), get()) }
388 | factory { Fib383(get(), get()) }
389 | factory { Fib384(get(), get()) }
390 | factory { Fib385(get(), get()) }
391 | factory { Fib386(get(), get()) }
392 | factory { Fib387(get(), get()) }
393 | factory { Fib388(get(), get()) }
394 | factory { Fib389(get(), get()) }
395 | factory { Fib390(get(), get()) }
396 | factory { Fib391(get(), get()) }
397 | factory { Fib392(get(), get()) }
398 | factory { Fib393(get(), get()) }
399 | factory { Fib394(get(), get()) }
400 | factory { Fib395(get(), get()) }
401 | factory { Fib396(get(), get()) }
402 | factory { Fib397(get(), get()) }
403 | factory { Fib398(get(), get()) }
404 | factory { Fib399(get(), get()) }
405 | factory { Fib400(get(), get()) }
406 | factory { Fib401(get(), get()) }
407 | factory { Fib402(get(), get()) }
408 | factory { Fib403(get(), get()) }
409 | factory { Fib404(get(), get()) }
410 | factory { Fib405(get(), get()) }
411 | factory { Fib406(get(), get()) }
412 | factory { Fib407(get(), get()) }
413 | factory { Fib408(get(), get()) }
414 | factory { Fib409(get(), get()) }
415 | factory { Fib410(get(), get()) }
416 | factory { Fib411(get(), get()) }
417 | factory { Fib412(get(), get()) }
418 | factory { Fib413(get(), get()) }
419 | factory { Fib414(get(), get()) }
420 | factory { Fib415(get(), get()) }
421 | factory { Fib416(get(), get()) }
422 | factory { Fib417(get(), get()) }
423 | factory { Fib418(get(), get()) }
424 | factory { Fib419(get(), get()) }
425 | factory { Fib420(get(), get()) }
426 | factory { Fib421(get(), get()) }
427 | factory { Fib422(get(), get()) }
428 | factory { Fib423(get(), get()) }
429 | factory { Fib424(get(), get()) }
430 | factory { Fib425(get(), get()) }
431 | factory { Fib426(get(), get()) }
432 | factory { Fib427(get(), get()) }
433 | factory { Fib428(get(), get()) }
434 | factory { Fib429(get(), get()) }
435 | factory { Fib430(get(), get()) }
436 | factory { Fib431(get(), get()) }
437 | factory { Fib432(get(), get()) }
438 | factory { Fib433(get(), get()) }
439 | factory { Fib434(get(), get()) }
440 | factory { Fib435(get(), get()) }
441 | factory { Fib436(get(), get()) }
442 | factory { Fib437(get(), get()) }
443 | factory { Fib438(get(), get()) }
444 | factory { Fib439(get(), get()) }
445 | factory { Fib440(get(), get()) }
446 | factory { Fib441(get(), get()) }
447 | factory { Fib442(get(), get()) }
448 | factory { Fib443(get(), get()) }
449 | factory { Fib444(get(), get()) }
450 | factory { Fib445(get(), get()) }
451 | factory { Fib446(get(), get()) }
452 | factory { Fib447(get(), get()) }
453 | factory { Fib448(get(), get()) }
454 | factory { Fib449(get(), get()) }
455 | factory { Fib450(get(), get()) }
456 | }
457 |
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/dagger2/DaggerComponent.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance.dagger2
2 |
3 | import com.sloydev.dependencyinjectionperformance.InjectionTest
4 | import dagger.Component
5 |
6 | @Component(modules = [KotlinDaggerModule::class])
7 | interface KotlinDaggerComponent {
8 | fun inject(injectionTest: InjectionTest.KotlinDaggerTest)
9 | }
10 |
11 | @Component(modules = [JavaDaggerModule::class])
12 | interface JavaDaggerComponent {
13 | fun inject(injectionTest: InjectionTest.JavaDaggerTest)
14 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/sloydev/dependencyinjectionperformance/katana/KatanaKotlinModule.kt:
--------------------------------------------------------------------------------
1 | package com.sloydev.dependencyinjectionperformance.katana
2 |
3 | import com.sloydev.dependencyinjectionperformance.*
4 | import org.rewedigital.katana.bind
5 | import org.rewedigital.katana.createModule
6 | import org.rewedigital.katana.factory
7 | import org.rewedigital.katana.get
8 |
9 | val katanaKotlinModule = createModule("katanaKotlinModule") {
10 | bind { factory { Fib1() } }
11 | bind { factory { Fib2() } }
12 | bind { factory { Fib3(get(), get()) } }
13 | bind { factory { Fib4(get(), get()) } }
14 | bind { factory { Fib5(get(), get()) } }
15 | bind { factory { Fib6(get(), get()) } }
16 | bind { factory { Fib7(get(), get()) } }
17 | bind { factory { Fib8(get(), get()) } }
18 | bind { factory { Fib9(get(), get()) } }
19 | bind { factory { Fib10(get(), get()) } }
20 | bind { factory { Fib11(get(), get()) } }
21 | bind { factory { Fib12(get(), get()) } }
22 | bind { factory { Fib13(get(), get()) } }
23 | bind { factory { Fib14(get(), get()) } }
24 | bind { factory { Fib15(get(), get()) } }
25 | bind { factory { Fib16(get(), get()) } }
26 | bind { factory { Fib17(get(), get()) } }
27 | bind { factory { Fib18(get(), get()) } }
28 | bind { factory { Fib19(get(), get()) } }
29 | bind { factory { Fib20(get(), get()) } }
30 | bind { factory { Fib21(get(), get()) } }
31 | bind { factory { Fib22(get(), get()) } }
32 | bind { factory { Fib23(get(), get()) } }
33 | bind { factory { Fib24(get(), get()) } }
34 | bind { factory { Fib25(get(), get()) } }
35 | bind { factory { Fib26(get(), get()) } }
36 | bind { factory { Fib27(get(), get()) } }
37 | bind { factory { Fib28(get(), get()) } }
38 | bind { factory { Fib29(get(), get()) } }
39 | bind { factory { Fib30(get(), get()) } }
40 | bind { factory { Fib31(get(), get()) } }
41 | bind { factory { Fib32(get(), get()) } }
42 | bind { factory { Fib33(get(), get()) } }
43 | bind { factory { Fib34(get(), get()) } }
44 | bind { factory { Fib35(get(), get()) } }
45 | bind { factory { Fib36(get(), get()) } }
46 | bind { factory { Fib37(get(), get()) } }
47 | bind { factory { Fib38(get(), get()) } }
48 | bind { factory { Fib39(get(), get()) } }
49 | bind { factory { Fib40(get(), get()) } }
50 | bind { factory { Fib41(get(), get()) } }
51 | bind { factory { Fib42(get(), get()) } }
52 | bind { factory { Fib43(get(), get()) } }
53 | bind { factory { Fib44(get(), get()) } }
54 | bind { factory { Fib45(get(), get()) } }
55 | bind { factory { Fib46(get(), get()) } }
56 | bind { factory { Fib47(get(), get()) } }
57 | bind { factory { Fib48(get(), get()) } }
58 | bind { factory { Fib49(get(), get()) } }
59 | bind { factory { Fib50(get(), get()) } }
60 | bind { factory { Fib51(get(), get()) } }
61 | bind { factory { Fib52(get(), get()) } }
62 | bind { factory { Fib53(get(), get()) } }
63 | bind { factory { Fib54(get(), get()) } }
64 | bind { factory { Fib55(get(), get()) } }
65 | bind { factory { Fib56(get(), get()) } }
66 | bind { factory { Fib57(get(), get()) } }
67 | bind { factory { Fib58(get(), get()) } }
68 | bind { factory { Fib59(get(), get()) } }
69 | bind { factory { Fib60(get(), get()) } }
70 | bind { factory { Fib61(get(), get()) } }
71 | bind { factory { Fib62(get(), get()) } }
72 | bind { factory { Fib63(get(), get()) } }
73 | bind { factory { Fib64(get(), get()) } }
74 | bind { factory { Fib65(get(), get()) } }
75 | bind { factory { Fib66(get(), get()) } }
76 | bind { factory { Fib67(get(), get()) } }
77 | bind { factory { Fib68(get(), get()) } }
78 | bind { factory { Fib69(get(), get()) } }
79 | bind { factory { Fib70(get(), get()) } }
80 | bind { factory { Fib71(get(), get()) } }
81 | bind { factory { Fib72(get(), get()) } }
82 | bind { factory { Fib73(get(), get()) } }
83 | bind { factory { Fib74(get(), get()) } }
84 | bind { factory { Fib75(get(), get()) } }
85 | bind { factory { Fib76(get(), get()) } }
86 | bind { factory { Fib77(get(), get()) } }
87 | bind { factory { Fib78(get(), get()) } }
88 | bind { factory { Fib79(get(), get()) } }
89 | bind { factory { Fib80(get(), get()) } }
90 | bind { factory { Fib81(get(), get()) } }
91 | bind { factory { Fib82(get(), get()) } }
92 | bind { factory { Fib83(get(), get()) } }
93 | bind { factory { Fib84(get(), get()) } }
94 | bind { factory { Fib85(get(), get()) } }
95 | bind { factory { Fib86(get(), get()) } }
96 | bind { factory { Fib87(get(), get()) } }
97 | bind { factory { Fib88(get(), get()) } }
98 | bind { factory { Fib89(get(), get()) } }
99 | bind { factory { Fib90(get(), get()) } }
100 | bind { factory { Fib91(get(), get()) } }
101 | bind { factory { Fib92(get(), get()) } }
102 | bind { factory { Fib93(get(), get()) } }
103 | bind { factory { Fib94(get(), get()) } }
104 | bind { factory { Fib95(get(), get()) } }
105 | bind { factory { Fib96(get(), get()) } }
106 | bind { factory { Fib97(get(), get()) } }
107 | bind { factory { Fib98(get(), get()) } }
108 | bind { factory { Fib99(get(), get()) } }
109 | bind { factory { Fib100(get(), get()) } }
110 | bind { factory { Fib101(get(), get()) } }
111 | bind { factory { Fib102(get(), get()) } }
112 | bind { factory { Fib103(get(), get()) } }
113 | bind { factory { Fib104(get(), get()) } }
114 | bind { factory { Fib105(get(), get()) } }
115 | bind { factory { Fib106(get(), get()) } }
116 | bind { factory { Fib107(get(), get()) } }
117 | bind { factory { Fib108(get(), get()) } }
118 | bind { factory { Fib109(get(), get()) } }
119 | bind { factory { Fib110(get(), get()) } }
120 | bind { factory { Fib111(get(), get()) } }
121 | bind { factory { Fib112(get(), get()) } }
122 | bind { factory { Fib113(get(), get()) } }
123 | bind { factory { Fib114(get(), get()) } }
124 | bind { factory { Fib115(get(), get()) } }
125 | bind { factory { Fib116(get(), get()) } }
126 | bind { factory { Fib117(get(), get()) } }
127 | bind { factory { Fib118(get(), get()) } }
128 | bind { factory { Fib119(get(), get()) } }
129 | bind { factory { Fib120(get(), get()) } }
130 | bind { factory { Fib121(get(), get()) } }
131 | bind { factory { Fib122(get(), get()) } }
132 | bind { factory { Fib123(get(), get()) } }
133 | bind { factory { Fib124(get(), get()) } }
134 | bind { factory { Fib125(get(), get()) } }
135 | bind { factory { Fib126(get(), get()) } }
136 | bind { factory { Fib127(get(), get()) } }
137 | bind { factory { Fib128(get(), get()) } }
138 | bind { factory { Fib129(get(), get()) } }
139 | bind { factory { Fib130(get(), get()) } }
140 | bind { factory { Fib131(get(), get()) } }
141 | bind { factory { Fib132(get(), get()) } }
142 | bind { factory { Fib133(get(), get()) } }
143 | bind { factory { Fib134(get(), get()) } }
144 | bind { factory { Fib135(get(), get()) } }
145 | bind { factory { Fib136(get(), get()) } }
146 | bind { factory { Fib137(get(), get()) } }
147 | bind { factory { Fib138(get(), get()) } }
148 | bind { factory { Fib139(get(), get()) } }
149 | bind { factory { Fib140(get(), get()) } }
150 | bind { factory { Fib141(get(), get()) } }
151 | bind { factory { Fib142(get(), get()) } }
152 | bind { factory { Fib143(get(), get()) } }
153 | bind { factory { Fib144(get(), get()) } }
154 | bind { factory { Fib145(get(), get()) } }
155 | bind { factory { Fib146(get(), get()) } }
156 | bind { factory { Fib147(get(), get()) } }
157 | bind { factory { Fib148(get(), get()) } }
158 | bind { factory { Fib149(get(), get()) } }
159 | bind { factory { Fib150(get(), get()) } }
160 | bind { factory { Fib151(get(), get()) } }
161 | bind { factory { Fib152(get(), get()) } }
162 | bind { factory { Fib153(get(), get()) } }
163 | bind { factory { Fib154(get(), get()) } }
164 | bind { factory { Fib155(get(), get()) } }
165 | bind { factory { Fib156(get(), get()) } }
166 | bind { factory { Fib157(get(), get()) } }
167 | bind { factory { Fib158(get(), get()) } }
168 | bind { factory { Fib159(get(), get()) } }
169 | bind { factory { Fib160(get(), get()) } }
170 | bind { factory { Fib161(get(), get()) } }
171 | bind { factory { Fib162(get(), get()) } }
172 | bind { factory { Fib163(get(), get()) } }
173 | bind { factory { Fib164(get(), get()) } }
174 | bind { factory { Fib165(get(), get()) } }
175 | bind { factory { Fib166(get(), get()) } }
176 | bind { factory { Fib167(get(), get()) } }
177 | bind { factory { Fib168(get(), get()) } }
178 | bind { factory { Fib169(get(), get()) } }
179 | bind { factory { Fib170(get(), get()) } }
180 | bind { factory { Fib171(get(), get()) } }
181 | bind { factory { Fib172(get(), get()) } }
182 | bind { factory { Fib173(get(), get()) } }
183 | bind { factory { Fib174(get(), get()) } }
184 | bind { factory { Fib175(get(), get()) } }
185 | bind { factory { Fib176(get(), get()) } }
186 | bind { factory { Fib177(get(), get()) } }
187 | bind { factory { Fib178(get(), get()) } }
188 | bind { factory { Fib179(get(), get()) } }
189 | bind { factory { Fib180(get(), get()) } }
190 | bind { factory { Fib181(get(), get()) } }
191 | bind { factory { Fib182(get(), get()) } }
192 | bind { factory { Fib183(get(), get()) } }
193 | bind { factory { Fib184(get(), get()) } }
194 | bind { factory { Fib185(get(), get()) } }
195 | bind { factory { Fib186(get(), get()) } }
196 | bind { factory { Fib187(get(), get()) } }
197 | bind { factory { Fib188(get(), get()) } }
198 | bind { factory { Fib189(get(), get()) } }
199 | bind { factory { Fib190(get(), get()) } }
200 | bind { factory { Fib191(get(), get()) } }
201 | bind { factory { Fib192(get(), get()) } }
202 | bind { factory { Fib193(get(), get()) } }
203 | bind { factory { Fib194(get(), get()) } }
204 | bind { factory { Fib195(get(), get()) } }
205 | bind { factory { Fib196(get(), get()) } }
206 | bind { factory { Fib197(get(), get()) } }
207 | bind { factory { Fib198(get(), get()) } }
208 | bind { factory { Fib199(get(), get()) } }
209 | bind { factory { Fib200(get(), get()) } }
210 | bind { factory { Fib201(get(), get()) } }
211 | bind { factory { Fib202(get(), get()) } }
212 | bind { factory { Fib203(get(), get()) } }
213 | bind { factory { Fib204(get(), get()) } }
214 | bind { factory { Fib205(get(), get()) } }
215 | bind { factory { Fib206(get(), get()) } }
216 | bind