Gecko-dev Diary
Starting in August 2023 I'll be upgrading the Sailfish OS browser from Gecko version ESR 78 to ESR 91. This page catalogues my progress.
Latest code changes are in the gecko-dev sailfishos-esr91 branch.
There is an index of all posts in case you want to jump to a particular day.
Gecko
5 most recent items
30 Aug 2024 : Day 335 #
I'm back to corralling commits again this morning. Yesterday I got as far as commit 86 in the list. That means there are still 40 to go and I'd like to get them done before the end of the weekend.
The process is the same as yesterday. First, list all of the relevant commits:
And that's pretty much it! The good news is that following this cycle I've managed to complete the remaining 41 commits. Here's what I started with (I've left the last commit in from yesterday so it's clear how they hook together):
Before I turn these into patches there's a consistency check I want to do. As I mentioned a couple of days back, this process of rewording, re attributing, reordering and restructuring the commits should have left the final source tree in exactly the same state as before. Nothing should have changed apart from the git history.
But there's plenty scope for something to have gone wrong. For example deleting a line of the interactive rebase list can result in an entire commit being lost. If I did that accidentally, it'll affect the final result. So I need to figure out a way to perform a diff on the entire codebase: what I had previously vs. what I have now.
I don't really want to do a diff though, just a hash of the files should be sufficient. Here's what I've devised for this:
My plan is to run this on the current FIREFOX_ESR_91_9_X_RELBRANCH_sfos branch with all of my newly minted commits. I'll record the result and then switch to the FIREFOX_ESR_91_9_X_RELBRANCH_patches branch before running the command again. When this outputs a checksum I'll be able to compare the two in order to determine whether or not anything has changed. I've not cleaned the repository and I don't plan to, because although the checksum will pick up all of the untracked files as well, none of these should change when I switch branch, so these shouldn't affect whether or not the final results differ.
If even a single bit has changed between the two versions, it'll show up in the checksum. It'll be a miracle if both give the same result. Let's try it.
That's not a huge task, but it'll have to wait until tomorrow; I've done enough for today.
The comments and issues from the testing have come flooding in on the Sailfish OS Forum and that's great. What's more there's even been effort started to fix some of the remaining issues. This is really where I was hoping things would go and it bodes well for the future, so I'm very excited to see how everything progresses. I've not had a chance to join the discussion as I've just been concentrating on these patches for the last few days.
If you'd like to read any of my other gecko diary entries, they're all available on my Gecko-dev Diary page.
The process is the same as yesterday. First, list all of the relevant commits:
$ git log --oneline HEAD...78d17b06b04f~Next, work through the logs and diffs a few commits at a time to figure out what needs doing to them. Do they need rewording? Do they need the attribution fixing? Do they need merging with some other commit? Once that's determined and I have a few lined up in my head, I can then perform an interactive rebase to perform all of these changes:
git rebase -i 78d17b06b04fThe commit 78d17b06b04f is set to the HEAD of ESR 91 before I started making changes, so this commit is always the base of everything I need to do. During the rebase I select the commits to edit, reword or squash and then manually perform appropriate actions to get everything into the correct state. For example, to set the attribution I might use this:
git commit --amend --author="<AUTHOR>" --date="<DATE>"Most of the commits need to be amended so that their titles include the topic prefix [sailfishos][gecko] as typically I left these out during development.
And that's pretty much it! The good news is that following this cycle I've managed to complete the remaining 41 commits. Here's what I started with (I've left the last commit in from yesterday so it's clear how they hook together):
5fdfd3eb0500 (HEAD) Set gfx.webrender.force-disabled to default to true 3c72121dd859 [sailfishos][embedlite][egl] Fix mesa egl display and buffer... 16f8accb9c47 Fix `unstable-name-collisions` warning by using fully qualified... 3aa670a3cc6a Fix build failure due to rust-lang/rust PR 99413 60d354ad440c Properly fill out videoframe buffer in GeckoCameraVideoDecoder edb9deacd049 Create GLLibraryEGL as a singleton in GLContextProviderEGL 5f814f20a01f Combined with patdh 0089 - Add a video decoder based on... 33133f24782c Ensure audio continues when screen is locked. Contributes to... 631eb9c9daaf Bug 1758948 [FFmpeg] Use AVFrame::pts instead of... 61617321d2dd Bug 1761471 [FFmpeg 5.0] Get frame color range and color space... ac7f5ffbb2fa Bug 1750760 Update audio and video decoders to ffmpeg 5.0... f5d4bf0de62e Bug 1750760 Open libavcodec.so.59 library and bind ffmpeg 5.0... 1e3291df5048 Bug 1750760 Create ffmpeg59 module for ffmpeg5.0 r=alwu 6d52cc7e9c32 Fix audio underruns for fullduplex mode. JB#55461 874b633f01f1 Add a video decoder based on gecko-camera. JB#56755 dbdf4a057c57 Fix video hardware accelaration not being used on first... d7912ed1ceec Force use of mobile video controls. JB#55484 OMP#JOLLA-371 c4e35d97756e Force recycling of gmp-droid instances. JB#51730 e72aff45bbf1 Prioritize GMP plugins over all others, and support decoding... f2f7a716ae1b Set embedlite.azpc.json.doubletap static pref to default to... 9859c4cc05f4 Make fullscreen enabling work as used to with pref ... b2e11c4108c0 Set security.external_protocol_requires_permission to default... 379f31eef47a Fix content action integration to work. Fixes JB#51235 95da0e408f53 Use libcontentaction for custom scheme uri handling. JB#47892 a9bc82c90f8e Update hash for mapped_hyph fad2d997cea7 [sailfishos][gecko] Add support for prefers-color-scheme 7caca291fbac [sailfishos][gecko] Allow LoginManagerPrompter to find its... b67d3cf6a2d3 Convert panic into early return in Hyphenator 891bd6933db7 Get ContentFrameMessageManager via nsIDocShellTreeOwner... 941e612af842 Drop AudioPlayback messages if no embedder element is defined 36cb2567f3c2 [sailfishos][webrtc] Implement video capture module. JB#53982 ffc93a057267 [sailfishos][webrtc] Implement video capture module. JB#53982 2e65e420780a Enable GMP for encoding/decoding. JB#53982 9a481753fd3b Regenerate moz.build files. c1b06c57549c Switch vp8_encoder_simulcast_proxy for encoder_simulcast_proxy 534ffad75341 Disable desktop sharing feature on SFOS. JB#53756 7bda060a012f [sailfishos][webrtc] Regenerate moz.build files. JB#53756 71ea0764f5ef [sailfishos][webrtc] Update GN build files for WebRTC. JB#53756 7ea10b57b465 Adapt build configuration for SailfishOS. JB#53756 1765dd0460a9 Restore GLScreenBuffer and TextureImageEGL d3ba4df29a32 (temp) Restore NotifyDidPaint event and timers f55057391ac0 Prevent errors from DownloadPrompterThese have reduced down by 10 to make 31 new commits to replace them. The new commits look like this:
24f9ec2df3d3 (HEAD) [sailfishos][embedlite][egl] Fix mesa egl display and... 7e5553ee4b22 [sailfishos][gecko] Fix `unstable-name-collisions` warning by... b08a73b0d2f1 [sailfishos][gecko] Fix build failure due to rust-lang/rust PR... 3705ec69aafa [sailfishos][gecko] Ensure audio continues when screen is... 5cc32e715fac [sailfishos][gecko] Bug 1758948 [FFmpeg] Use AVFrame::pts... 370917e54b8e [sailfishos][gecko] Bug 1761471 [FFmpeg 5.0] Get frame color... 56e2ee73233f [sailfishos][gecko] Bug 1750760 Update audio and video decoders... d4a651ccd7be [sailfishos][gecko] Bug 1750760 Open libavcodec.so.59 library... 65f0141c466a [sailfishos][gecko] Bug 1750760 Create ffmpeg59 module for... b4c938ac9240 [sailfishos][gecko] Fix audio underruns for fullduplex mode... 37bd01779d83 [sailfishos][gecko] Add a video decoder based on gecko-camera... 4c4f0626452d [sailfishos][gecko] Fix video hardware accelaration not being... 570ef20869fd [sailfishos][gecko] Force use of mobile video controls... 7a46a215d649 [sailfishos][gecko] Force recycling of gmp-droid instances... a5faa0c8aabe [sailfishos][gecko] Prioritize GMP plugins over all others, and... 22f531b9a58b [sailfishos][gecko] Make fullscreen enabling work as used to... 974010cd0fda [sailfishos][gecko] Fix content action integration to work... ea2a8a393a1f [sailfishos][gecko] Update hash for mapped_hyph a62d17ace5cb [sailfishos][gecko] Add support for prefers-color-scheme... 83477c046211 [sailfishos][gecko] Allow LoginManagerPrompter to find its... e7209e460314 [sailfishos][gecko] Convert panic into early return in Hyphenator d46228ac0fc2 [sailfishos][gecko] Get ContentFrameMessageManager via... cd66aada3508 [sailfishos][gecko] Drop AudioPlayback messages if no embedder... 18a71b573840 [sailfishos][webrtc] Regenerate moz.build files. JB#53756 4e7332543828 [sailfishos][webrtc] Implement video capture module. JB#53982 1a290ea1db22 [sailfishos][gecko] Enable GMP for encoding/decoding. JB#53982 f10b5c2cf0cf [sailfishos][gecko] Disable desktop sharing feature on SFOS... c961f8a04412 [sailfishos][webrtc] Update GN build files for WebRTC. JB#53756 d69d8be0fea4 [sailfishos][gecko] Adapt build configuration for SailfishOS... 36d30b7f7566 [sailfishos][gecko] Restore NotifyDidPaint event and timers b1406101475c [sailfishos][gecko] Prevent errors from DownloadPrompterIn addition to these I was also able to squash together all of the GLScreenBuffer changes into just a couple of commits. The end result is a total of 78 commits, down from the original 126:
$ git log --oneline HEAD...78d17b06b04f | wc -l 78That's pretty good going. That means there will be 78 patches in the rpm directory. This won't be all of them as I've intentionally skipped some patches that may yet need to be added. But this brings things to a pretty solid state and there's a reasonable chance that the total patch count at the end of all this will be less than 100.
Before I turn these into patches there's a consistency check I want to do. As I mentioned a couple of days back, this process of rewording, re attributing, reordering and restructuring the commits should have left the final source tree in exactly the same state as before. Nothing should have changed apart from the git history.
But there's plenty scope for something to have gone wrong. For example deleting a line of the interactive rebase list can result in an entire commit being lost. If I did that accidentally, it'll affect the final result. So I need to figure out a way to perform a diff on the entire codebase: what I had previously vs. what I have now.
I don't really want to do a diff though, just a hash of the files should be sufficient. Here's what I've devised for this:
$ find . -type f -exec sha256sum {} \; | sha256sum -Short but sweet. This will cycle through all files in the directory and any subdirectories and take the SHA256 checksum of the file. The list of these checksums is then piped into the same SHA256 algorithm to give a final checksum that represents all files and filenames. It's like a super-simple single-layer Merkle tree.
My plan is to run this on the current FIREFOX_ESR_91_9_X_RELBRANCH_sfos branch with all of my newly minted commits. I'll record the result and then switch to the FIREFOX_ESR_91_9_X_RELBRANCH_patches branch before running the command again. When this outputs a checksum I'll be able to compare the two in order to determine whether or not anything has changed. I've not cleaned the repository and I don't plan to, because although the checksum will pick up all of the untracked files as well, none of these should change when I switch branch, so these shouldn't affect whether or not the final results differ.
If even a single bit has changed between the two versions, it'll show up in the checksum. It'll be a miracle if both give the same result. Let's try it.
$ git checkout FIREFOX_ESR_91_9_X_RELBRANCH_sfos Already on 'FIREFOX_ESR_91_9_X_RELBRANCH_sfos' $ find . -type f -exec sha256sum {} \; | sha256sum - 2f8460ce00ef4304058421a444d1d5a08f58cc2f006cf009ee3fa6f7e5cc50b5 - $ git checkout FIREFOX_ESR_91_9_X_RELBRANCH_patches Switched to branch 'FIREFOX_ESR_91_9_X_RELBRANCH_patches' Your branch is up-to-date with 'origin/FIREFOX_ESR_91_9_X_RELBRANCH_patches'. $ find . -type f -exec sha256sum {} \; | sha256sum - 2f8460ce00ef4304058421a444d1d5a08f58cc2f006cf009ee3fa6f7e5cc50b5 -And they're identical! Superb. That puts things in a good place. The next step will be to turn the 78 new commits into patches using git format-patch and commit the result to the gecko-dev repository in order to create a pull request.
That's not a huge task, but it'll have to wait until tomorrow; I've done enough for today.
The comments and issues from the testing have come flooding in on the Sailfish OS Forum and that's great. What's more there's even been effort started to fix some of the remaining issues. This is really where I was hoping things would go and it bodes well for the future, so I'm very excited to see how everything progresses. I've not had a chance to join the discussion as I've just been concentrating on these patches for the last few days.
If you'd like to read any of my other gecko diary entries, they're all available on my Gecko-dev Diary page.
Comments
Uncover Disqus comments