Diff
Modified: trunk/Source/WebCore/ChangeLog (248878 => 248879)
--- trunk/Source/WebCore/ChangeLog 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/ChangeLog 2019-08-20 00:37:55 UTC (rev 248879)
@@ -1,3 +1,34 @@
+2019-08-19 Justin Fan <justin_...@apple.com>
+
+ WebGPU layers don't show up sometimes
+ https://bugs.webkit.org/show_bug.cgi?id=200752
+
+ Reviewed by Dean Jackson.
+
+ Ensure HTML canvas is properly notified of WebGPU updates. Fixes alpha WebGPU MotionMark benchmark no-show issue.
+
+ Normal WebGPU behavior unaffected and covered by existing tests.
+
+ * Modules/webgpu/GPUCanvasContext.cpp:
+ (WebCore::GPUCanvasContext::configureSwapChain):
+ (WebCore::GPUCanvasContext::reshape):
+ * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
+ (WebCore::WHLSL::Metal::inlineNativeFunction):
+ * Sources.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * html/canvas/GPUBasedCanvasRenderingContext.cpp: Added.
+ (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext):
+ (WebCore::GPUBasedCanvasRenderingContext::htmlCanvas const):
+ (WebCore::GPUBasedCanvasRenderingContext::notifyCanvasContentChanged):
+ * html/canvas/GPUBasedCanvasRenderingContext.h:
+ (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext): Deleted.
+ * html/canvas/WebGLRenderingContextBase.cpp:
+ (WebCore::WebGLRenderingContextBase::reshape):
+ (WebCore::WebGLRenderingContextBase::htmlCanvas): Deleted.
+ * html/canvas/WebGLRenderingContextBase.h:
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::contentChanged):
+
2019-08-19 Sihui Liu <sihui_...@apple.com>
Remove IDB-specific quota
Modified: trunk/Source/WebCore/Modules/webgpu/GPUCanvasContext.cpp (248878 => 248879)
--- trunk/Source/WebCore/Modules/webgpu/GPUCanvasContext.cpp 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/Modules/webgpu/GPUCanvasContext.cpp 2019-08-20 00:37:55 UTC (rev 248879)
@@ -69,6 +69,7 @@
m_swapChain->destroy();
m_swapChain = newSwapChain.copyRef();
+ notifyCanvasContentChanged();
}
return newSwapChain;
@@ -85,6 +86,8 @@
{
if (m_swapChain && m_swapChain->swapChain())
m_swapChain->swapChain()->reshape(width, height);
+
+ notifyCanvasContentChanged();
}
void GPUCanvasContext::markLayerComposited()
Modified: trunk/Source/WebCore/Sources.txt (248878 => 248879)
--- trunk/Source/WebCore/Sources.txt 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/Sources.txt 2019-08-20 00:37:55 UTC (rev 248879)
@@ -1241,6 +1241,7 @@
html/canvas/EXTShaderTextureLOD.cpp
html/canvas/EXTsRGB.cpp
html/canvas/EXTTextureFilterAnisotropic.cpp
+html/canvas/GPUBasedCanvasRenderingContext.cpp
html/canvas/ImageBitmapRenderingContext.cpp
html/canvas/OESElementIndexUint.cpp
html/canvas/OESStandardDerivatives.cpp
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (248878 => 248879)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2019-08-20 00:37:55 UTC (rev 248879)
@@ -5581,6 +5581,7 @@
0F15DA890F3AAEE70000CE47 /* CSSAnimationControllerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSAnimationControllerPrivate.h; sourceTree = "<group>"; };
0F15ED591B7EC7C500EDDFEB /* WillChangeData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WillChangeData.cpp; sourceTree = "<group>"; };
0F15ED5A1B7EC7C500EDDFEB /* WillChangeData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WillChangeData.h; sourceTree = "<group>"; };
+ 0F16BED92304F05300B4A167 /* GPUBasedCanvasRenderingContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GPUBasedCanvasRenderingContext.cpp; sourceTree = "<group>"; };
0F17747E1378B771009DA76A /* ScrollAnimatorIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollAnimatorIOS.h; sourceTree = "<group>"; };
0F17747F1378B772009DA76A /* ScrollAnimatorIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollAnimatorIOS.mm; sourceTree = "<group>"; };
0F1A0C36229A481800D37ADB /* VelocityData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VelocityData.h; sourceTree = "<group>"; };
@@ -18106,6 +18107,7 @@
7728694B14F8882500F484DC /* EXTTextureFilterAnisotropic.cpp */,
7728694C14F8882500F484DC /* EXTTextureFilterAnisotropic.h */,
7728694D14F8882500F484DC /* EXTTextureFilterAnisotropic.idl */,
+ 0F16BED92304F05300B4A167 /* GPUBasedCanvasRenderingContext.cpp */,
311518FB1E78C15F00EC514A /* GPUBasedCanvasRenderingContext.h */,
7C7903B11F86F95C00463A70 /* ImageBitmapRenderingContext.cpp */,
7C7903B01F86F95C00463A70 /* ImageBitmapRenderingContext.h */,
@@ -18548,8 +18550,6 @@
510A58EE1BAB71E000C19282 /* server */ = {
isa = PBXGroup;
children = (
- 9323B06D23061E9B00901C8B /* IDBSerializationContext.cpp */,
- 9323B06F23061E9C00901C8B /* IDBSerializationContext.h */,
51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */,
516D7D6D1BB5F06500AF7C77 /* IDBConnectionToClient.cpp */,
510A58FE1BB07AA500C19282 /* IDBConnectionToClient.h */,
@@ -18556,6 +18556,8 @@
516D7D6E1BB5F06500AF7C77 /* IDBConnectionToClientDelegate.h */,
511EC1251C50AA570032F983 /* IDBSerialization.cpp */,
511EC1261C50AA570032F983 /* IDBSerialization.h */,
+ 9323B06D23061E9B00901C8B /* IDBSerializationContext.cpp */,
+ 9323B06F23061E9C00901C8B /* IDBSerializationContext.h */,
510A58EF1BAB720F00C19282 /* IDBServer.cpp */,
510A58F01BAB720F00C19282 /* IDBServer.h */,
51EEAA711BEFFA7900218008 /* IndexValueEntry.cpp */,
@@ -29526,6 +29528,7 @@
5145B10A1BC48E2E00E86219 /* IDBResourceIdentifier.h in Headers */,
51D7236D1BB6174900478CA3 /* IDBResultData.h in Headers */,
511EC1281C50AACA0032F983 /* IDBSerialization.h in Headers */,
+ 9323B07023061F9700901C8B /* IDBSerializationContext.h in Headers */,
5185FCBB1BB4CBF80012898F /* IDBServer.h in Headers */,
5185FCAD1BB4C4E80012898F /* IDBTransaction.h in Headers */,
5198F7AD1BBDD3EB00E2CC5F /* IDBTransactionInfo.h in Headers */,
@@ -29999,7 +30002,6 @@
BC4918C90BFEA050009D6316 /* JSHTMLIFrameElement.h in Headers */,
1AE2AA980A1CDD2D00B42B25 /* JSHTMLImageElement.h in Headers */,
A80E7E970A1A83E3007FB8C5 /* JSHTMLInputElement.h in Headers */,
- 9323B07023061F9700901C8B /* IDBSerializationContext.h in Headers */,
836B09561F5F34D9003C3702 /* JSHTMLInputElementEntriesAPI.h in Headers */,
A6148A7912E41E3B0044A784 /* JSHTMLKeygenElement.h in Headers */,
1AE2AB220A1CE63B00B42B25 /* JSHTMLLabelElement.h in Headers */,
Copied: trunk/Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.cpp (from rev 248878, trunk/Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.h) (0 => 248879)
--- trunk/Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.cpp (rev 0)
+++ trunk/Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.cpp 2019-08-20 00:37:55 UTC (rev 248879)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include "config.h"
+#include "GPUBasedCanvasRenderingContext.h"
+
+#include "HTMLCanvasElement.h"
+#include "RenderBox.h"
+
+namespace WebCore {
+
+GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext(CanvasBase& canvas)
+ : CanvasRenderingContext(canvas)
+ , ActiveDOMObject(canvas.scriptExecutionContext())
+{
+}
+
+HTMLCanvasElement* GPUBasedCanvasRenderingContext::htmlCanvas() const
+{
+ auto& base = canvasBase();
+ if (!is<HTMLCanvasElement>(base))
+ return nullptr;
+ return &downcast<HTMLCanvasElement>(base);
+}
+
+void GPUBasedCanvasRenderingContext::notifyCanvasContentChanged()
+{
+ if (auto* canvas = htmlCanvas()) {
+ RenderBox* renderBox = htmlCanvas()->renderBox();
+ if (renderBox && renderBox->hasAcceleratedCompositing())
+ renderBox->contentChanged(CanvasChanged);
+ }
+}
+
+} // namespace WebCore
Modified: trunk/Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.h (248878 => 248879)
--- trunk/Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.h 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.h 2019-08-20 00:37:55 UTC (rev 248879)
@@ -31,6 +31,8 @@
namespace WebCore {
+class HTMLCanvasElement;
+
class GPUBasedCanvasRenderingContext : public CanvasRenderingContext, public ActiveDOMObject {
WTF_MAKE_ISO_NONALLOCATABLE(GPUBasedCanvasRenderingContext);
public:
@@ -51,11 +53,10 @@
virtual void markLayerComposited() = 0;
protected:
- GPUBasedCanvasRenderingContext(CanvasBase& canvas)
- : CanvasRenderingContext(canvas)
- , ActiveDOMObject(canvas.scriptExecutionContext())
- {
- }
+ GPUBasedCanvasRenderingContext(CanvasBase&);
+
+ HTMLCanvasElement* htmlCanvas() const;
+ void notifyCanvasContentChanged();
};
} // namespace WebCore
Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (248878 => 248879)
--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2019-08-20 00:37:55 UTC (rev 248879)
@@ -676,14 +676,6 @@
return &downcast<HTMLCanvasElement>(base);
}
-HTMLCanvasElement* WebGLRenderingContextBase::htmlCanvas()
-{
- auto& base = canvasBase();
- if (!is<HTMLCanvasElement>(base))
- return nullptr;
- return &downcast<HTMLCanvasElement>(base);
-}
-
OffscreenCanvas* WebGLRenderingContextBase::offscreenCanvas()
{
auto& base = canvasBase();
@@ -1089,12 +1081,7 @@
height = clamp(height, 1, maxHeight);
if (m_needsUpdate) {
- auto* canvas = htmlCanvas();
- if (canvas) {
- RenderBox* renderBox = htmlCanvas()->renderBox();
- if (renderBox && renderBox->hasAcceleratedCompositing())
- renderBox->contentChanged(CanvasChanged);
- }
+ notifyCanvasContentChanged();
m_needsUpdate = false;
}
Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h (248878 => 248879)
--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h 2019-08-20 00:37:55 UTC (rev 248879)
@@ -836,7 +836,6 @@
// Check if EXT_draw_buffers extension is supported and if it satisfies the WebGL requirements.
bool supportsDrawBuffers();
- HTMLCanvasElement* htmlCanvas();
OffscreenCanvas* offscreenCanvas();
template <typename T> inline Optional<T> checkedAddAndMultiply(T value, T add, T multiply);
Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (248878 => 248879)
--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2019-08-20 00:21:29 UTC (rev 248878)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2019-08-20 00:37:55 UTC (rev 248879)
@@ -926,7 +926,7 @@
resetContentsRect();
}
#endif
-#if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS)
+#if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS) || ENABLE(WEBGPU)
else if (renderer().isCanvas() && canvasCompositingStrategy(renderer()) == CanvasAsLayerContents) {
const HTMLCanvasElement* canvas = downcast<HTMLCanvasElement>(renderer().element());
if (auto* context = canvas->renderingContext())
@@ -2512,8 +2512,11 @@
if ((changeType == MaskImageChanged) && m_maskLayer)
m_owningLayer.setNeedsCompositingConfigurationUpdate();
-#if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS)
+#if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS) || ENABLE(WEBGPU)
if ((changeType == CanvasChanged || changeType == CanvasPixelsChanged) && renderer().isCanvas() && canvasCompositingStrategy(renderer()) == CanvasAsLayerContents) {
+ if (changeType == CanvasChanged)
+ compositor().scheduleCompositingLayerUpdate();
+
m_graphicsLayer->setContentsNeedsDisplay();
return;
}