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

Unified Diff: Source/core/html/canvas/WebGLRenderingContextBase.h

Issue 365653002: Oilpan: move 2D Canvas and WebGL objects to the heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Round of improvements Created 6 years, 6 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: Source/core/html/canvas/WebGLRenderingContextBase.h
diff --git a/Source/core/html/canvas/WebGLRenderingContextBase.h b/Source/core/html/canvas/WebGLRenderingContextBase.h
index afa9619774cb74963830b03384933c9c9343b893..2ba56612669a6f259dbac91461c3ea78f8d74e2e 100644
--- a/Source/core/html/canvas/WebGLRenderingContextBase.h
+++ b/Source/core/html/canvas/WebGLRenderingContextBase.h
@@ -146,12 +146,12 @@ public:
void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
- PassRefPtr<WebGLBuffer> createBuffer();
- PassRefPtr<WebGLFramebuffer> createFramebuffer();
- PassRefPtr<WebGLProgram> createProgram();
- PassRefPtr<WebGLRenderbuffer> createRenderbuffer();
- PassRefPtr<WebGLShader> createShader(GLenum type);
- PassRefPtr<WebGLTexture> createTexture();
+ PassRefPtrWillBeRawPtr<WebGLBuffer> createBuffer();
+ PassRefPtrWillBeRawPtr<WebGLFramebuffer> createFramebuffer();
+ PassRefPtrWillBeRawPtr<WebGLProgram> createProgram();
+ PassRefPtrWillBeRawPtr<WebGLRenderbuffer> createRenderbuffer();
+ PassRefPtrWillBeRawPtr<WebGLShader> createShader(GLenum type);
+ PassRefPtrWillBeRawPtr<WebGLTexture> createTexture();
void cullFace(GLenum mode);
@@ -183,14 +183,14 @@ public:
void frontFace(GLenum mode);
void generateMipmap(GLenum target);
- PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuint index);
- PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLuint index);
- bool getAttachedShaders(WebGLProgram*, Vector<RefPtr<WebGLShader> >&);
+ PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuint index);
+ PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLuint index);
+ bool getAttachedShaders(WebGLProgram*, WillBeHeapVector<RefPtrWillBeMember<WebGLShader> >&);
GLint getAttribLocation(WebGLProgram*, const String& name);
WebGLGetInfo getBufferParameter(GLenum target, GLenum pname);
- PassRefPtr<WebGLContextAttributes> getContextAttributes();
+ PassRefPtrWillBeRawPtr<WebGLContextAttributes> getContextAttributes();
GLenum getError();
- PassRefPtr<WebGLExtension> getExtension(const String& name);
+ PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(const String& name);
WebGLGetInfo getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname);
WebGLGetInfo getParameter(GLenum pname);
WebGLGetInfo getProgramParameter(WebGLProgram*, GLenum pname);
@@ -198,12 +198,12 @@ public:
WebGLGetInfo getRenderbufferParameter(GLenum target, GLenum pname);
WebGLGetInfo getShaderParameter(WebGLShader*, GLenum pname);
String getShaderInfoLog(WebGLShader*);
- PassRefPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat(GLenum shaderType, GLenum precisionType);
+ PassRefPtrWillBeRawPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat(GLenum shaderType, GLenum precisionType);
String getShaderSource(WebGLShader*);
Vector<String> getSupportedExtensions();
WebGLGetInfo getTexParameter(GLenum target, GLenum pname);
WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*);
- PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const String&);
+ PassRefPtrWillBeRawPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const String&);
WebGLGetInfo getVertexAttrib(GLuint index, GLenum pname);
long long getVertexAttribOffset(GLuint index, GLenum pname);
@@ -349,6 +349,18 @@ public:
virtual void stop() OVERRIDE;
void setSavingImage(bool isSaving) { m_savingImage = isSaving; }
+
+ virtual void trace(Visitor*) OVERRIDE;
+
+ class TextureUnitState {
+ ALLOW_ONLY_INLINE_ALLOCATION();
+ public:
+ RefPtrWillBeMember<WebGLTexture> m_texture2DBinding;
+ RefPtrWillBeMember<WebGLTexture> m_textureCubeMapBinding;
+
+ void trace(Visitor*);
+ };
+
protected:
friend class WebGLDrawBuffers;
friend class WebGLFramebuffer;
@@ -415,17 +427,17 @@ protected:
bool m_needsUpdate;
bool m_markedCanvasDirty;
- HashSet<WebGLContextObject*> m_contextObjects;
+ WillBeHeapHashSet<RawPtrWillBeWeakMember<WebGLContextObject> > m_contextObjects;
- OwnPtr<WebGLRenderingContextLostCallback> m_contextLostCallbackAdapter;
- OwnPtr<WebGLRenderingContextErrorMessageCallback> m_errorMessageCallbackAdapter;
+ OwnPtrWillBeMember<WebGLRenderingContextLostCallback> m_contextLostCallbackAdapter;
+ OwnPtrWillBeMember<WebGLRenderingContextErrorMessageCallback> m_errorMessageCallbackAdapter;
// List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER and stored values for ELEMENT_ARRAY_BUFFER
- RefPtr<WebGLBuffer> m_boundArrayBuffer;
+ RefPtrWillBeMember<WebGLBuffer> m_boundArrayBuffer;
- RefPtr<WebGLVertexArrayObjectOES> m_defaultVertexArrayObject;
- RefPtr<WebGLVertexArrayObjectOES> m_boundVertexArrayObject;
- void setBoundVertexArrayObject(PassRefPtr<WebGLVertexArrayObjectOES> arrayObject)
+ RefPtrWillBeMember<WebGLVertexArrayObjectOES> m_defaultVertexArrayObject;
+ RefPtrWillBeMember<WebGLVertexArrayObjectOES> m_boundVertexArrayObject;
+ void setBoundVertexArrayObject(PassRefPtrWillBeRawPtr<WebGLVertexArrayObjectOES> arrayObject)
{
if (arrayObject)
m_boundVertexArrayObject = arrayObject;
@@ -452,25 +464,21 @@ protected:
};
Vector<VertexAttribValue> m_vertexAttribValue;
unsigned m_maxVertexAttribs;
- RefPtr<WebGLBuffer> m_vertexAttrib0Buffer;
+ RefPtrWillBeMember<WebGLBuffer> m_vertexAttrib0Buffer;
long m_vertexAttrib0BufferSize;
GLfloat m_vertexAttrib0BufferValue[4];
bool m_forceAttrib0BufferRefill;
bool m_vertexAttrib0UsedBefore;
- RefPtr<WebGLProgram> m_currentProgram;
- RefPtr<WebGLFramebuffer> m_framebufferBinding;
- RefPtr<WebGLRenderbuffer> m_renderbufferBinding;
- class TextureUnitState {
- public:
- RefPtr<WebGLTexture> m_texture2DBinding;
- RefPtr<WebGLTexture> m_textureCubeMapBinding;
- };
- Vector<TextureUnitState> m_textureUnits;
+ RefPtrWillBeMember<WebGLProgram> m_currentProgram;
+ RefPtrWillBeMember<WebGLFramebuffer> m_framebufferBinding;
+ RefPtrWillBeMember<WebGLRenderbuffer> m_renderbufferBinding;
+
+ WillBeHeapVector<TextureUnitState> m_textureUnits;
unsigned long m_activeTextureUnit;
- RefPtr<WebGLTexture> m_blackTexture2D;
- RefPtr<WebGLTexture> m_blackTextureCubeMap;
+ RefPtrWillBeMember<WebGLTexture> m_blackTexture2D;
+ RefPtrWillBeMember<WebGLTexture> m_blackTextureCubeMap;
Vector<GLenum> m_compressedTextureFormats;
@@ -507,7 +515,7 @@ protected:
GLenum m_unpackColorspaceConversion;
bool m_contextLost;
LostContextMode m_contextLostMode;
- RefPtr<WebGLContextAttributes> m_requestedAttributes;
+ RefPtrWillBeMember<WebGLContextAttributes> m_requestedAttributes;
bool m_layerCleared;
GLfloat m_clearColor[4];
@@ -564,11 +572,13 @@ protected:
const char* const* prefixes() const;
bool matchesNameWithPrefixes(const String&) const;
- virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBase*) = 0;
+ virtual PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderingContextBase*) = 0;
virtual bool supported(WebGLRenderingContextBase*) const = 0;
virtual const char* extensionName() const = 0;
virtual void loseExtension() = 0;
+ virtual void trace(Visitor*) { }
+
private:
bool m_draft;
const char* const* m_prefixes;
@@ -577,11 +587,9 @@ protected:
template <typename T>
class TypedExtensionTracker FINAL : public ExtensionTracker {
public:
- TypedExtensionTracker(RefPtr<T>& extensionField, ExtensionFlags flags, const char* const* prefixes)
- : ExtensionTracker(flags, prefixes)
- , m_extensionField(extensionField)
- , m_extension(nullptr)
+ static PassOwnPtr<TypedExtensionTracker<T> > create(RefPtrWillBeMember<T>& extensionField, ExtensionFlags flags, const char* const* prefixes)
{
+ return adoptPtr(new TypedExtensionTracker<T>(extensionField, flags, prefixes));
}
virtual ~TypedExtensionTracker()
@@ -592,7 +600,7 @@ protected:
}
}
- virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBase* context) OVERRIDE
+ virtual PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderingContextBase* context) OVERRIDE
{
if (!m_extension) {
m_extension = T::create(context);
@@ -621,20 +629,38 @@ protected:
}
}
+ virtual void trace(Visitor* visitor) OVERRIDE
+ {
+ visitor->trace(m_extension);
+ ExtensionTracker::trace(visitor);
+ }
+
private:
- RefPtr<T>& m_extensionField;
+ TypedExtensionTracker(RefPtrWillBeMember<T>& extensionField, ExtensionFlags flags, const char* const* prefixes)
+ : ExtensionTracker(flags, prefixes)
+ , m_extensionField(extensionField)
+ , m_extension(nullptr)
+ {
+ }
+
+ // FIXME: Oilpan: off-heap (vector) collections with OwnPtr<>s
+ // to objects with trace() methods are currently supported,
+ // but not specially recognized by the clang plugin.
+ GC_PLUGIN_IGNORE("340522")
+ RefPtrWillBeMember<T>& m_extensionField;
haraken 2014/07/03 04:40:29 Not directly related to this CL, we might want to
// ExtensionTracker holds it's own reference to the extension to ensure
// that it is not deleted before this object's destructor is called
- RefPtr<T> m_extension;
+ GC_PLUGIN_IGNORE("340522")
+ RefPtrWillBeMember<T> m_extension;
haraken 2014/07/03 04:40:29 Shouldn't this be RefPtrWillBePersistent, since Ex
sof 2014/07/03 07:25:49 It is off-heap, but traced. See above FIXME.
};
bool m_extensionEnabled[WebGLExtensionNameCount];
- Vector<ExtensionTracker*> m_extensions;
+ Vector<OwnPtr<ExtensionTracker> > m_extensions;
template <typename T>
- void registerExtension(RefPtr<T>& extensionPtr, ExtensionFlags flags = ApprovedExtension, const char* const* prefixes = 0)
+ void registerExtension(RefPtrWillBeMember<T>& extensionPtr, ExtensionFlags flags = ApprovedExtension, const char* const* prefixes = 0)
{
- m_extensions.append(new TypedExtensionTracker<T>(extensionPtr, flags, prefixes));
+ m_extensions.append(TypedExtensionTracker<T>::create(extensionPtr, flags, prefixes));
}
bool extensionSupportedAndAllowed(const ExtensionTracker*);
@@ -908,4 +934,6 @@ DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co
} // namespace WebCore
+WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(WebCore::WebGLRenderingContextBase::TextureUnitState);
+
#endif // WebGLRenderingContextBase_h

Powered by Google App Engine
This is Rietveld 408576698