OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef PPAPI_SHARED_IMPL_VAR_TRACKER_H_ | 5 #ifndef PPAPI_SHARED_IMPL_VAR_TRACKER_H_ |
6 #define PPAPI_SHARED_IMPL_VAR_TRACKER_H_ | 6 #define PPAPI_SHARED_IMPL_VAR_TRACKER_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 // used in production code. The PP_Vars are returned in no particular order, | 90 // used in production code. The PP_Vars are returned in no particular order, |
91 // and their reference counts are unaffected. | 91 // and their reference counts are unaffected. |
92 std::vector<PP_Var> GetLiveVars(); | 92 std::vector<PP_Var> GetLiveVars(); |
93 | 93 |
94 // Retrieves the internal reference counts for testing. Returns 0 if we | 94 // Retrieves the internal reference counts for testing. Returns 0 if we |
95 // know about the object but the corresponding value is 0, or -1 if the | 95 // know about the object but the corresponding value is 0, or -1 if the |
96 // given object ID isn't in our map. | 96 // given object ID isn't in our map. |
97 int GetRefCountForObject(const PP_Var& object); | 97 int GetRefCountForObject(const PP_Var& object); |
98 int GetTrackedWithNoReferenceCountForObject(const PP_Var& object); | 98 int GetTrackedWithNoReferenceCountForObject(const PP_Var& object); |
99 | 99 |
| 100 // Returns true if the given vartype is refcounted and has associated objects |
| 101 // (it's not POD). |
| 102 static bool IsVarTypeRefcounted(PP_VarType type); |
| 103 |
100 // Called after an instance is deleted to do var cleanup. | 104 // Called after an instance is deleted to do var cleanup. |
101 virtual void DidDeleteInstance(PP_Instance instance) = 0; | 105 virtual void DidDeleteInstance(PP_Instance instance) = 0; |
102 | 106 |
103 // Returns an "id" for a shared memory handle that can be safely sent between | 107 // Returns an "id" for a shared memory handle that can be safely sent between |
104 // the host and plugin, and resolved back into the original handle on the | 108 // the host and plugin, and resolved back into the original handle on the |
105 // host. Not implemented on the plugin side. | 109 // host. Not implemented on the plugin side. |
106 virtual int TrackSharedMemoryHandle(PP_Instance instance, | 110 virtual int TrackSharedMemoryHandle(PP_Instance instance, |
107 base::SharedMemoryHandle handle, | 111 base::SharedMemoryHandle handle, |
108 uint32 size_in_bytes) = 0; | 112 uint32 size_in_bytes) = 0; |
109 | 113 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 // initial refcount of the added object will be 0 or 1. | 159 // initial refcount of the added object will be 0 or 1. |
156 // | 160 // |
157 // Overridden in the plugin proxy to do additional object tracking. | 161 // Overridden in the plugin proxy to do additional object tracking. |
158 virtual int32 AddVarInternal(Var* var, AddVarRefMode mode); | 162 virtual int32 AddVarInternal(Var* var, AddVarRefMode mode); |
159 | 163 |
160 // Convenience functions for doing lookups into the live_vars_ map. | 164 // Convenience functions for doing lookups into the live_vars_ map. |
161 VarMap::iterator GetLiveVar(int32 id); | 165 VarMap::iterator GetLiveVar(int32 id); |
162 VarMap::iterator GetLiveVar(const PP_Var& var); | 166 VarMap::iterator GetLiveVar(const PP_Var& var); |
163 VarMap::const_iterator GetLiveVar(const PP_Var& var) const; | 167 VarMap::const_iterator GetLiveVar(const PP_Var& var) const; |
164 | 168 |
165 // Returns true if the given vartype is refcounted and has associated objects | |
166 // (it's not POD). | |
167 bool IsVarTypeRefcounted(PP_VarType type) const; | |
168 | |
169 // Called when AddRefVar increases a "tracked" ProxyObject's refcount from | 169 // Called when AddRefVar increases a "tracked" ProxyObject's refcount from |
170 // zero to one. In the plugin side of the proxy, we need to send some | 170 // zero to one. In the plugin side of the proxy, we need to send some |
171 // messages to the host. In the host side, this should never be called since | 171 // messages to the host. In the host side, this should never be called since |
172 // there are no proxy objects. | 172 // there are no proxy objects. |
173 virtual void TrackedObjectGettingOneRef(VarMap::const_iterator iter); | 173 virtual void TrackedObjectGettingOneRef(VarMap::const_iterator iter); |
174 | 174 |
175 // Called when ReleaseVar decreases a object's refcount from one to zero. It | 175 // Called when ReleaseVar decreases a object's refcount from one to zero. It |
176 // may still be "tracked" (has a "track_with_no_reference_count") value. In | 176 // may still be "tracked" (has a "track_with_no_reference_count") value. In |
177 // the plugin side of the proxy, we need to tell the host that we no longer | 177 // the plugin side of the proxy, we need to tell the host that we no longer |
178 // have a reference. In the host side, this should never be called since | 178 // have a reference. In the host side, this should never be called since |
(...skipping 27 matching lines...) Expand all Loading... |
206 // other threads (especially the IO thread). On the plugin side, the tracker | 206 // other threads (especially the IO thread). On the plugin side, the tracker |
207 // is protected by the proxy lock and is thread-safe, so this will be NULL. | 207 // is protected by the proxy lock and is thread-safe, so this will be NULL. |
208 scoped_ptr<base::ThreadChecker> thread_checker_; | 208 scoped_ptr<base::ThreadChecker> thread_checker_; |
209 | 209 |
210 DISALLOW_COPY_AND_ASSIGN(VarTracker); | 210 DISALLOW_COPY_AND_ASSIGN(VarTracker); |
211 }; | 211 }; |
212 | 212 |
213 } // namespace ppapi | 213 } // namespace ppapi |
214 | 214 |
215 #endif // PPAPI_SHARED_IMPL_VAR_TRACKER_H_ | 215 #endif // PPAPI_SHARED_IMPL_VAR_TRACKER_H_ |
OLD | NEW |