Title: [291301] trunk/Source/WebCore
Revision
291301
Author
grao...@webkit.org
Date
2022-03-15 10:24:09 -0700 (Tue, 15 Mar 2022)

Log Message

[model] model-element/model-element-camera.html is a failure
https://bugs.webkit.org/show_bug.cgi?id=237894
rdar://88982597

Reviewed by Tim Horton.

Ensure we have a non-zero contentSize() and model data before attempting to
create a player. Otherwise, we could end up with a zero frame when calling
into ARKit and the model would fail to load and the ready promise would be
rejected, causing this test to fail.

We can change the existing call site to sizeMayHaveChanged() to no longer
check whether we are using a platform layer since sizeMayHaveChanged() now
takes care of checking whether it has a player.

* Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::createModelPlayer):
(WebCore::HTMLModelElement::sizeMayHaveChanged):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateConfiguration):
(WebCore::RenderLayerBacking::updateGeometry):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (291300 => 291301)


--- trunk/Source/WebCore/ChangeLog	2022-03-15 17:14:54 UTC (rev 291300)
+++ trunk/Source/WebCore/ChangeLog	2022-03-15 17:24:09 UTC (rev 291301)
@@ -1,3 +1,27 @@
+2022-03-15  Antoine Quint  <grao...@webkit.org>
+
+        [model] model-element/model-element-camera.html is a failure
+        https://bugs.webkit.org/show_bug.cgi?id=237894
+        rdar://88982597
+
+        Reviewed by Tim Horton.
+
+        Ensure we have a non-zero contentSize() and model data before attempting to
+        create a player. Otherwise, we could end up with a zero frame when calling
+        into ARKit and the model would fail to load and the ready promise would be
+        rejected, causing this test to fail.
+
+        We can change the existing call site to sizeMayHaveChanged() to no longer
+        check whether we are using a platform layer since sizeMayHaveChanged() now
+        takes care of checking whether it has a player.
+
+        * Modules/model-element/HTMLModelElement.cpp:
+        (WebCore::HTMLModelElement::createModelPlayer):
+        (WebCore::HTMLModelElement::sizeMayHaveChanged):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateConfiguration):
+        (WebCore::RenderLayerBacking::updateGeometry):
+
 2022-03-15  Brandon Stewart  <brandonstew...@apple.com>
 
         Line Builder and Content Breaker out of sync

Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp (291300 => 291301)


--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2022-03-15 17:14:54 UTC (rev 291300)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2022-03-15 17:24:09 UTC (rev 291301)
@@ -255,6 +255,13 @@
 
 void HTMLModelElement::createModelPlayer()
 {
+    if (!m_model)
+        return;
+
+    auto size = contentSize();
+    if (size.isEmpty())
+        return;
+
     ASSERT(document().page());
     m_modelPlayer = document().page()->modelPlayerProvider().createModelPlayer(*this);
     if (!m_modelPlayer) {
@@ -264,7 +271,7 @@
 
     // FIXME: We need to tell the player if the size changes as well, so passing this
     // in with load probably doesn't make sense.
-    m_modelPlayer->load(*m_model, contentSize());
+    m_modelPlayer->load(*m_model, size);
 }
 
 bool HTMLModelElement::usesPlatformLayer() const
@@ -281,7 +288,10 @@
 
 void HTMLModelElement::sizeMayHaveChanged()
 {
-    m_modelPlayer->sizeDidChange(contentSize());
+    if (m_modelPlayer)
+        m_modelPlayer->sizeDidChange(contentSize());
+    else
+        createModelPlayer();
 }
 
 void HTMLModelElement::didFinishLoading(ModelPlayer& modelPlayer)

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (291300 => 291301)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2022-03-15 17:14:54 UTC (rev 291300)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2022-03-15 17:24:09 UTC (rev 291301)
@@ -1110,6 +1110,8 @@
         else if (auto model = element->model())
             m_graphicsLayer->setContentsToModel(WTFMove(model), element->isInteractive() ? GraphicsLayer::ModelInteraction::Enabled : GraphicsLayer::ModelInteraction::Disabled);
 
+        element->sizeMayHaveChanged();
+
         layerConfigChanged = true;
     }
 #endif
@@ -1518,11 +1520,8 @@
         setContentsNeedDisplay();
 
 #if ENABLE(MODEL_ELEMENT)
-    if (is<RenderModel>(renderer())) {
-        auto* element = downcast<HTMLModelElement>(renderer().element());
-        if (element->usesPlatformLayer())
-            element->sizeMayHaveChanged();
-    }
+    if (is<RenderModel>(renderer()))
+        downcast<HTMLModelElement>(renderer().element())->sizeMayHaveChanged();
 #endif
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to