Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

16900 make navgraph inflation asynchronous #18889

Merged
merged 4 commits into from Apr 14, 2021

Conversation

MarcLeclair
Copy link
Contributor

Pull Request checklist

  • Tests: This PR includes thorough tests or an explanation of why it does not
  • Screenshots: This PR includes screenshots or GIFs of the changes made or an explanation of why it does not
  • Accessibility: The code in this PR follows accessibility best practices or does not include any user facing features. In addition, it includes a screenshot of a successful accessibility scan to ensure no new defects are added to the product.

To download an APK when reviewing a PR:

  1. click on Show All Checks,
  2. click Details next to "Taskcluster (pull_request)" after it appears and then finishes with a green checkmark,
  3. click on the "Fenix - assemble" task, then click "Run Artifacts".
  4. the APK links should be on the left side of the screen, named for each CPU architecture

@MarcLeclair MarcLeclair requested review from a team as code owners April 9, 2021 00:26
@mergify
Copy link
Contributor

mergify bot commented Apr 9, 2021

This pull request has conflicts when rebasing. Could you fix it @MarcLeclair? 🙏

@MarcLeclair MarcLeclair changed the title 16900 async navgraph 16900 make navgraph inflation asynchronous Apr 9, 2021
Copy link
Contributor

@mcomella mcomella left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm after rebasing.

I realized there isn't too much to manual test here – you basically can (cold) start the app and see what happens so if you test all the ways to (cold) start, you've tested everything. I tried the standard intents (launcher, VIEW) but I'd ideally want QA to test a broader set of options.

@mergify
Copy link
Contributor

mergify bot commented Apr 13, 2021

This pull request has conflicts when rebasing. Could you fix it @MarcLeclair? 🙏

@MarcLeclair MarcLeclair force-pushed the 16900_async_navgraph branch 2 times, most recently from 9fd23f4 to dcb0635 Compare April 13, 2021 21:33
@mergify
Copy link
Contributor

mergify bot commented Apr 13, 2021

This pull request has conflicts when rebasing. Could you fix it @MarcLeclair? 🙏

MarcLeclair and others added 3 commits April 13, 2021 18:37
For mozilla-mobile#16900: removed nav graph from xml

For mozilla-mobile#16900: inflate navGraph programatically

For mozilla-mobile#16900: Made NavGraph inflation asynchronous

For mozilla-mobile#16900: Changed to block with runBlocking

For mozilla-mobile#16900: Refactored blocking call into a function

For 16900: NavGraph inflation is now async

We now attach the nav graph (or check if its attached) on every nav call ( an extension function for NavController).
This is done by checking the value of the job stored in PerfNavController.map which keeps track of the job with the NavController as a Key.
If the job hasn't been completed, it will block the main thread until the job is done. The job itself is responsible for attaching the navgraph
to the navcontroller (and the inflation of the latter too)

For 16900: rebased upstream master

For 16900: Rebase on master

For mozilla-mobile#16900: Fixed Async Navgraph navigation per review comments.

1)The Asynchronous method is now found in NavGraphProvider.kt. It creates a job on the IO dispatcher
2)The Job is tracked through a WeakHashMap from Controller --> NavGraph
3)The Coroutine scope doesn't use MainScope() anymore
4)The Coroutine is cancelled if the Activity is destroyed
5)The tests mockk the blockForNavGraphInflation method through the FenixReoboelectricTestApplication instead of calling the mock every setup()

For mozilla-mobile#16900: inflateNavGraphAsync now takes navController

For mozilla-mobile#16900: Pass lifecycleScope to NavGraphProvider

For mozilla-mobile#16900: removed unused mock

For mozilla-mobile#16900: Added linter rules for navigate calls

We need linting rules to make sure no one calls the NavController.navigate() methods

For mozilla-mobile#16900: Added TestRule to help abstract the mocks in the code

For 16900: Fix linting problems

For mozilla-mobile#16900: Cleaned duplicated code in tests

For mozilla-mobile#16900: cleaned up NavGraphTestRule for finished test

For mozilla-mobile#16900: had to revert an accidentally edited file

For mozilla-mobile#16900: rebased master
This is composed of squash commits, the original messages can be found below:

-> DisableNavGraphProviderAssertionRule + kdoc.

Use test rule in RobolectricApplication.

Fix failing CrashReporterControllerTest

Fix blame by -> navigate in tests.

This commit was generated by the following commands only:
```
find app/src/test -type f -exec sed -i '' "/import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph/d" {} \;
find app/src/test -type f -exec sed -i "" "s/navigateBlockingForAsyncNavGraph/navigate/g" {} \;
git checkout app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
```

Fix various blame

This is expected to be squashed into the first commit so, if so, it'd
fix the blame.

Move test rule to helpers pkg.

add missing license header

Add import change I missed

fix unused imports

Replace robolectricTestrunner with test rule.

Improve navGraphProvider docs

Remove unnecessary rule as defined by robolectric.

add clarifying comment to robolectric

remove unnecessary space
… fixes

3 squash commits:
 *Changed violation message and fixed the lint rule for MozillaNavigateCheck
 *Added suppression to NavController.kt
 *Fixed detekt violations
@codecov-io
Copy link

Codecov Report

Merging #18889 (dce81e3) into master (5560d7d) will increase coverage by 0.02%.
The diff coverage is 45.63%.

Impacted file tree graph

@@             Coverage Diff              @@
##             master   #18889      +/-   ##
============================================
+ Coverage     33.62%   33.64%   +0.02%     
- Complexity     1542     1545       +3     
============================================
  Files           531      532       +1     
  Lines         21569    21591      +22     
  Branches       3217     3218       +1     
============================================
+ Hits           7253     7265      +12     
- Misses        13428    13441      +13     
+ Partials        888      885       -3     
Impacted Files Coverage Δ Complexity Δ
...in/java/org/mozilla/fenix/AppRequestInterceptor.kt 93.02% <0.00%> (ø) 14.00 <0.00> (ø)
...illa/fenix/addons/InstalledAddonDetailsFragment.kt 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
...a/org/mozilla/fenix/browser/BaseBrowserFragment.kt 13.08% <0.00%> (ø) 25.00 <0.00> (ø)
.../java/org/mozilla/fenix/browser/BrowserFragment.kt 3.26% <0.00%> (ø) 1.00 <0.00> (ø)
...c/main/java/org/mozilla/fenix/home/HomeFragment.kt 2.43% <0.00%> (-1.03%) 5.00 <0.00> (-1.00)
...ozilla/fenix/library/bookmarks/BookmarkFragment.kt 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
...rg/mozilla/fenix/library/bookmarks/BookmarkView.kt 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
...g/mozilla/fenix/library/history/HistoryFragment.kt 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
.../org/mozilla/fenix/nimbus/NimbusExperimentsView.kt 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
...ava/org/mozilla/fenix/settings/SettingsFragment.kt 15.43% <0.00%> (ø) 9.00 <0.00> (ø)
... and 38 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 5560d7d...dce81e3. Read the comment docs.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants