List items
Items from the current list are shown below.
Blog
21 Feb 2024 : Day 163 #
We're making good progress with the WebView rendering pipeline. The first issue to fix, which we've been looking at for the last couple of days, has been ensuring the layer manger is of the Client type, rather than the WebRender type. There's a new WEBRENDER_SOFTWARE feature that was introduced between ESR 78 and ESR 91 which is causing the trouble. In previous builds we disabled the WEBRENDER feature, but now with the new feature it's being enabled again. we need to ensure it's not enabled.
So the key questions to answer today are: how was WEBRENDER being disabled on ESR 78; and can we do something equivalent for WEBRENDER_SOFTWARE on ESR 91.
In the gfxConfigureManager.cpp file there are a couple of encouraging looking methods called gfxConfigManager::ConfigureWebRender() and gfxConfigManager::ConfigureWebRenderSoftware(). These enable and disable the web renderer and software web renderer features respectively. Unsurprisingly, the latter is a new method for ESR 91, but the former is available in both ESR 78 and ESR 91, so I'll concentrate on that one first.
When looking at the code in these we also need to refer back to the initialisation method, because that's where some key variables are being created:
In ESR 78 the logic for whether mFeatureWr should be enabled or not is serpentine. I'm not going to try to work through by hand, rather I'll set the debugger on it and see which way it slithers.
Happily my debug session is still running from yesterday (I think it's been running for three days now), so I can continue straight with that. I'll include the full step-through, but there's a lot of it so don't feel you have to follow along, I'll summarise the important parts afterwards.
We can see that it's set to disabled from the following sequence, copied from the full debugging session above:
The layers are the following:
So, to summarise and bring all this together, the mFeatureWr feature is enabled if all of the following hold:
Now we need to compare this to the process for ESR 91. Before we get into it it's worth noting that the WEBRENDER feature in ESR 91 is also (correctly) disabled, so we may not see any big differences here with this. Let's see.
Again, I can continue with the debugging session I've been running for the last few days:
Both of these are set in the initialisation method, like this:
For the software web render layer manager we could set the MOZ_WEBRENDER environment variable to 0 to force it to be disabled and this will be handy for testing. But in the longer term we should probably put some code into sailfish-browser to explicitly set the gfx.webrender.force-disabled static preference to true.
As I look in to this I discover something surprising. Even though web render is disabled by default, doing some grepping around the code threw the following up in the sailfish-browser code:
I'll look into the rendering more tomorrow.
If you'd like to read any of my other gecko diary entries, they're all available on my Gecko-dev Diary page.
So the key questions to answer today are: how was WEBRENDER being disabled on ESR 78; and can we do something equivalent for WEBRENDER_SOFTWARE on ESR 91.
In the gfxConfigureManager.cpp file there are a couple of encouraging looking methods called gfxConfigManager::ConfigureWebRender() and gfxConfigManager::ConfigureWebRenderSoftware(). These enable and disable the web renderer and software web renderer features respectively. Unsurprisingly, the latter is a new method for ESR 91, but the former is available in both ESR 78 and ESR 91, so I'll concentrate on that one first.
When looking at the code in these we also need to refer back to the initialisation method, because that's where some key variables are being created:
void gfxConfigManager::Init() { [...] mFeatureWr = &gfxConfig::GetFeature(Feature::WEBRENDER); [...] mFeatureWrSoftware = &gfxConfig::GetFeature(Feature::WEBRENDER_SOFTWARE); [...]So these two variables — mFeatureWr and mFeatureWrSoftware are feature objects which we can then use to enable and disable various features.
In ESR 78 the logic for whether mFeatureWr should be enabled or not is serpentine. I'm not going to try to work through by hand, rather I'll set the debugger on it and see which way it slithers.
Happily my debug session is still running from yesterday (I think it's been running for three days now), so I can continue straight with that. I'll include the full step-through, but there's a lot of it so don't feel you have to follow along, I'll summarise the important parts afterwards.
(gdb) delete break Delete all breakpoints? (y or n) y (gdb) b gfxConfigManager::ConfigureWebRender Breakpoint 5 at 0x7fb90a8d88: file gfx/config/gfxConfigManager.cpp, line 194. (gdb) r The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /usr/bin/harbour-webview [...] Thread 7 "GeckoWorkerThre" hit Breakpoint 5, mozilla::gfx::gfxConfigManager:: ConfigureWebRender (this=this@entry=0x7fa7972598) at gfx/config/gfxConfigManager.cpp:194 194 void gfxConfigManager::ConfigureWebRender() { (gdb) n 206 mFeatureWrCompositor->SetDefaultFromPref("gfx.webrender.compositor", true, (gdb) n 209 if (mWrCompositorForceEnabled) { (gdb) n 213 ConfigureFromBlocklist(nsIGfxInfo::FEATURE_WEBRENDER_COMPOSITOR, (gdb) n 219 if (!mHwStretchingSupport && mScaledResolution) { (gdb) n 225 bool guardedByQualifiedPref = ConfigureWebRenderQualified(); (gdb) n 300 obj-build-mer-qt-xr/dist/include/nsTStringRepr.h: No such file or directory. (gdb) p *mFeatureWr $15 = {mDefault = {mMessage = '\000' <repeats 63 times>, mStatus = mozilla::gfx::FeatureStatus::Unused}, mUser = {mMessage = '\000' <repeats 63 times>, mStatus = mozilla::gfx::FeatureStatus::Unused}, mEnvironment = {mMessage = '\000' <repeats 63 times>, mStatus = mozilla::gfx::FeatureStatus::Unused}, mRuntime = {mMessage = '\000' <repeats 63 times>, mStatus = mozilla::gfx::FeatureStatus::Unused}, mFailureId = {<nsTSubstring<char>> = {<mozilla::detail::nsTStringRepr<char>> = {mData = 0x7fbc7d4f42 <gNullChar> "", mLength = 0, mDataFlags = mozilla::detail::StringDataFlags::TERMINATED, mClassFlags = mozilla::detail::StringClassFlags::NULL_TERMINATED}, static kMaxCapacity = 2147483637}, <No data fields>}} (gdb) p mFeatureWr->GetValue() $16 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWr->IsEnabled() $17 = false (gdb) p mFeatureWr->mDefault.mStatus $30 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWr->mRuntime.mStatus $31 = mozilla::gfx::FeatureStatus::Unused (gdb) n 235 if (mWrEnvForceEnabled) { (gdb) p mWrEnvForceEnabled $18 = false (gdb) n 237 } else if (mWrForceEnabled) { (gdb) p mWrForceEnabled $19 = false (gdb) n 239 } else if (mFeatureWrQualified->IsEnabled()) { (gdb) p mFeatureWrQualified->IsEnabled() $20 = false (gdb) n 253 if (mWrForceDisabled || (gdb) p mWrForceDisabled $21 = false (gdb) p mWrEnvForceDisabled $22 = false (gdb) p mWrQualifiedOverride.isNothing() Cannot evaluate function -- may be inlined (gdb) n 261 if (!mFeatureHwCompositing->IsEnabled()) { (gdb) n 268 if (mSafeMode) { (gdb) n 276 if (mIsWindows && !mIsWin10OrLater && !mDwmCompositionEnabled) { (gdb) p mIsWindows $23 = false (gdb) p mIsWin10OrLater $24 = false (gdb) p mDwmCompositionEnabled $25 = true (gdb) n 283 NS_LITERAL_CSTRING("FEATURE_FAILURE_DEFAULT_OFF")); (gdb) n 285 if (mFeatureD3D11HwAngle && mWrForceAngle) { (gdb) n 301 if (!mFeatureWr->IsEnabled() && mDisableHwCompositingNoWr) { (gdb) p mFeatureWr->IsEnabled() $26 = false (gdb) p mDisableHwCompositingNoWr $27 = false (gdb) n 324 NS_LITERAL_CSTRING("FEATURE_FAILURE_DEFAULT_OFF")); (gdb) n 326 if (mWrDCompWinEnabled) { (gdb) n 334 if (!mWrPictureCaching) { (gdb) n 340 if (!mFeatureWrDComp->IsEnabled() && mWrCompositorDCompRequired) { (gdb) n 348 if (mWrPartialPresent) { (gdb) n gfxPlatform::InitWebRenderConfig (this=<optimized out>) at gfx/thebes/gfxPlatform.cpp:2733 2733 if (Preferences::GetBool("gfx.webrender.program-binary-disk", false)) { (gdb) c [...]That's a bit too much detail there, but the key conclusion is that mFeatureWr (which represents the state of the WEBRENDER feature starts off disabled and the value is never changed. So by the end of the gfxConfigManager::ConfigureWebRender() method the feature remains disabled. It's not changed anywhere else and so we're left with our layer manager being created as a Client layer manager, which is what we need.
We can see that it's set to disabled from the following sequence, copied from the full debugging session above:
(gdb) p mFeatureWr->IsEnabled() $17 = false (gdb) p mFeatureWr->mDefault.mStatus $30 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWr->mRuntime.mStatus $31 = mozilla::gfx::FeatureStatus::UnusedFeatures are made from multiple layers of states. Each layer can be either set or unused. To determine the state of a feature each layer is examined in order until one of them is set to something other than Unused. The first unused layer provides the actual state of the feature.
The layers are the following:
- mRuntime
- mUser
- mEnvironment
- mStatus
- mDefault
So, to summarise and bring all this together, the mFeatureWr feature is enabled if all of the following hold:
- mFeatureWr->mDefault.mStatus is set to anything other than Unused.
- The mStatus value of one of the other layers is set to something other than Unused and is either Available or ForceEnabled.
Now we need to compare this to the process for ESR 91. Before we get into it it's worth noting that the WEBRENDER feature in ESR 91 is also (correctly) disabled, so we may not see any big differences here with this. Let's see.
Again, I can continue with the debugging session I've been running for the last few days:
(gdb) delete break Delete all breakpoints? (y or n) y (gdb) b gfxConfigManager::ConfigureWebRender Breakpoint 9 at 0x7ff138d708: file gfx/config/gfxConfigManager.cpp, line 215. (gdb) b gfxConfigManager::ConfigureWebRenderSoftware Breakpoint 10 at 0x7ff138d41c: file gfx/config/gfxConfigManager.cpp, line 125. (gdb) r The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /usr/bin/harbour-webview [...] Thread 7 "GeckoWorkerThre" hit Breakpoint 9, mozilla::gfx::gfxConfigManager:: ConfigureWebRender (this=this@entry=0x7fd7da72f8) at gfx/config/gfxConfigManager.cpp:215 215 void gfxConfigManager::ConfigureWebRender() { (gdb) p mFeatureWr->IsEnabled() $13 = false (gdb) p mFeatureWr->mDefault.mStatus $14 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWr->mRuntime.mStatus $15 = mozilla::gfx::FeatureStatus::UnusedSo as we go in to the ConfigureWebRender() method the value is set to disabled. This is the same as for ESR 78.
(gdb) n 230 mFeatureWrCompositor->SetDefaultFromPref("gfx.webrender.compositor", true, (gdb) 233 if (mWrCompositorForceEnabled) { (gdb) 237 ConfigureFromBlocklist(nsIGfxInfo::FEATURE_WEBRENDER_COMPOSITOR, (gdb) 243 if (!mHwStretchingSupport.IsFullySupported() && mScaledResolution) { (gdb) 253 ConfigureWebRenderSoftware(); (gdb) nAt this point we're jumping in to the ConfigureWebRenderSoftware() method. We're going to continue into it, since we're interested to know what happens there. But it's worth noting that this is a departure from what happens on ESR 78.
Thread 7 "GeckoWorkerThre" hit Breakpoint 10, mozilla::gfx::gfxConfigManager:: ConfigureWebRenderSoftware (this=this@entry=0x7fd7da72f8) at gfx/config/gfxConfigManager.cpp:125 125 void gfxConfigManager::ConfigureWebRenderSoftware() { (gdb) p mFeatureWrSoftware->IsEnabled() $16 = false (gdb) p mFeatureWrSoftware->mDefault.mStatus $17 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWrSoftware->mDefault.mStatus $18 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWrSoftware->mRuntime.mStatus $19 = mozilla::gfx::FeatureStatus::UnusedGoing in we also see that the mFeatureWrSoftware feature is disabled.
(gdb) n 128 mFeatureWrSoftware->EnableByDefault(); (gdb) n 134 if (mWrSoftwareForceEnabled) { (gdb) p mFeatureWrSoftware->IsEnabled() $20 = true (gdb) p mFeatureWrSoftware->mDefault.mStatus $21 = mozilla::gfx::FeatureStatus::Available (gdb) p mFeatureWrSoftware->mRuntime.mStatus $22 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWrSoftware->mUser.mStatus $23 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWrSoftware->mEnvironment.mStatus $24 = mozilla::gfx::FeatureStatus::Unused (gdb) p mFeatureWrSoftware->mDefault.mStatus $25 = mozilla::gfx::FeatureStatus::AvailableBut this is immediately switched to being enabled; in this case set as having a default value of Available. So far there have been no conditions on the execution, so we're guaranteed to reach this state every time. Let's continue.
(gdb) p mWrSoftwareForceEnabled $33 = false (gdb) n 136 } else if (mWrForceDisabled || mWrEnvForceDisabled) { (gdb) p mWrForceDisabled $26 = false (gdb) p mWrEnvForceDisabled $27 = falseHere there was an opportunity to disable the feature if either mWrForceDisabled or mWrEnvForceDisabled were set to true, but since both were set to false we skip over this possibility. This might be our way in to disabling it, so we may want to return to this. But let's continue on with the rest of the debugging for now.
(gdb) n 141 } else if (gfxPlatform::DoesFissionForceWebRender()) { (gdb) n 145 if (!mHasWrSoftwareBlocklist) { (gdb) p mHasWrSoftwareBlocklist $28 = falseAt this point the mHasWrSoftwareBlocklist variable is set to false which causes us to jump out of the ConfigureWebRenderSoftware() method early. So we'll return back up the stack to the ConfigureWebRender() method and continue from there.
(gdb) n mozilla::gfx::gfxConfigManager::ConfigureWebRender (this=this@entry=0x7fd7da72f8) at gfx/config/gfxConfigManager.cpp:254 254 ConfigureWebRenderQualified(); (gdb) n 256 mFeatureWr->EnableByDefault(); (gdb) n 262 if (mWrSoftwareForceEnabled) { (gdb) p mFeatureWr->IsEnabled() $29 = true (gdb) nHere we see another change from ESR 78. The mFeatureWr feature is enabled here. We already know it's ultimately disabled so we should keep an eye out for where that happens.
266 } else if (mWrEnvForceEnabled) { (gdb) 268 } else if (mWrForceDisabled || mWrEnvForceDisabled) { (gdb) 275 } else if (mWrForceEnabled) { (gdb) p mWrForceEnabled $30 = false (gdb) n 279 if (!mFeatureWrQualified->IsEnabled()) { (gdb) p mFeatureWrQualified->IsEnabled() $31 = false (gdb) n 282 mFeatureWr->Disable(FeatureStatus::Disabled, "Not qualified", (gdb) n 287 if (!mFeatureHwCompositing->IsEnabled()) { (gdb) p mFeatureWr->IsEnabled() $32 = falseSo here it gets disabled again and the reason is because mFeatureWrQualified is disabled. Here's the comment text that goes alongside this in the code (the debugger skips these comments):
// No qualified hardware. If we haven't allowed software fallback, // then we need to disable WR.So we'll end up with this being disabled whatever happens. There's not much to see in the remainder of the method, but let's skip through the rest of the steps for completeness.
(gdb) n 293 if (mSafeMode) { (gdb) n 302 if (mXRenderEnabled) { (gdb) n 312 mFeatureWrAngle->EnableByDefault(); (gdb) n 313 if (mFeatureD3D11HwAngle) { (gdb) n 335 mFeatureWrAngle->Disable(FeatureStatus::Unavailable, "OS not supported", (gdb) n 339 if (mWrForceAngle && mFeatureWr->IsEnabled() && (gdb) n 347 if (!mFeatureWr->IsEnabled() && mDisableHwCompositingNoWr) { (gdb) n 367 mFeatureWrDComp->EnableByDefault(); (gdb) n 368 if (!mWrDCompWinEnabled) { (gdb) n 369 mFeatureWrDComp->UserDisable("User disabled via pref", (gdb) n 373 if (!mIsWin10OrLater) { (gdb) n 375 mFeatureWrDComp->Disable(FeatureStatus::Unavailable, (gdb) n 380 if (!mIsNightly) { (gdb) n 383 nsAutoString adapterVendorID; (gdb) n 384 mGfxInfo->GetAdapterVendorID(adapterVendorID); (gdb) n 385 if (adapterVendorID == u"0x10de") { (gdb) n 383 nsAutoString adapterVendorID; (gdb) n 396 mFeatureWrDComp->MaybeSetFailed( (gdb) n 399 mFeatureWrDComp->MaybeSetFailed(mFeatureWrAngle->IsEnabled(), (gdb) n 403 if (!mFeatureWrDComp->IsEnabled() && mWrCompositorDCompRequired) { (gdb) n 411 if (mWrPartialPresent) { (gdb) n 654 ${PROJECT}/obj-build-mer-qt-xr/dist/include/mozilla/StaticPrefList_gfx.h: No such file or directory. (gdb) n 433 ConfigureFromBlocklist(nsIGfxInfo::FEATURE_WEBRENDER_SHADER_CACHE, (gdb) n 435 if (!mFeatureWr->IsEnabled()) { (gdb) n 436 mFeatureWrShaderCache->ForceDisable(FeatureStatus::Unavailable, (gdb) n 441 mFeatureWrOptimizedShaders->EnableByDefault(); (gdb) n 442 if (!mWrOptimizedShaders) { (gdb) n 446 ConfigureFromBlocklist(nsIGfxInfo::FEATURE_WEBRENDER_OPTIMIZED_SHADERS, (gdb) n 448 if (!mFeatureWr->IsEnabled()) { (gdb) n 449 mFeatureWrOptimizedShaders->ForceDisable(FeatureStatus::Unavailable, (gdb) nAnd we're out of the method. So that's it: we can see that mFeatureWr is disabled here, as expected. However when it comes to mFeatureWrSoftware it's a different story. The value is enabled by default; to get it disabled we'll need to ensure one of mWrForceDisabled or mWrEnvForceDisabled is set to true.
Both of these are set in the initialisation method, like this:
void gfxConfigManager::Init() { [...] mWrForceDisabled = StaticPrefs::gfx_webrender_force_disabled_AtStartup(); [...] mWrEnvForceDisabled = gfxPlatform::WebRenderEnvvarDisabled(); [...]Here's the code that creates the former:
ONCE_PREF( "gfx.webrender.force-disabled", gfx_webrender_force_disabled, gfx_webrender_force_disabled_AtStartup, bool, false )That's from the autogenerated obj-build-mer-qt-xr/modules/libpref/init/StaticPrefList_gfx.h file. This is being generated from the gecko-dev/modules/libpref/init/StaticPrefList.yaml file, the relevant part of which looks like this:
# Also expose a pref to allow users to force-disable WR. This is exposed # on all channels because WR can be enabled on qualified hardware on all # channels. - name: gfx.webrender.force-disabled type: bool value: false mirror: onceThe latter is set using an environment variable:
/*static*/ bool gfxPlatform::WebRenderEnvvarDisabled() { const char* env = PR_GetEnv("MOZ_WEBRENDER"); return (env && *env == '0'); }Okay, we've reached the end of this piece of investigation. What's clear is that there may not be any Sailfish-specific code for disabling the web render layer manager because it's being disabled by default anyway.
For the software web render layer manager we could set the MOZ_WEBRENDER environment variable to 0 to force it to be disabled and this will be handy for testing. But in the longer term we should probably put some code into sailfish-browser to explicitly set the gfx.webrender.force-disabled static preference to true.
As I look in to this I discover something surprising. Even though web render is disabled by default, doing some grepping around the code threw the following up in the sailfish-browser code:
void DeclarativeWebUtils::setRenderingPreferences() { SailfishOS::WebEngineSettings *webEngineSettings = SailfishOS::WebEngineSettings::instance(); // Use external Qt window for rendering content webEngineSettings->setPreference( QString("gfx.compositor.external-window"), QVariant(true)); webEngineSettings->setPreference( QString("gfx.compositor.clear-context"), QVariant(false)); webEngineSettings->setPreference( QString("gfx.webrender.force-disabled"), QVariant(true)); webEngineSettings->setPreference( QString("embedlite.compositor.external_gl_context"), QVariant(true)); }This is fine for the browser, but it's not going to get executed for the WebView, so I'll need to set this in WebEngineSettings::initialize() as well. Thankfully, making this change turns out to be pretty straightforward:
diff --git a/lib/webenginesettings.cpp b/lib/webenginesettings.cpp index de9e4b86..13b21d5b 100644 --- a/lib/webenginesettings.cpp +++ b/lib/webenginesettings.cpp @@ -110,6 +110,10 @@ void SailfishOS::WebEngineSettings::initialize() engineSettings->setPreference(QStringLiteral("intl.accept_languages"), QVariant::fromValue<QString>(langs)); + // Ensure the web renderer is disabled + engineSettings->setPreference(QStringLiteral("gfx.webrender.force-disabled"), + QVariant(true)); + Silica::Theme *silicaTheme = Silica::Theme::instance(); // Notify gecko when the ambience switches between light and darkAs well as this change I also had to amend the rawwebview.cpp file to accommodate some of the API changes I made earlier to gecko. I guess I've not built the sailfish-components-webview packages recently or this would have come up. Nevertheless the fix isn't anything too dramatic:
diff --git a/import/webview/rawwebview.cpp b/import/webview/rawwebview.cpp index 1b1bb92a..2eab77f5 100644 --- a/import/webview/rawwebview.cpp +++ b/import/webview/rawwebview.cpp @@ -37,7 +37,7 @@ public: ViewCreator(); ~ViewCreator(); - quint32 createView(const quint32 &parentId, const uintptr_t &parentBrowsingContext) override; + quint32 createView(const quint32 &parentId, const uintptr_t &parentBrowsingContext, bool hidden) override; static std::shared_ptr<ViewCreator> instance(); @@ -54,9 +54,10 @@ ViewCreator::~ViewCreator() SailfishOS::WebEngine::instance()->setViewCreator(nullptr); } -quint32 ViewCreator::createView(const quint32 &parentId, const uintptr_t &parentBrowsingContext) +quint32 ViewCreator::createView(const quint32 &parentId, const uintptr_t &parentBrowsingContext, bool hidden) { Q_UNUSED(parentBrowsingContext) + Q_UNUSED(hidden) for (RawWebView *view : views) { if (view->uniqueId() == parentId) {Having fixed all this, I've built and transferred the new packages over to my phone. Now when I run the harbour-webview example app I get something quite different to the crash we were seeing before:
[defaultuser@Xperia10III gecko]$ harbour-webview [D] unknown:0 - QML debugging is enabled. Only use this in a safe environment. [D] main:30 - WebView Example [D] main:44 - Using default start URL: "https://www.flypig.co.uk/search/" [D] main:47 - Opening webview [D] unknown:0 - Using Wayland-EGL library "libutils.so" not found library "libcutils.so" not found library "libhardware.so" not found library "android.hardware.graphics.mapper@2.0.so" not found library "android.hardware.graphics.mapper@2.1.so" not found library "android.hardware.graphics.mapper@3.0.so" not found library "android.hardware.graphics.mapper@4.0.so" not found library "libc++.so" not found library "libhidlbase.so" not found library "libgralloctypes.so" not found library "android.hardware.graphics.common@1.2.so" not found library "libion.so" not found library "libz.so" not found library "libhidlmemory.so" not found library "android.hidl.memory@1.0.so" not found library "vendor.qti.qspmhal@1.0.so" not found greHome from GRE_HOME:/usr/bin libxul.so is not found, in /usr/bin/libxul.so Created LOG for EmbedLiteTrace [W] unknown:7 - file:///usr/share/harbour-webview/qml/harbour-webview.qml:7:30: Type WebViewPage unavailable initialPage: Component { WebViewPage { } } ^ [W] unknown:13 - file:///usr/share/harbour-webview/qml/pages/ WebViewPage.qml:13:5: Type WebView unavailable WebView { ^ [W] unknown:141 - file:///usr/lib64/qt5/qml/Sailfish/WebView/WebView.qml:141:9: Type TextSelectionController unavailable TextSelectionController { ^ [W] unknown:14 - file:///usr/lib64/qt5/qml/Sailfish/WebView/Controls/ TextSelectionController.qml:14:1: module "QOfono" is not installed import QOfono 0.2 ^ Created LOG for EmbedLite JSComp: EmbedLiteConsoleListener.js loaded JSComp: ContentPermissionManager.js loaded JSComp: EmbedLiteChromeManager.js loaded JSComp: EmbedLiteErrorPageHandler.js loaded JSComp: EmbedLiteFaviconService.js loaded JSComp: EmbedLiteGlobalHelper.js loaded EmbedLiteGlobalHelper app-startup JSComp: EmbedLiteOrientationChangeHandler.js loaded JSComp: EmbedLiteSearchEngine.js loaded JSComp: EmbedLiteSyncService.js loaded EmbedLiteSyncService app-startup JSComp: EmbedLiteWebrtcUI.js: loaded JSComp: EmbedLiteWebrtcUI.js: got app-startup JSComp: EmbedPrefService.js loaded EmbedPrefService app-startup JSComp: EmbedliteDownloadManager.js loaded JSComp: LoginsHelper.js loaded JSComp: PrivateDataManager.js loaded JSComp: UserAgentOverrideHelper.js loaded UserAgentOverrideHelper app-startup CONSOLE message: [JavaScript Error: "Unexpected event profile-after-change" {file: "resource://gre/modules/URLQueryStrippingListService.jsm" line: 228}] observe@resource://gre/modules/URLQueryStrippingListService.jsm:228:12 Created LOG for EmbedPrefsNo crash, several errors, but (of course) still a blank screen: no actual rendering taking place. But this is still really good progress. The WebView application which was completely crashing before, is now running, just not rendering. That means we now have the opportunity to debug and fix it. One more step forwards.
I'll look into the rendering more tomorrow.
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