| 197 | } |
| 198 | |
| 199 | MemTracker* PoolMemTrackerRegistry::GetRequestPoolMemTracker( |
| 200 | const string& pool_name, bool create_if_not_present) { |
| 201 | DCHECK(!pool_name.empty()); |
| 202 | lock_guard<SpinLock> l(pool_to_mem_trackers_lock_); |
| 203 | PoolTrackersMap::iterator it = pool_to_mem_trackers_.find(pool_name); |
| 204 | if (it != pool_to_mem_trackers_.end()) { |
| 205 | MemTracker* tracker = it->second.get(); |
| 206 | DCHECK(pool_name == tracker->pool_name_); |
| 207 | return tracker; |
| 208 | } |
| 209 | if (!create_if_not_present) return nullptr; |
| 210 | // First time this pool_name registered, make a new object. |
| 211 | MemTracker* tracker = |
| 212 | new MemTracker(-1, Substitute(REQUEST_POOL_MEM_TRACKER_LABEL_FORMAT, pool_name), |
| 213 | ExecEnv::GetInstance()->process_mem_tracker()); |
| 214 | tracker->pool_name_ = pool_name; |
| 215 | pool_to_mem_trackers_.emplace(pool_name, unique_ptr<MemTracker>(tracker)); |
| 216 | return tracker; |
| 217 | } |
| 218 | |
| 219 | MemTracker* MemTracker::CreateQueryMemTracker(const TUniqueId& id, |
| 220 | int64_t mem_limit, const string& pool_name, ObjectPool* obj_pool) { |