apps-android-wikipedia
apps-android-wikipedia copied to clipboard
Convert Tabs to use database
- Created two database tables:
TabandPageBackStackItem - Created a custom serializer for the old
PageBackStackItemthat was stored inPrefs.tabs. - Move logic to
TabHelp - TODO: ideal way to handle the coroutine process vs. the view updates without having a
viewModelin the existing implementation?
Phabricator: https://phabricator.wikimedia.org/T353656
A basic refactoring is completed. Pending discussion to see if we need to update the logic of handling tabs vs backstacks.
Here are the results of the comparison:
Getting Tab counts
Switching between screens that have the TabCountsView embedded.
SharedPreference
99 Tabs: org.wikipedia.page.PageActivity@8a8e6d7 : 481094 nano seconds ~= 0 milliseconds
99 Tabs: org.wikipedia.page.PageActivity@8a8e6d7 : 329219 nano seconds ~= 0 milliseconds
99 Tabs: null : 373594 nano seconds ~= 0 milliseconds
99 Tabs: null : 390260 nano seconds ~= 0 milliseconds
99 Tabs: null : 1834531 nano seconds ~= 1 milliseconds
99 Tabs: null : 594010 nano seconds ~= 0 milliseconds
99 Tabs: null : 1522084 nano seconds ~= 1 milliseconds => Removes a tab
99 Tabs: null : 486146 nano seconds ~= 0 milliseconds
99 Tabs: null : 3110781 nano seconds ~= 3 milliseconds => Adds a new tab
99 Tabs: null : 539635 nano seconds ~= 0 milliseconds
99 Tabs: org.wikipedia.main.MainActivity@e5f6958 : 69427 nano seconds ~= 0 milliseconds
99 Tabs: null : 109271 nano seconds ~= 0 milliseconds
99 Tabs: null : 253386 nano seconds ~= 0 milliseconds
99 Tabs: null : 398698 nano seconds ~= 0 milliseconds
99 Tabs: org.wikipedia.page.tabs.TabActivity@ec351f9 : 73177 nano seconds ~= 0 milliseconds
Database
99 Tabs: org.wikipedia.page.tabs.TabActivity@6e96d50 : 937500 nano seconds ~= 0 milliseconds
99 Tabs: org.wikipedia.page.tabs.TabActivity@6e96d50 : 972396 nano seconds ~= 0 milliseconds
99 Tabs: null : 679375 nano seconds ~= 0 milliseconds
99 Tabs: org.wikipedia.page.PageActivity@ea24126 : 254114 nano seconds ~= 0 milliseconds
99 Tabs: org.wikipedia.page.PageActivity@ea24126 : 368906 nano seconds ~= 0 milliseconds
99 Tabs: org.wikipedia.page.PageActivity@ea24126 : 356042 nano seconds ~= 0 milliseconds
99 Tabs: null : 330886 nano seconds ~= 0 milliseconds
99 Tabs: null : 381510 nano seconds ~= 0 milliseconds
99 Tabs: null : 1926511 nano seconds ~= 1 milliseconds
99 Tabs: null : 1226771 nano seconds ~= 1 milliseconds
99 Tabs: null : 840260 nano seconds ~= 0 milliseconds
99 Tabs: null : 334792 nano seconds ~= 0 milliseconds
99 Tabs: null : 569010 nano seconds ~= 0 milliseconds
99 Tabs: null : 445104 nano seconds ~= 0 milliseconds
99 Tabs: null : 1070520 nano seconds ~= 1 milliseconds => Adds a new tab
99 Tabs: null : 438542 nano seconds ~= 0 milliseconds
99 Tabs: null : 307656 nano seconds ~= 0 milliseconds
99 Tabs: null : 294271 nano seconds ~= 0 milliseconds
99 Tabs: null : 437292 nano seconds ~= 0 milliseconds
99 Tabs: null : 320938 nano seconds ~= 0 milliseconds
99 Tabs: null : 337396 nano seconds ~= 0 milliseconds
Committing Tabs
Starts with 99 tabs, and do some add/remove tabs actions:
SharedPreference
commitTabs: 4486510 nano seconds ~= 4 milliseconds
commitTabs: 2336094 nano seconds ~= 2 milliseconds
commitTabs: 4442240 nano seconds ~= 4 milliseconds
commitTabs: 1541407 nano seconds ~= 1 milliseconds
commitTabs: 7172552 nano seconds ~= 7 milliseconds
commitTabs: 1680573 nano seconds ~= 1 milliseconds
commitTabs: 2547500 nano seconds ~= 2 milliseconds
Database
commitTabs: 26842500 nano seconds ~= 26 milliseconds
commitTabs: 51131771 nano seconds ~= 51 milliseconds
commitTabs: 29053646 nano seconds ~= 29 milliseconds
commitTabs: 18281302 nano seconds ~= 18 milliseconds
commitTabs: 21329896 nano seconds ~= 21 milliseconds
commitTabs: 35114740 nano seconds ~= 35 milliseconds
commitTabs: 27067552 nano seconds ~= 27 milliseconds
In conclusion, the SharedPreference performs better than the database, especially when trying to commit Tabs. I think we can optimize the way of handling the delete/add action instead of saving/deleting all tabs in the commitTabState() function.
@dbrant @Williamrai this is ready for review.