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

Side by Side Diff: third_party/WebKit/Source/core/fetch/ResourceOwner.h

Issue 1569273004: Move ResourceOwner on to the oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 19 matching lines...) Expand all
30 30
31 #ifndef ResourceOwner_h 31 #ifndef ResourceOwner_h
32 #define ResourceOwner_h 32 #define ResourceOwner_h
33 33
34 #include "core/fetch/ResourcePtr.h" 34 #include "core/fetch/ResourcePtr.h"
35 35
36 namespace blink { 36 namespace blink {
37 37
38 38
39 template<class R, class C = typename R::ClientType> 39 template<class R, class C = typename R::ClientType>
40 class ResourceOwner : public C { 40 class ResourceOwner : public WillBeGarbageCollectedMixin, public C {
41 WILL_BE_USING_PRE_FINALIZER(ResourceOwner, clearResource);
41 public: 42 public:
42 using ResourceType = R; 43 using ResourceType = R;
43 44
44 virtual ~ResourceOwner(); 45 virtual ~ResourceOwner();
45 ResourceType* resource() const { return m_resource.get(); } 46 ResourceType* resource() const { return m_resource.get(); }
yhirano 2016/01/14 11:55:29 +DEFINE_INLINE_VIRTUAL_TRACE() {}
Nate Chapin 2016/01/14 22:54:01 Done.
46 47
47 protected: 48 protected:
48 ResourceOwner(); 49 ResourceOwner();
49 ResourceOwner(const ResourceOwner& other) { setResource(other.resource()); }
50 explicit ResourceOwner(const ResourcePtr<ResourceType>&);
51 50
52 void setResource(const ResourcePtr<ResourceType>&); 51 void setResource(const ResourcePtr<ResourceType>&);
53 void clearResource(); 52 void clearResource() { setResource(nullptr); }
54
55 ResourceOwner& operator=(const ResourceOwner& other);
56 53
57 private: 54 private:
58 ResourcePtr<ResourceType> m_resource; 55 ResourcePtr<ResourceType> m_resource;
59 }; 56 };
60 57
61 template<class R, class C> 58 template<class R, class C>
62 inline ResourceOwner<R, C>::ResourceOwner() 59 inline ResourceOwner<R, C>::ResourceOwner()
63 { 60 {
61 #if ENABLE(OILPAN)
62 ThreadState::current()->registerPreFinalizer(this);
63 #endif
64 } 64 }
65 65
66 template<class R, class C> 66 template<class R, class C>
67 inline ResourceOwner<R, C>::~ResourceOwner() 67 inline ResourceOwner<R, C>::~ResourceOwner()
68 { 68 {
69 #if !ENABLE(OILPAN)
69 clearResource(); 70 clearResource();
71 #endif
haraken 2016/01/14 04:26:43 Nit: In this CL it is safe to call clearResource i
yhirano 2016/01/14 11:55:29 Oh, it's my fault, sorry.
Nate Chapin 2016/01/14 22:54:01 Yeah, I should have caught that, too. Removing.
70 } 72 }
71 73
72 template<class R, class C> 74 template<class R, class C>
73 inline ResourceOwner<R, C>::ResourceOwner(const ResourcePtr<R>& resource)
74 : m_resource(resource)
75 {
76 if (m_resource)
77 m_resource->addClient(this);
78 }
79
80 template<class R, class C>
81 inline void ResourceOwner<R, C>::setResource(const ResourcePtr<R>& newResource) 75 inline void ResourceOwner<R, C>::setResource(const ResourcePtr<R>& newResource)
82 { 76 {
83 if (newResource == m_resource) 77 if (newResource == m_resource)
84 return; 78 return;
85 79
86 // Some ResourceClient implementations reenter this so 80 // Some ResourceClient implementations reenter this so
87 // we need to prevent double removal. 81 // we need to prevent double removal.
88 if (ResourcePtr<ResourceType> oldResource = m_resource) { 82 if (ResourcePtr<ResourceType> oldResource = m_resource) {
89 m_resource.clear(); 83 m_resource.clear();
90 oldResource->removeClient(this); 84 oldResource->removeClient(this);
91 } 85 }
92 86
93 if (newResource) { 87 if (newResource) {
94 m_resource = newResource; 88 m_resource = newResource;
95 m_resource->addClient(this); 89 m_resource->addClient(this);
96 } 90 }
97 } 91 }
98 92
99 template<class R, class C>
100 inline void ResourceOwner<R, C>::clearResource()
101 {
102 setResource(0);
103 }
104
105 template<class R, class C>
106 inline ResourceOwner<R, C>& ResourceOwner<R, C>::operator=(const ResourceOwner<R , C>& other)
107 {
108 if (this == &other)
109 return *this;
110 setResource(other.resource());
111 return *this;
112 }
113
114 } // namespace blink 93 } // namespace blink
115 94
116 #endif 95 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698