Offload vector map tile work from EDT - #5350
Conversation
Cloudflare Preview
|
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 144 screenshots: 144 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 142 screenshots: 142 matched. Benchmark Results
Detailed Performance Metrics
|
|
Compared 143 screenshots: 143 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
|
Compared 216 screenshots: 216 matched. |
|
Compared 139 screenshots: 139 matched. |
e33a77b to
d626b5d
Compare
|
Compared 137 screenshots: 137 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
|
Compared 140 screenshots: 140 matched. Benchmark ResultsDetailed Performance Metrics
|
|
Compared 135 screenshots: 135 matched. |
|
Compared 141 screenshots: 141 matched. |
|
Compared 141 screenshots: 141 matched. |
d626b5d to
34f1226
Compare
…paint (#5352) Conflict resolution: - VectorMapEngine: took master wholesale. #5350's hasRenderedVisibleTiles()/MapView.isMapReady() supersedes this branch's isViewportFullyRendered() -- same visible-tile-coverage idea, but the master probe also actively computes and REQUESTS the visible tile set, so it is deterministic even before the first paint. The branch-side duplicate is dropped. - VectorMapScreenshotBaseTest: master's isMapReady() probe (incl. the NativeMap branch), keeping this branch's two hardening pieces on top: the 30s wait cap (starved CI simulators exceeded the old 9s on heavy first renders) and the CN1SS:WARN when capturing at the cap so a slow leg attributes itself instead of surfacing as a mystery mismatch. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Summary
This moves vector map tile IO and heavy tile preparation off the event dispatch thread.
Impact
Map paints now request tile jobs from the EDT and receive only lightweight completion callbacks there, reducing UI stalls and GC pressure from tile read/decode/parse/allocation work.
Root Cause
Tile callbacks were delivered on the EDT and
VectorMapEnginedecoded MVT bytes, extracted labels, rasterized vector tiles, and decoded raster images inline. Bundled tiles also read resources from aCN.callSerially()block.Validation
git diff --checkJAVA_HOME=/Users/shai/Library/Java/JavaVirtualMachines/azul-1.8.0_372/Contents/Home PATH=/Users/shai/Library/Java/JavaVirtualMachines/azul-1.8.0_372/Contents/Home/bin:$PATH mvn -pl core-unittests -am -DunitTests=true -Dmaven.javadoc.skip=true -Plocal-dev-javase -Dtest=MapsVectorTest,MapsVectorInternalsTest -Dsurefire.failIfNoSpecifiedTests=false testResult: 21 tests passed.