OLD | NEW |
| (Empty) |
1 // Copyright 2014 the V8 project authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef V8_COMPILER_ZONE_POOL_H_ | |
6 #define V8_COMPILER_ZONE_POOL_H_ | |
7 | |
8 #include <map> | |
9 #include <set> | |
10 #include <vector> | |
11 | |
12 #include "src/zone/zone.h" | |
13 | |
14 namespace v8 { | |
15 namespace internal { | |
16 namespace compiler { | |
17 | |
18 class ZonePool final { | |
19 public: | |
20 class Scope final { | |
21 public: | |
22 explicit Scope(ZonePool* zone_pool) | |
23 : zone_pool_(zone_pool), zone_(nullptr) {} | |
24 ~Scope() { Destroy(); } | |
25 | |
26 Zone* zone() { | |
27 if (zone_ == nullptr) zone_ = zone_pool_->NewEmptyZone(); | |
28 return zone_; | |
29 } | |
30 void Destroy() { | |
31 if (zone_ != nullptr) zone_pool_->ReturnZone(zone_); | |
32 zone_ = nullptr; | |
33 } | |
34 | |
35 private: | |
36 ZonePool* const zone_pool_; | |
37 Zone* zone_; | |
38 DISALLOW_COPY_AND_ASSIGN(Scope); | |
39 }; | |
40 | |
41 class StatsScope final { | |
42 public: | |
43 explicit StatsScope(ZonePool* zone_pool); | |
44 ~StatsScope(); | |
45 | |
46 size_t GetMaxAllocatedBytes(); | |
47 size_t GetCurrentAllocatedBytes(); | |
48 size_t GetTotalAllocatedBytes(); | |
49 | |
50 private: | |
51 friend class ZonePool; | |
52 void ZoneReturned(Zone* zone); | |
53 | |
54 typedef std::map<Zone*, size_t> InitialValues; | |
55 | |
56 ZonePool* const zone_pool_; | |
57 InitialValues initial_values_; | |
58 size_t total_allocated_bytes_at_start_; | |
59 size_t max_allocated_bytes_; | |
60 | |
61 DISALLOW_COPY_AND_ASSIGN(StatsScope); | |
62 }; | |
63 | |
64 explicit ZonePool(AccountingAllocator* allocator); | |
65 ~ZonePool(); | |
66 | |
67 size_t GetMaxAllocatedBytes(); | |
68 size_t GetTotalAllocatedBytes(); | |
69 size_t GetCurrentAllocatedBytes(); | |
70 | |
71 private: | |
72 Zone* NewEmptyZone(); | |
73 void ReturnZone(Zone* zone); | |
74 | |
75 static const size_t kMaxUnusedSize = 3; | |
76 typedef std::vector<Zone*> Unused; | |
77 typedef std::vector<Zone*> Used; | |
78 typedef std::vector<StatsScope*> Stats; | |
79 | |
80 Unused unused_; | |
81 Used used_; | |
82 Stats stats_; | |
83 size_t max_allocated_bytes_; | |
84 size_t total_deleted_bytes_; | |
85 AccountingAllocator* allocator_; | |
86 | |
87 DISALLOW_COPY_AND_ASSIGN(ZonePool); | |
88 }; | |
89 | |
90 } // namespace compiler | |
91 } // namespace internal | |
92 } // namespace v8 | |
93 | |
94 #endif | |
OLD | NEW |