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

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLObject.h

Issue 2273683003: Use visitDOMWrapper to preserve WebGL JS object wrappers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * 12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #ifndef WebGLObject_h 26 #ifndef WebGLObject_h
27 #define WebGLObject_h 27 #define WebGLObject_h
28 28
29 #include "bindings/core/v8/DOMWrapperWorld.h"
29 #include "bindings/core/v8/ScriptWrappable.h" 30 #include "bindings/core/v8/ScriptWrappable.h"
30 #include "platform/heap/Handle.h" 31 #include "platform/heap/Handle.h"
31 #include "third_party/khronos/GLES2/gl2.h" 32 #include "third_party/khronos/GLES2/gl2.h"
32 #include "wtf/Assertions.h" 33 #include "wtf/Assertions.h"
33 34
34 namespace gpu { 35 namespace gpu {
35 namespace gles2 { 36 namespace gles2 {
36 class GLES2Interface; 37 class GLES2Interface;
37 } 38 }
38 } 39 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 71
71 // This indicates whether the client side issue a delete call already, not 72 // This indicates whether the client side issue a delete call already, not
72 // whether the OpenGL resource is deleted. 73 // whether the OpenGL resource is deleted.
73 // object()==0 indicates the OpenGL resource is deleted. 74 // object()==0 indicates the OpenGL resource is deleted.
74 bool isDeleted() { return m_deleted; } 75 bool isDeleted() { return m_deleted; }
75 76
76 // True if this object belongs to the group or context. 77 // True if this object belongs to the group or context.
77 virtual bool validate(const WebGLContextGroup*, const WebGLRenderingContextB ase*) const = 0; 78 virtual bool validate(const WebGLContextGroup*, const WebGLRenderingContextB ase*) const = 0;
78 virtual bool hasObject() const = 0; 79 virtual bool hasObject() const = 0;
79 80
81 static void trySetWrapperReferencesInAllWorlds(const v8::Persistent<v8::Obje ct>& wrapper, ScriptWrappable* scriptWrappable, v8::Isolate* isolate)
82 {
83 if (scriptWrappable) {
haraken 2016/08/31 23:14:50 I'd prefer moving the null check to DOMWrapperWorl
Kai Ninomiya 2016/09/02 18:29:22 Done.
84 DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, scriptWrap pable, isolate);
85 }
86 }
87
80 DEFINE_INLINE_VIRTUAL_TRACE() { } 88 DEFINE_INLINE_VIRTUAL_TRACE() { }
81 89
82 protected: 90 protected:
91 // To allow WebGL[2]RenderingContextBase to call visitChildDOMWrappers.
92 friend class WebGLRenderingContextBase;
93 friend class WebGL2RenderingContextBase;
94
83 explicit WebGLObject(WebGLRenderingContextBase*); 95 explicit WebGLObject(WebGLRenderingContextBase*);
84 96
85 // deleteObjectImpl should be only called once to delete the OpenGL resource . 97 // deleteObjectImpl should be only called once to delete the OpenGL resource .
86 // After calling deleteObjectImpl, hasObject() should return false. 98 // After calling deleteObjectImpl, hasObject() should return false.
87 virtual void deleteObjectImpl(gpu::gles2::GLES2Interface*) = 0; 99 virtual void deleteObjectImpl(gpu::gles2::GLES2Interface*) = 0;
88 100
89 virtual bool hasGroupOrContext() const = 0; 101 virtual bool hasGroupOrContext() const = 0;
90 102
91 void detach(); 103 void detach();
92 void detachAndDeleteObject(); 104 void detachAndDeleteObject();
93 105
94 virtual gpu::gles2::GLES2Interface* getAGLInterface() const = 0; 106 virtual gpu::gles2::GLES2Interface* getAGLInterface() const = 0;
95 107
108 virtual void visitChildDOMWrappers(v8::Isolate*, const v8::Persistent<v8::Ob ject>&) { }
109
96 private: 110 private:
97 unsigned m_attachmentCount; 111 unsigned m_attachmentCount;
98 bool m_deleted; 112 bool m_deleted;
99 }; 113 };
100 114
101 } // namespace blink 115 } // namespace blink
102 116
103 #endif // WebGLObject_h 117 #endif // WebGLObject_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698