Fixed
Status Update
Comments
ra...@google.com <ra...@google.com> #2
ra...@google.com <ra...@google.com> #3
Yes, kapt incremental compilation support is available since 1.3.40-dev-795
Is there already some plan to add support to Room?
Is there already some plan to add support to Room?
d....@googlemail.com <d....@googlemail.com> #4
#3 incremental kapt is available in 1.3.30 released yesterday too.
ra...@google.com <ra...@google.com> #5
Is there already some ETA?
d....@googlemail.com <d....@googlemail.com> #6
We are working on it and aiming for Room 2.2
ra...@google.com <ra...@google.com> #7
Project: platform/frameworks/support
Branch: androidx-master-dev
commit e4fbb7fb77a4789ab40bff03cc131479779d3e69
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Tue Apr 09 23:20:59 2019
Create integration test for Room that uses gradle test kit.
Useful for testing Room incremental annotation processing in Gradle.
Also consolidated some of the path definitions in various build.gradle
into methods in buildSrc/SupportConfig.
Bug: 112110217
Test: ./gradlew room:integration-tests:room-i-a-p:test
Change-Id: I34f6772675712c6edd500e9149ab7f21ade4f012
M buildSrc/src/main/kotlin/androidx/build/SupportConfig.kt
M lifecycle/integration-tests/incrementality/build.gradle
M navigation/safe-args-gradle-plugin/build.gradle
A room/integration-tests/incremental-annotation-processing/build.gradle
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/AndroidManifest.xml
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/java/room/testapp/TestDao.java
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/java/room/testapp/TestDatabase.java
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/java/room/testapp/TestEntity.java
A room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/CompileTest.kt
M settings.gradle
https://android-review.googlesource.com/941741
https://goto.google.com/android-sha1/e4fbb7fb77a4789ab40bff03cc131479779d3e69
Branch: androidx-master-dev
commit e4fbb7fb77a4789ab40bff03cc131479779d3e69
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Tue Apr 09 23:20:59 2019
Create integration test for Room that uses gradle test kit.
Useful for testing Room incremental annotation processing in Gradle.
Also consolidated some of the path definitions in various build.gradle
into methods in buildSrc/SupportConfig.
Bug: 112110217
Test: ./gradlew room:integration-tests:room-i-a-p:test
Change-Id: I34f6772675712c6edd500e9149ab7f21ade4f012
M buildSrc/src/main/kotlin/androidx/build/SupportConfig.kt
M lifecycle/integration-tests/incrementality/build.gradle
M navigation/safe-args-gradle-plugin/build.gradle
A room/integration-tests/incremental-annotation-processing/build.gradle
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/AndroidManifest.xml
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/java/room/testapp/TestDao.java
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/java/room/testapp/TestDatabase.java
A room/integration-tests/incremental-annotation-processing/src/test/data/simple-project/src/main/java/room/testapp/TestEntity.java
A room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/CompileTest.kt
M settings.gradle
ap...@google.com <ap...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-master-dev
commit a68222dc929ae5e2a3445f9df69a63636854852e
Author: Hung Nguyen <hungnv@google.com>
Date: Fri Mar 29 11:39:50 2019
Prepare Room for incremental annotation processing.
In Java projects, with non-incremental annotation processing, the inputs
to an annotation processor includes only Java source files.
With incremental annotation processing, however, the inputs may include
both Java source files and class files (to avoid recompiling source
files that haven't changed).
Therefore, all Room annotations need to have retention policy CLASS or
RUNTIME (not SOURCE), so that Room can find the elements annotated with
those annotations from class files. This requirement is also stated at
https://docs.gradle.org/current/userguide/java_plugin.html#sec:incremental_annotation_processing .
Bug: 112110217
Test: Existing tests + New AnnotationRetentionPolicyTest
Change-Id: I1e3a433bf69503ef15cfc2e53cbe97616a6f13b8
M room/common/api/2.2.0-alpha01.txt
M room/common/api/current.txt
M room/common/build.gradle
M room/common/src/main/java/androidx/room/ColumnInfo.java
M room/common/src/main/java/androidx/room/ForeignKey.java
M room/common/src/main/java/androidx/room/OnConflictStrategy.java
M room/common/src/main/java/androidx/room/Update.java
A room/common/src/test/java/androidx/room/AnnotationRetentionPolicyTest.kt
https://android-review.googlesource.com/958284
https://goto.google.com/android-sha1/a68222dc929ae5e2a3445f9df69a63636854852e
Branch: androidx-master-dev
commit a68222dc929ae5e2a3445f9df69a63636854852e
Author: Hung Nguyen <hungnv@google.com>
Date: Fri Mar 29 11:39:50 2019
Prepare Room for incremental annotation processing.
In Java projects, with non-incremental annotation processing, the inputs
to an annotation processor includes only Java source files.
With incremental annotation processing, however, the inputs may include
both Java source files and class files (to avoid recompiling source
files that haven't changed).
Therefore, all Room annotations need to have retention policy CLASS or
RUNTIME (not SOURCE), so that Room can find the elements annotated with
those annotations from class files. This requirement is also stated at
Bug: 112110217
Test: Existing tests + New AnnotationRetentionPolicyTest
Change-Id: I1e3a433bf69503ef15cfc2e53cbe97616a6f13b8
M room/common/api/2.2.0-alpha01.txt
M room/common/api/current.txt
M room/common/build.gradle
M room/common/src/main/java/androidx/room/ColumnInfo.java
M room/common/src/main/java/androidx/room/ForeignKey.java
M room/common/src/main/java/androidx/room/OnConflictStrategy.java
M room/common/src/main/java/androidx/room/Update.java
A room/common/src/test/java/androidx/room/AnnotationRetentionPolicyTest.kt
Description
Version used: 1.0.1
Devices/Android versions reproduced on: different Samsung Galaxy devices running Android 8 and 9
I have received deadlock reports like this:
"main" prio=5 tid=1 Blocked
| group="main" sCount=1 dsCount=0 flags=1 obj=0x76790a58 self=0x7d81014c00
| sysTid=27874 nice=0 cgrp=default sched=0/0 handle=0x7e07c1a560
| state=S schedstat=( 1835900780 7285545518 5958 ) utm=82 stm=100 core=1 HZ=100
| stack=0x7febcdd000-0x7febcdf000 stackSize=8MB
| held mutexes=
at androidx.work.impl.constraints.trackers.ConstraintTracker.removeListener (ConstraintTracker.java:77)
- waiting to lock <0x08a4f10d> (a java.lang.Object) held by thread 13 // ConstraintTracker.mLock
at androidx.work.impl.constraints.controllers.ConstraintController.replace (ConstraintController.java:98)
at androidx.work.impl.constraints.WorkConstraintsTracker.replace (WorkConstraintsTracker.java:99)
- locked <0x0cbac8c2> (a java.lang.Object) // WorkConstrainsTracker.mLock
at androidx.work.impl.background.greedy.GreedyScheduler.removeConstraintTrackingFor (GreedyScheduler.java:153)
- locked <0x0cbec6d3> (a java.lang.Object) // GreedyScheduler.mLock
at androidx.work.impl.background.greedy.GreedyScheduler.onExecuted (GreedyScheduler.java:141)
at androidx.work.impl.Processor.onExecuted (Processor.java:230)
- locked <0x08012210> (a java.lang.Object)
at androidx.work.impl.Processor$FutureListener.run (Processor.java:263)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:214)
at android.app.ActivityThread.main (ActivityThread.java:7032)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:965)
"ConnectivityThread" tid=13 Blocked
"ConnectivityThread" prio=5 tid=13 Blocked
| group="main" sCount=1 dsCount=0 flags=1 obj=0x12fc0770 self=0x7d7ab86800
| sysTid=27897 nice=0 cgrp=default sched=0/0 handle=0x7d684114f0
| state=S schedstat=( 247567475 11539483672 1368 ) utm=16 stm=7 core=2 HZ=100
| stack=0x7d6830e000-0x7d68310000 stackSize=1041KB
| held mutexes=
at androidx.work.impl.a.d.c (SourceFile:157) // synchronized (mLock)
- waiting to lock <0x0cbac8c2> (a java.lang.Object) held by thread 1 // trying to lock WorkConstraintsTracker.mLock
at androidx.work.impl.a.a.c.b (SourceFile:133) ConstraintController: mCallback.onConstraintNotMet(mMatchingWorkSpecIds);
at androidx.work.impl.a.a.c.a (SourceFile:142) ConstraintController: updateCallback();
at androidx.work.impl.a.b.d.a (SourceFile:103) listener.onConstraintChanged(mCurrentState);
- locked <0x08a4f10d> (a java.lang.Object) (ConstraintTracker.mLock)
at androidx.work.impl.a.b.e$b.onCapabilitiesChanged (SourceFile:149) (NetworkStateTracker)
at android.net.ConnectivityManager$CallbackHandler.handleMessage (ConnectivityManager.java:3331)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:214)
at android.os.HandlerThread.run (HandlerThread.java:65)
I have written after the lines what is happening there.
The GreedyScheduler has finished executing and onExecuted is called. This tries to remove the workSpecId from the mConstrainedWorkSpecs list. After removing it it calls mWorkConstraintsTracker.replace to send the new list to the WorkContraintsTracker. This causes a lock of WorkConstraintsTracker.mLock and a call to ConstraintController.replace. This calls ConstraintController.removeListener which tries to lock ConstraintController.mLock but fails/deadlocks. So as you can see it has first locked WorkConstraintsTracker.mLock and then it tries to lock ConstraintController.mLock.
As you can see now the other thread does the opposite, which leads to the deadlock: The WorkManager receives a "onCapabilitiesChanges" message and locks ConstraintTracker.mLock. Then it tries to call onConstraintNotMet but it cannot lock WorkConstraintsTracker.mLock, because it is already locked by the upper thread.
So there is a deadlock because both functions are running at the same time and are locking the locks in opposite order. Can you please fix it? Or did I make a mistake somewhere?
(BTW I am only using WorkManager.getInstance, I am not calling "initialize").
Thank you very much!