Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp

Issue 2273683003: Use visitDOMWrapper to preserve WebGL JS object wrappers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: style Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
index d9301386484c4fe81494b95331055b01348a0ecd..f04ba1a1ad2af29ce141b7de41f55f49e2d149a4 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
@@ -392,7 +392,7 @@ bool WebGL2RenderingContextBase::validateTexFuncLayer(const char* functionName,
return true;
}
-void WebGL2RenderingContextBase::framebufferTextureLayer(ScriptState* scriptState, GLenum target, GLenum attachment, WebGLTexture* texture, GLint level, GLint layer)
+void WebGL2RenderingContextBase::framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture* texture, GLint level, GLint layer)
{
if (isContextLost() || !validateFramebufferFuncParameters("framebufferTextureLayer", target, attachment))
return;
@@ -428,11 +428,8 @@ void WebGL2RenderingContextBase::framebufferTextureLayer(ScriptState* scriptStat
// We divide it here so in WebGLFramebuffer, we don't have to handle DEPTH_STENCIL_ATTACHMENT in WebGL 2.
framebufferBinding->setAttachmentForBoundFramebuffer(target, GL_DEPTH_ATTACHMENT, textarget, texture, level, layer);
framebufferBinding->setAttachmentForBoundFramebuffer(target, GL_STENCIL_ATTACHMENT, textarget, texture, level, layer);
- preserveObjectWrapper(scriptState, framebufferBinding, V8HiddenValue::webglAttachments(scriptState->isolate()), framebufferBinding->getPersistentCache(), GL_DEPTH_ATTACHMENT, texture);
- preserveObjectWrapper(scriptState, framebufferBinding, V8HiddenValue::webglAttachments(scriptState->isolate()), framebufferBinding->getPersistentCache(), GL_STENCIL_ATTACHMENT, texture);
} else {
framebufferBinding->setAttachmentForBoundFramebuffer(target, attachment, textarget, texture, level, layer);
- preserveObjectWrapper(scriptState, framebufferBinding, V8HiddenValue::webglAttachments(scriptState->isolate()), framebufferBinding->getPersistentCache(), attachment, texture);
}
applyStencilTest();
}
@@ -1826,7 +1823,7 @@ GLboolean WebGL2RenderingContextBase::isQuery(WebGLQuery* query)
return contextGL()->IsQueryEXT(query->object());
}
-void WebGL2RenderingContextBase::beginQuery(ScriptState* scriptState, GLenum target, WebGLQuery* query)
+void WebGL2RenderingContextBase::beginQuery(GLenum target, WebGLQuery* query)
{
bool deleted;
if (!query) {
@@ -1875,7 +1872,6 @@ void WebGL2RenderingContextBase::beginQuery(ScriptState* scriptState, GLenum tar
query->setTarget(target);
contextGL()->BeginQueryEXT(target, query->object());
- preserveObjectWrapper(scriptState, this, V8HiddenValue::webglQueries(scriptState->isolate()), &m_queryWrappers, static_cast<uint32_t>(target), query);
}
void WebGL2RenderingContextBase::endQuery(GLenum target)
@@ -2013,7 +2009,7 @@ GLboolean WebGL2RenderingContextBase::isSampler(WebGLSampler* sampler)
return contextGL()->IsSampler(sampler->object());
}
-void WebGL2RenderingContextBase::bindSampler(ScriptState* scriptState, GLuint unit, WebGLSampler* sampler)
+void WebGL2RenderingContextBase::bindSampler(GLuint unit, WebGLSampler* sampler)
{
if (isContextLost())
return;
@@ -2034,8 +2030,6 @@ void WebGL2RenderingContextBase::bindSampler(ScriptState* scriptState, GLuint un
m_samplerUnits[unit] = sampler;
contextGL()->BindSampler(unit, objectOrZero(sampler));
-
- preserveObjectWrapper(scriptState, this, V8HiddenValue::webglSamplers(scriptState->isolate()), &m_samplerWrappers, static_cast<uint32_t>(unit), sampler);
}
void WebGL2RenderingContextBase::samplerParameter(WebGLSampler* sampler, GLenum pname, GLfloat paramf, GLint parami, bool isFloat)
@@ -2265,7 +2259,7 @@ GLboolean WebGL2RenderingContextBase::isTransformFeedback(WebGLTransformFeedback
return contextGL()->IsTransformFeedback(feedback->object());
}
-void WebGL2RenderingContextBase::bindTransformFeedback(ScriptState* scriptState, GLenum target, WebGLTransformFeedback* feedback)
+void WebGL2RenderingContextBase::bindTransformFeedback(GLenum target, WebGLTransformFeedback* feedback)
{
bool deleted;
if (!checkObjectToBeBound("bindTransformFeedback", feedback, deleted))
@@ -2285,7 +2279,6 @@ void WebGL2RenderingContextBase::bindTransformFeedback(ScriptState* scriptState,
contextGL()->BindTransformFeedback(target, objectOrZero(feedback));
if (feedback) {
feedback->setTarget(target);
- preserveObjectWrapper(scriptState, this, V8HiddenValue::webglMisc(scriptState->isolate()), &m_miscWrappers, static_cast<uint32_t>(PreservedTransformFeedback), feedback);
}
}
@@ -2689,13 +2682,13 @@ WebGLVertexArrayObject* WebGL2RenderingContextBase::createVertexArray()
return o;
}
-void WebGL2RenderingContextBase::deleteVertexArray(ScriptState* scriptState, WebGLVertexArrayObject* vertexArray)
+void WebGL2RenderingContextBase::deleteVertexArray(WebGLVertexArrayObject* vertexArray)
{
if (isContextLost() || !vertexArray)
return;
if (!vertexArray->isDefaultObject() && vertexArray == m_boundVertexArrayObject)
- setBoundVertexArrayObject(scriptState, nullptr);
+ setBoundVertexArrayObject(nullptr);
vertexArray->deleteObject(contextGL());
}
@@ -2711,7 +2704,7 @@ GLboolean WebGL2RenderingContextBase::isVertexArray(WebGLVertexArrayObject* vert
return contextGL()->IsVertexArrayOES(vertexArray->object());
}
-void WebGL2RenderingContextBase::bindVertexArray(ScriptState* scriptState, WebGLVertexArrayObject* vertexArray)
+void WebGL2RenderingContextBase::bindVertexArray(WebGLVertexArrayObject* vertexArray)
{
if (isContextLost())
return;
@@ -2725,14 +2718,14 @@ void WebGL2RenderingContextBase::bindVertexArray(ScriptState* scriptState, WebGL
contextGL()->BindVertexArrayOES(objectOrZero(vertexArray));
vertexArray->setHasEverBeenBound();
- setBoundVertexArrayObject(scriptState, vertexArray);
+ setBoundVertexArrayObject(vertexArray);
} else {
contextGL()->BindVertexArrayOES(0);
- setBoundVertexArrayObject(scriptState, nullptr);
+ setBoundVertexArrayObject(nullptr);
}
}
-void WebGL2RenderingContextBase::bindFramebuffer(ScriptState* scriptState, GLenum target, WebGLFramebuffer* buffer)
+void WebGL2RenderingContextBase::bindFramebuffer(GLenum target, WebGLFramebuffer* buffer)
{
bool deleted;
if (!checkObjectToBeBound("bindFramebuffer", buffer, deleted))
@@ -2754,9 +2747,6 @@ void WebGL2RenderingContextBase::bindFramebuffer(ScriptState* scriptState, GLenu
}
setFramebuffer(target, buffer);
- if (scriptState) {
- preserveObjectWrapper(scriptState, this, V8HiddenValue::webglMisc(scriptState->isolate()), &m_miscWrappers, static_cast<uint32_t>(PreservedFramebuffer), buffer);
- }
}
void WebGL2RenderingContextBase::deleteFramebuffer(WebGLFramebuffer* framebuffer)
@@ -3598,8 +3588,42 @@ void WebGL2RenderingContextBase::removeBoundBuffer(WebGLBuffer* buffer)
void WebGL2RenderingContextBase::restoreCurrentFramebuffer()
{
- bindFramebuffer(nullptr, GL_DRAW_FRAMEBUFFER, m_framebufferBinding.get());
- bindFramebuffer(nullptr, GL_READ_FRAMEBUFFER, m_readFramebufferBinding.get());
+ bindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebufferBinding.get());
+ bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBinding.get());
+}
+
+void WebGL2RenderingContextBase::visitChildDOMWrappers(v8::Isolate* isolate, const v8::Persistent<v8::Object>& wrapper)
+{
+ if (isContextLost()) {
+ return;
+ }
+
+ WebGLRenderingContextBase::visitChildDOMWrappers(isolate, wrapper);
+
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_transformFeedbackBinding, isolate);
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_readFramebufferBinding, isolate);
+
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_boundCopyReadBuffer, isolate);
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_boundCopyWriteBuffer, isolate);
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_boundPixelPackBuffer, isolate);
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_boundPixelUnpackBuffer, isolate);
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_boundTransformFeedbackBuffer, isolate);
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_boundUniformBuffer, isolate);
+
+ for (auto& buf : m_boundIndexedTransformFeedbackBuffers) {
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, buf, isolate);
+ }
+
+ for (auto& buf : m_boundIndexedUniformBuffers) {
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, buf, isolate);
+ }
+
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_currentBooleanOcclusionQuery, isolate);
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, m_currentTransformFeedbackPrimitivesWrittenQuery, isolate);
+
+ for (auto& unit : m_samplerUnits) {
+ DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, unit, isolate);
+ }
}
WebGLImageConversion::PixelStoreParams WebGL2RenderingContextBase::getPackPixelStoreParams()

Powered by Google App Engine
This is Rietveld 408576698