Fixed
Status Update
Comments
ra...@google.com <ra...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit b90079595f33f58fece04026a97faa0d243acdb1
Author: Yuichi Araki <yaraki@google.com>
Date: Wed Sep 18 16:55:49 2019
Change the way to detect mismatch between POJO and query
This fixes cursor mismatch warnings with expandProjection.
Bug: 140759491
Test: QueryMethodProcessorTest
Change-Id: I7659002e5e0d1ef60fc1af2a625c0c36da0664d8
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
https://android-review.googlesource.com/1123258
https://goto.google.com/android-sha1/b90079595f33f58fece04026a97faa0d243acdb1
Branch: androidx-master-dev
commit b90079595f33f58fece04026a97faa0d243acdb1
Author: Yuichi Araki <yaraki@google.com>
Date: Wed Sep 18 16:55:49 2019
Change the way to detect mismatch between POJO and query
This fixes cursor mismatch warnings with expandProjection.
Bug: 140759491
Test: QueryMethodProcessorTest
Change-Id: I7659002e5e0d1ef60fc1af2a625c0c36da0664d8
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
cc...@google.com <cc...@google.com> #3
wu...@gmail.com <wu...@gmail.com> #4
Project: platform/frameworks/support
Branch: androidx-master-dev
commit bdde5a1a970ddc9007b28de4aa29d60ffa588f08
Author: Yigit Boyar <yboyar@google.com>
Date: Thu Apr 16 16:47:05 2020
Re-factor how errors are dismissed when query is re-written
This CL changes how we handle errors/warnings if query is
re-written.
There was a bug in expandProjection where we would report warnings
for things that Room already fixes automatically ( b/140759491 ).
The solution to that problem (I7659002e5e0d1ef60fc1af2a625c0c36da0664d8)
solved it by deferring validating of columns until after re-write
decision is made. Unfortunately, this required changing PojoRowAdapter
to have a dummy mapping until it is validating, make it hard to use
as it does have a non-null mapping which is not useful.
This CL partially reverts that change and instead rely on the log
deferring logic we have in Context. This way, we don't need to break
the stability of PojoRowAdapter while still having the ability to
drop warnings that room fixes. This will also play nicer when we
have different query re-writing options that can use more information
about the query results.
Bug: 153387066
Bug: 140759491
Test: existing tests pass
Change-Id: I2ec967c763d33d7a3ff02c1a13c6953b460d1e5f
M room/compiler/src/main/kotlin/androidx/room/log/RLog.kt
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
https://android-review.googlesource.com/1288456
Branch: androidx-master-dev
commit bdde5a1a970ddc9007b28de4aa29d60ffa588f08
Author: Yigit Boyar <yboyar@google.com>
Date: Thu Apr 16 16:47:05 2020
Re-factor how errors are dismissed when query is re-written
This CL changes how we handle errors/warnings if query is
re-written.
There was a bug in expandProjection where we would report warnings
for things that Room already fixes automatically (
The solution to that problem (I7659002e5e0d1ef60fc1af2a625c0c36da0664d8)
solved it by deferring validating of columns until after re-write
decision is made. Unfortunately, this required changing PojoRowAdapter
to have a dummy mapping until it is validating, make it hard to use
as it does have a non-null mapping which is not useful.
This CL partially reverts that change and instead rely on the log
deferring logic we have in Context. This way, we don't need to break
the stability of PojoRowAdapter while still having the ability to
drop warnings that room fixes. This will also play nicer when we
have different query re-writing options that can use more information
about the query results.
Bug: 153387066
Bug: 140759491
Test: existing tests pass
Change-Id: I2ec967c763d33d7a3ff02c1a13c6953b460d1e5f
M room/compiler/src/main/kotlin/androidx/room/log/RLog.kt
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
ap...@google.com <ap...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-main
commit 7f32b0df3abea8533bd1d926dd3058fe961e113e
Author: Chris Craik <ccraik@google.com>
Date: Mon Feb 14 17:19:06 2022
Support metrics from named UI subprocesses in multi-process apps
Fixes: 215988434
Relnote: Support metrics from named UI subprocesses in multi-process apps
Test: SeparateProcessBenchmark
Change-Id: Ice6c0360953f464641774b0a1056af7015ecf8de
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/FrameTimingQuery.kt
A benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SeparateProcessActivity.kt
A benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SeparateProcessBenchmark.kt
M benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessor.kt
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/StartupTimingQuery.kt
https://android-review.googlesource.com/1986569
Branch: androidx-main
commit 7f32b0df3abea8533bd1d926dd3058fe961e113e
Author: Chris Craik <ccraik@google.com>
Date: Mon Feb 14 17:19:06 2022
Support metrics from named UI subprocesses in multi-process apps
Fixes: 215988434
Relnote: Support metrics from named UI subprocesses in multi-process apps
Test: SeparateProcessBenchmark
Change-Id: Ice6c0360953f464641774b0a1056af7015ecf8de
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/FrameTimingQuery.kt
A benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SeparateProcessActivity.kt
A benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SeparateProcessBenchmark.kt
M benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessor.kt
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/StartupTimingQuery.kt
cc...@google.com <cc...@google.com> #6
Re
To your earlier point, about opening up the metrics APIs, I agree, and we'll be looking into that for 1.2 -
Thanks for the bug report!
Description
Version used:1.1.0-alpha13
Devices/Android versions reproduced on:R
测试工程说明:
测试项目为多进程项目,包名com.example.demo, 但是应用的所有UI界面实现在com.example.demo:ui进程。
问题原因分析:
getMetrics方法中调用StartupTimingQuery.getFrameSubMetrics 参数传入的是PackageName,参数来源是
Marcobenchmark.kt
val iterationResult = userspaceTrace("extract metrics") {
metrics
// capture list of Map<String,Long> per metric
.map { it.getMetrics(Metric.CaptureInfo(
targetPackageName = packageName,
testPackageName = macrobenchPackageName,
startupMode = startupModeMetricHint,
apiLevel = Build.VERSION.SDK_INT
), tracePath) }
// merge into one map
.reduce { sum, element -> sum + element }
}
查询语句:val queryResult = PerfettoTraceProcessor.rawQuery(
absoluteTracePath = absoluteTracePath,
query = getFullQuery(
testProcessName = testPackageName,
targetProcessName = targetPackageName
)
)
private fun getFullQuery(testProcessName: String, targetProcessName: String) = """
------ Select all startup-relevant slices from slice table
SELECT
slice.ts as ts,
slice.dur as dur
FROM slice
INNER JOIN thread_track on slice.track_id =
INNER JOIN thread USING(utid)
INNER JOIN process USING(upid)
WHERE (
(
(
(
(
(
(
)
) OR
(
-- Signals beginning of launch event, only present in API 29+
)
)
------ Add in async slices
UNION
SELECT
slice.ts as ts,
slice.dur as dur
FROM slice
INNER JOIN process_track on slice.track_id =
INNER JOIN process USING(upid)
WHERE (
-- API 23+: "launching: <target>"
-- API 19-22: "launching"
)
ORDER BY ts ASC
""".trimIndent()
会将packagename 作为限制条件,导致查询不到结果。
对于用户,不能修改这个参数,来达到查询正确进程的目的。
修改建议:
(1)对于Metric 对象是特定进程的时候,开放参数传入指定进程名(默认值是包名)。比如:FrameTimingGfxInfoMetric,FrameTimingMetric,StartupTimingMetric。
(2)目前Metric 是sealed的,建议开放给用户,给用户更多自定义Metric 的空间。