Commit 25b43475 authored by hablich's avatar hablich Committed by Commit bot

Revert of Replaced different means of zone pooling/reusing by one zone segment...

Revert of Replaced different means of zone pooling/reusing by one zone segment pool (patchset #5 id:160001 of https://codereview.chromium.org/2348303002/ )

Reason for revert:
related to roll blocker: https://codereview.chromium.org/2400343002/

Original issue's description:
> Replaced different means of zone pooling/reusing by one zone segment pool
>
> BUG=v8:5409
>
> Committed: https://crrev.com/a124feb0760896c8be61de08004a08c3bc9b4b3f
> Committed: https://crrev.com/fc840361e357a571c709e0239ae82cc089800b3f
> Cr-Original-Commit-Position: refs/heads/master@{#39633}
> Cr-Commit-Position: refs/heads/master@{#40048}

TBR=mstarzinger@chromium.org,verwaest@chromium.org,heimbuef@google.com
NOTRY=true
NOPRESUBMIT=true
NOTREECHECKS=true
BUG=v8:5409

Review-Url: https://codereview.chromium.org/2401163002
Cr-Commit-Position: refs/heads/master@{#40099}
parent 2d5cc49b
...@@ -1184,8 +1184,8 @@ v8_source_set("v8_base") { ...@@ -1184,8 +1184,8 @@ v8_source_set("v8_base") {
"src/compiler/wasm-compiler.cc", "src/compiler/wasm-compiler.cc",
"src/compiler/wasm-compiler.h", "src/compiler/wasm-compiler.h",
"src/compiler/wasm-linkage.cc", "src/compiler/wasm-linkage.cc",
"src/compiler/zone-stats.cc", "src/compiler/zone-pool.cc",
"src/compiler/zone-stats.h", "src/compiler/zone-pool.h",
"src/context-measure.cc", "src/context-measure.cc",
"src/context-measure.h", "src/context-measure.h",
"src/contexts-inl.h", "src/contexts-inl.h",
......
...@@ -317,7 +317,7 @@ void MoveOptimizer::OptimizeMerge(InstructionBlock* block) { ...@@ -317,7 +317,7 @@ void MoveOptimizer::OptimizeMerge(InstructionBlock* block) {
if (!op->IsConstant() && !op->IsImmediate()) return; if (!op->IsConstant() && !op->IsImmediate()) return;
} }
} }
// TODO(dcarney): pass a ZoneStats down for this? // TODO(dcarney): pass a ZonePool down for this?
MoveMap move_map(local_zone()); MoveMap move_map(local_zone());
size_t correct_counts = 0; size_t correct_counts = 0;
// Accumulate set of shared moves. // Accumulate set of shared moves.
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "src/compilation-info.h" #include "src/compilation-info.h"
#include "src/compiler/pipeline-statistics.h" #include "src/compiler/pipeline-statistics.h"
#include "src/compiler/zone-stats.h" #include "src/compiler/zone-pool.h"
#include "src/isolate.h" #include "src/isolate.h"
namespace v8 { namespace v8 {
...@@ -16,13 +16,13 @@ namespace compiler { ...@@ -16,13 +16,13 @@ namespace compiler {
void PipelineStatistics::CommonStats::Begin( void PipelineStatistics::CommonStats::Begin(
PipelineStatistics* pipeline_stats) { PipelineStatistics* pipeline_stats) {
DCHECK(!scope_); DCHECK(!scope_);
scope_.reset(new ZoneStats::StatsScope(pipeline_stats->zone_stats_)); scope_.reset(new ZonePool::StatsScope(pipeline_stats->zone_pool_));
timer_.Start(); timer_.Start();
outer_zone_initial_size_ = pipeline_stats->OuterZoneSize(); outer_zone_initial_size_ = pipeline_stats->OuterZoneSize();
allocated_bytes_at_start_ = allocated_bytes_at_start_ =
outer_zone_initial_size_ - outer_zone_initial_size_ -
pipeline_stats->total_stats_.outer_zone_initial_size_ + pipeline_stats->total_stats_.outer_zone_initial_size_ +
pipeline_stats->zone_stats_->GetCurrentAllocatedBytes(); pipeline_stats->zone_pool_->GetCurrentAllocatedBytes();
} }
...@@ -43,11 +43,12 @@ void PipelineStatistics::CommonStats::End( ...@@ -43,11 +43,12 @@ void PipelineStatistics::CommonStats::End(
timer_.Stop(); timer_.Stop();
} }
PipelineStatistics::PipelineStatistics(CompilationInfo* info, PipelineStatistics::PipelineStatistics(CompilationInfo* info,
ZoneStats* zone_stats) ZonePool* zone_pool)
: isolate_(info->isolate()), : isolate_(info->isolate()),
outer_zone_(info->zone()), outer_zone_(info->zone()),
zone_stats_(zone_stats), zone_pool_(zone_pool),
compilation_stats_(isolate_->GetTurboStatistics()), compilation_stats_(isolate_->GetTurboStatistics()),
source_size_(0), source_size_(0),
phase_kind_name_(nullptr), phase_kind_name_(nullptr),
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "src/base/platform/elapsed-timer.h" #include "src/base/platform/elapsed-timer.h"
#include "src/compilation-statistics.h" #include "src/compilation-statistics.h"
#include "src/compiler/zone-stats.h" #include "src/compiler/zone-pool.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
...@@ -20,7 +20,7 @@ class PhaseScope; ...@@ -20,7 +20,7 @@ class PhaseScope;
class PipelineStatistics : public Malloced { class PipelineStatistics : public Malloced {
public: public:
PipelineStatistics(CompilationInfo* info, ZoneStats* zone_stats); PipelineStatistics(CompilationInfo* info, ZonePool* zone_pool);
~PipelineStatistics(); ~PipelineStatistics();
void BeginPhaseKind(const char* phase_kind_name); void BeginPhaseKind(const char* phase_kind_name);
...@@ -39,7 +39,7 @@ class PipelineStatistics : public Malloced { ...@@ -39,7 +39,7 @@ class PipelineStatistics : public Malloced {
void End(PipelineStatistics* pipeline_stats, void End(PipelineStatistics* pipeline_stats,
CompilationStatistics::BasicStats* diff); CompilationStatistics::BasicStats* diff);
std::unique_ptr<ZoneStats::StatsScope> scope_; std::unique_ptr<ZonePool::StatsScope> scope_;
base::ElapsedTimer timer_; base::ElapsedTimer timer_;
size_t outer_zone_initial_size_; size_t outer_zone_initial_size_;
size_t allocated_bytes_at_start_; size_t allocated_bytes_at_start_;
...@@ -57,7 +57,7 @@ class PipelineStatistics : public Malloced { ...@@ -57,7 +57,7 @@ class PipelineStatistics : public Malloced {
Isolate* isolate_; Isolate* isolate_;
Zone* outer_zone_; Zone* outer_zone_;
ZoneStats* zone_stats_; ZonePool* zone_pool_;
CompilationStatistics* compilation_stats_; CompilationStatistics* compilation_stats_;
std::string function_name_; std::string function_name_;
......
This diff is collapsed.
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "src/compiler/node.h" #include "src/compiler/node.h"
#include "src/compiler/opcodes.h" #include "src/compiler/opcodes.h"
#include "src/compiler/schedule.h" #include "src/compiler/schedule.h"
#include "src/compiler/zone-stats.h" #include "src/compiler/zone-pool.h"
#include "src/zone/zone-containers.h" #include "src/zone/zone-containers.h"
namespace v8 { namespace v8 {
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "src/compiler/node-matchers.h" #include "src/compiler/node-matchers.h"
#include "src/compiler/pipeline.h" #include "src/compiler/pipeline.h"
#include "src/compiler/source-position.h" #include "src/compiler/source-position.h"
#include "src/compiler/zone-stats.h" #include "src/compiler/zone-pool.h"
#include "src/code-factory.h" #include "src/code-factory.h"
#include "src/code-stubs.h" #include "src/code-stubs.h"
......
...@@ -2,18 +2,18 @@ ...@@ -2,18 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "src/compiler/zone-stats.h" #include "src/compiler/zone-pool.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
namespace compiler { namespace compiler {
ZoneStats::StatsScope::StatsScope(ZoneStats* zone_stats) ZonePool::StatsScope::StatsScope(ZonePool* zone_pool)
: zone_stats_(zone_stats), : zone_pool_(zone_pool),
total_allocated_bytes_at_start_(zone_stats->GetTotalAllocatedBytes()), total_allocated_bytes_at_start_(zone_pool->GetTotalAllocatedBytes()),
max_allocated_bytes_(0) { max_allocated_bytes_(0) {
zone_stats_->stats_.push_back(this); zone_pool_->stats_.push_back(this);
for (Zone* zone : zone_stats_->zones_) { for (Zone* zone : zone_pool_->used_) {
size_t size = static_cast<size_t>(zone->allocation_size()); size_t size = static_cast<size_t>(zone->allocation_size());
std::pair<InitialValues::iterator, bool> res = std::pair<InitialValues::iterator, bool> res =
initial_values_.insert(std::make_pair(zone, size)); initial_values_.insert(std::make_pair(zone, size));
...@@ -22,18 +22,21 @@ ZoneStats::StatsScope::StatsScope(ZoneStats* zone_stats) ...@@ -22,18 +22,21 @@ ZoneStats::StatsScope::StatsScope(ZoneStats* zone_stats)
} }
} }
ZoneStats::StatsScope::~StatsScope() {
DCHECK_EQ(zone_stats_->stats_.back(), this); ZonePool::StatsScope::~StatsScope() {
zone_stats_->stats_.pop_back(); DCHECK_EQ(zone_pool_->stats_.back(), this);
zone_pool_->stats_.pop_back();
} }
size_t ZoneStats::StatsScope::GetMaxAllocatedBytes() {
size_t ZonePool::StatsScope::GetMaxAllocatedBytes() {
return std::max(max_allocated_bytes_, GetCurrentAllocatedBytes()); return std::max(max_allocated_bytes_, GetCurrentAllocatedBytes());
} }
size_t ZoneStats::StatsScope::GetCurrentAllocatedBytes() {
size_t ZonePool::StatsScope::GetCurrentAllocatedBytes() {
size_t total = 0; size_t total = 0;
for (Zone* zone : zone_stats_->zones_) { for (Zone* zone : zone_pool_->used_) {
total += static_cast<size_t>(zone->allocation_size()); total += static_cast<size_t>(zone->allocation_size());
// Adjust for initial values. // Adjust for initial values.
InitialValues::iterator it = initial_values_.find(zone); InitialValues::iterator it = initial_values_.find(zone);
...@@ -44,12 +47,13 @@ size_t ZoneStats::StatsScope::GetCurrentAllocatedBytes() { ...@@ -44,12 +47,13 @@ size_t ZoneStats::StatsScope::GetCurrentAllocatedBytes() {
return total; return total;
} }
size_t ZoneStats::StatsScope::GetTotalAllocatedBytes() {
return zone_stats_->GetTotalAllocatedBytes() - size_t ZonePool::StatsScope::GetTotalAllocatedBytes() {
total_allocated_bytes_at_start_; return zone_pool_->GetTotalAllocatedBytes() - total_allocated_bytes_at_start_;
} }
void ZoneStats::StatsScope::ZoneReturned(Zone* zone) {
void ZonePool::StatsScope::ZoneReturned(Zone* zone) {
size_t current_total = GetCurrentAllocatedBytes(); size_t current_total = GetCurrentAllocatedBytes();
// Update max. // Update max.
max_allocated_bytes_ = std::max(max_allocated_bytes_, current_total); max_allocated_bytes_ = std::max(max_allocated_bytes_, current_total);
...@@ -60,37 +64,53 @@ void ZoneStats::StatsScope::ZoneReturned(Zone* zone) { ...@@ -60,37 +64,53 @@ void ZoneStats::StatsScope::ZoneReturned(Zone* zone) {
} }
} }
ZoneStats::ZoneStats(AccountingAllocator* allocator) ZonePool::ZonePool(AccountingAllocator* allocator)
: max_allocated_bytes_(0), total_deleted_bytes_(0), allocator_(allocator) {} : max_allocated_bytes_(0), total_deleted_bytes_(0), allocator_(allocator) {}
ZoneStats::~ZoneStats() { ZonePool::~ZonePool() {
DCHECK(zones_.empty()); DCHECK(used_.empty());
DCHECK(stats_.empty()); DCHECK(stats_.empty());
for (Zone* zone : unused_) {
delete zone;
}
} }
size_t ZoneStats::GetMaxAllocatedBytes() {
size_t ZonePool::GetMaxAllocatedBytes() {
return std::max(max_allocated_bytes_, GetCurrentAllocatedBytes()); return std::max(max_allocated_bytes_, GetCurrentAllocatedBytes());
} }
size_t ZoneStats::GetCurrentAllocatedBytes() {
size_t ZonePool::GetCurrentAllocatedBytes() {
size_t total = 0; size_t total = 0;
for (Zone* zone : zones_) { for (Zone* zone : used_) {
total += static_cast<size_t>(zone->allocation_size()); total += static_cast<size_t>(zone->allocation_size());
} }
return total; return total;
} }
size_t ZoneStats::GetTotalAllocatedBytes() {
size_t ZonePool::GetTotalAllocatedBytes() {
return total_deleted_bytes_ + GetCurrentAllocatedBytes(); return total_deleted_bytes_ + GetCurrentAllocatedBytes();
} }
Zone* ZoneStats::NewEmptyZone() {
Zone* zone = new Zone(allocator_); Zone* ZonePool::NewEmptyZone() {
zones_.push_back(zone); Zone* zone;
// Grab a zone from pool if possible.
if (!unused_.empty()) {
zone = unused_.back();
unused_.pop_back();
} else {
zone = new Zone(allocator_);
}
used_.push_back(zone);
DCHECK_EQ(0u, zone->allocation_size());
return zone; return zone;
} }
void ZoneStats::ReturnZone(Zone* zone) {
void ZonePool::ReturnZone(Zone* zone) {
size_t current_total = GetCurrentAllocatedBytes(); size_t current_total = GetCurrentAllocatedBytes();
// Update max. // Update max.
max_allocated_bytes_ = std::max(max_allocated_bytes_, current_total); max_allocated_bytes_ = std::max(max_allocated_bytes_, current_total);
...@@ -99,11 +119,18 @@ void ZoneStats::ReturnZone(Zone* zone) { ...@@ -99,11 +119,18 @@ void ZoneStats::ReturnZone(Zone* zone) {
stat_scope->ZoneReturned(zone); stat_scope->ZoneReturned(zone);
} }
// Remove from used. // Remove from used.
Zones::iterator it = std::find(zones_.begin(), zones_.end(), zone); Used::iterator it = std::find(used_.begin(), used_.end(), zone);
DCHECK(it != zones_.end()); DCHECK(it != used_.end());
zones_.erase(it); used_.erase(it);
total_deleted_bytes_ += static_cast<size_t>(zone->allocation_size()); total_deleted_bytes_ += static_cast<size_t>(zone->allocation_size());
delete zone; // Delete zone or clear and stash on unused_.
if (unused_.size() >= kMaxUnusedSize) {
delete zone;
} else {
zone->DeleteAll();
DCHECK_EQ(0u, zone->allocation_size());
unused_.push_back(zone);
}
} }
} // namespace compiler } // namespace compiler
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef V8_COMPILER_ZONE_STATS_H_ #ifndef V8_COMPILER_ZONE_POOL_H_
#define V8_COMPILER_ZONE_STATS_H_ #define V8_COMPILER_ZONE_POOL_H_
#include <map> #include <map>
#include <set> #include <set>
...@@ -15,32 +15,32 @@ namespace v8 { ...@@ -15,32 +15,32 @@ namespace v8 {
namespace internal { namespace internal {
namespace compiler { namespace compiler {
class ZoneStats final { class ZonePool final {
public: public:
class Scope final { class Scope final {
public: public:
explicit Scope(ZoneStats* zone_stats) explicit Scope(ZonePool* zone_pool)
: zone_stats_(zone_stats), zone_(nullptr) {} : zone_pool_(zone_pool), zone_(nullptr) {}
~Scope() { Destroy(); } ~Scope() { Destroy(); }
Zone* zone() { Zone* zone() {
if (zone_ == nullptr) zone_ = zone_stats_->NewEmptyZone(); if (zone_ == nullptr) zone_ = zone_pool_->NewEmptyZone();
return zone_; return zone_;
} }
void Destroy() { void Destroy() {
if (zone_ != nullptr) zone_stats_->ReturnZone(zone_); if (zone_ != nullptr) zone_pool_->ReturnZone(zone_);
zone_ = nullptr; zone_ = nullptr;
} }
private: private:
ZoneStats* const zone_stats_; ZonePool* const zone_pool_;
Zone* zone_; Zone* zone_;
DISALLOW_COPY_AND_ASSIGN(Scope); DISALLOW_COPY_AND_ASSIGN(Scope);
}; };
class StatsScope final { class StatsScope final {
public: public:
explicit StatsScope(ZoneStats* zone_stats); explicit StatsScope(ZonePool* zone_pool);
~StatsScope(); ~StatsScope();
size_t GetMaxAllocatedBytes(); size_t GetMaxAllocatedBytes();
...@@ -48,12 +48,12 @@ class ZoneStats final { ...@@ -48,12 +48,12 @@ class ZoneStats final {
size_t GetTotalAllocatedBytes(); size_t GetTotalAllocatedBytes();
private: private:
friend class ZoneStats; friend class ZonePool;
void ZoneReturned(Zone* zone); void ZoneReturned(Zone* zone);
typedef std::map<Zone*, size_t> InitialValues; typedef std::map<Zone*, size_t> InitialValues;
ZoneStats* const zone_stats_; ZonePool* const zone_pool_;
InitialValues initial_values_; InitialValues initial_values_;
size_t total_allocated_bytes_at_start_; size_t total_allocated_bytes_at_start_;
size_t max_allocated_bytes_; size_t max_allocated_bytes_;
...@@ -61,8 +61,8 @@ class ZoneStats final { ...@@ -61,8 +61,8 @@ class ZoneStats final {
DISALLOW_COPY_AND_ASSIGN(StatsScope); DISALLOW_COPY_AND_ASSIGN(StatsScope);
}; };
explicit ZoneStats(AccountingAllocator* allocator); explicit ZonePool(AccountingAllocator* allocator);
~ZoneStats(); ~ZonePool();
size_t GetMaxAllocatedBytes(); size_t GetMaxAllocatedBytes();
size_t GetTotalAllocatedBytes(); size_t GetTotalAllocatedBytes();
...@@ -73,20 +73,22 @@ class ZoneStats final { ...@@ -73,20 +73,22 @@ class ZoneStats final {
void ReturnZone(Zone* zone); void ReturnZone(Zone* zone);
static const size_t kMaxUnusedSize = 3; static const size_t kMaxUnusedSize = 3;
typedef std::vector<Zone*> Zones; typedef std::vector<Zone*> Unused;
typedef std::vector<Zone*> Used;
typedef std::vector<StatsScope*> Stats; typedef std::vector<StatsScope*> Stats;
Zones zones_; Unused unused_;
Used used_;
Stats stats_; Stats stats_;
size_t max_allocated_bytes_; size_t max_allocated_bytes_;
size_t total_deleted_bytes_; size_t total_deleted_bytes_;
AccountingAllocator* allocator_; AccountingAllocator* allocator_;
DISALLOW_COPY_AND_ASSIGN(ZoneStats); DISALLOW_COPY_AND_ASSIGN(ZonePool);
}; };
} // namespace compiler } // namespace compiler
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8
#endif // V8_COMPILER_ZONE_STATS_H_ #endif
...@@ -731,8 +731,8 @@ ...@@ -731,8 +731,8 @@
'compiler/wasm-compiler.cc', 'compiler/wasm-compiler.cc',
'compiler/wasm-compiler.h', 'compiler/wasm-compiler.h',
'compiler/wasm-linkage.cc', 'compiler/wasm-linkage.cc',
'compiler/zone-stats.cc', 'compiler/zone-pool.cc',
'compiler/zone-stats.h', 'compiler/zone-pool.h',
'compiler-dispatcher/compiler-dispatcher-job.cc', 'compiler-dispatcher/compiler-dispatcher-job.cc',
'compiler-dispatcher/compiler-dispatcher-job.h', 'compiler-dispatcher/compiler-dispatcher-job.h',
'compiler-dispatcher/optimizing-compile-dispatcher.cc', 'compiler-dispatcher/optimizing-compile-dispatcher.cc',
......
...@@ -105,7 +105,9 @@ void Zone::DeleteAll() { ...@@ -105,7 +105,9 @@ void Zone::DeleteAll() {
} }
position_ = limit_ = 0; position_ = limit_ = 0;
allocation_size_ = 0; allocation_size_ = 0;
// Update the head segment to be the kept segment (if any).
segment_head_ = nullptr; segment_head_ = nullptr;
} }
......
...@@ -44,6 +44,9 @@ class V8_EXPORT_PRIVATE Zone final { ...@@ -44,6 +44,9 @@ class V8_EXPORT_PRIVATE Zone final {
return static_cast<T*>(New(length * sizeof(T))); return static_cast<T*>(New(length * sizeof(T)));
} }
// Deletes all objects and free all memory allocated in the Zone.
void DeleteAll();
// Returns true if more memory has been allocated in zones than // Returns true if more memory has been allocated in zones than
// the limit allows. // the limit allows.
bool excess_allocation() const { bool excess_allocation() const {
...@@ -75,9 +78,6 @@ class V8_EXPORT_PRIVATE Zone final { ...@@ -75,9 +78,6 @@ class V8_EXPORT_PRIVATE Zone final {
// Report zone excess when allocation exceeds this limit. // Report zone excess when allocation exceeds this limit.
static const size_t kExcessLimit = 256 * MB; static const size_t kExcessLimit = 256 * MB;
// Deletes all objects and free all memory allocated in the Zone.
void DeleteAll();
// The number of bytes allocated in this zone so far. // The number of bytes allocated in this zone so far.
size_t allocation_size_; size_t allocation_size_;
...@@ -126,6 +126,19 @@ class ZoneObject { ...@@ -126,6 +126,19 @@ class ZoneObject {
void operator delete(void* pointer, Zone* zone) { UNREACHABLE(); } void operator delete(void* pointer, Zone* zone) { UNREACHABLE(); }
}; };
// The ZoneScope is used to automatically call DeleteAll() on a
// Zone when the ZoneScope is destroyed (i.e. goes out of scope)
class ZoneScope final {
public:
explicit ZoneScope(Zone* zone) : zone_(zone) {}
~ZoneScope() { zone_->DeleteAll(); }
Zone* zone() const { return zone_; }
private:
Zone* zone_;
};
// The ZoneAllocationPolicy is used to specialize generic data // The ZoneAllocationPolicy is used to specialize generic data
// structures to allocate themselves and their elements in the Zone. // structures to allocate themselves and their elements in the Zone.
class ZoneAllocationPolicy final { class ZoneAllocationPolicy final {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <stdint.h> #include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <memory> #include <memory>
#include "src/base/utils/random-number-generator.h" #include "src/base/utils/random-number-generator.h"
...@@ -19,7 +20,8 @@ ...@@ -19,7 +20,8 @@
#include "src/compiler/node.h" #include "src/compiler/node.h"
#include "src/compiler/pipeline.h" #include "src/compiler/pipeline.h"
#include "src/compiler/wasm-compiler.h" #include "src/compiler/wasm-compiler.h"
#include "src/compiler/zone-stats.h" #include "src/compiler/zone-pool.h"
#include "src/wasm/ast-decoder.h" #include "src/wasm/ast-decoder.h"
#include "src/wasm/wasm-interpreter.h" #include "src/wasm/wasm-interpreter.h"
#include "src/wasm/wasm-js.h" #include "src/wasm/wasm-js.h"
......
...@@ -82,7 +82,7 @@ v8_executable("unittests") { ...@@ -82,7 +82,7 @@ v8_executable("unittests") {
"compiler/typed-optimization-unittest.cc", "compiler/typed-optimization-unittest.cc",
"compiler/typer-unittest.cc", "compiler/typer-unittest.cc",
"compiler/value-numbering-reducer-unittest.cc", "compiler/value-numbering-reducer-unittest.cc",
"compiler/zone-stats-unittest.cc", "compiler/zone-pool-unittest.cc",
"counters-unittest.cc", "counters-unittest.cc",
"eh-frame-iterator-unittest.cc", "eh-frame-iterator-unittest.cc",
"eh-frame-writer-unittest.cc", "eh-frame-writer-unittest.cc",
......
...@@ -2,28 +2,28 @@ ...@@ -2,28 +2,28 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "src/compiler/zone-stats.h"
#include "src/base/utils/random-number-generator.h" #include "src/base/utils/random-number-generator.h"
#include "src/compiler/zone-pool.h"
#include "test/unittests/test-utils.h" #include "test/unittests/test-utils.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
namespace compiler { namespace compiler {
class ZoneStatsTest : public TestWithIsolate { class ZonePoolTest : public TestWithIsolate {
public: public:
ZoneStatsTest() : zone_stats_(&allocator_) {} ZonePoolTest() : zone_pool_(&allocator_) {}
protected: protected:
ZoneStats* zone_stats() { return &zone_stats_; } ZonePool* zone_pool() { return &zone_pool_; }
void ExpectForPool(size_t current, size_t max, size_t total) { void ExpectForPool(size_t current, size_t max, size_t total) {
ASSERT_EQ(current, zone_stats()->GetCurrentAllocatedBytes()); ASSERT_EQ(current, zone_pool()->GetCurrentAllocatedBytes());
ASSERT_EQ(max, zone_stats()->GetMaxAllocatedBytes()); ASSERT_EQ(max, zone_pool()->GetMaxAllocatedBytes());
ASSERT_EQ(total, zone_stats()->GetTotalAllocatedBytes()); ASSERT_EQ(total, zone_pool()->GetTotalAllocatedBytes());
} }
void Expect(ZoneStats::StatsScope* stats, size_t current, size_t max, void Expect(ZonePool::StatsScope* stats, size_t current, size_t max,
size_t total) { size_t total) {
ASSERT_EQ(current, stats->GetCurrentAllocatedBytes()); ASSERT_EQ(current, stats->GetCurrentAllocatedBytes());
ASSERT_EQ(max, stats->GetMaxAllocatedBytes()); ASSERT_EQ(max, stats->GetMaxAllocatedBytes());
...@@ -39,39 +39,41 @@ class ZoneStatsTest : public TestWithIsolate { ...@@ -39,39 +39,41 @@ class ZoneStatsTest : public TestWithIsolate {
private: private:
v8::internal::AccountingAllocator allocator_; v8::internal::AccountingAllocator allocator_;
ZoneStats zone_stats_; ZonePool zone_pool_;
base::RandomNumberGenerator rng; base::RandomNumberGenerator rng;
}; };
TEST_F(ZoneStatsTest, Empty) {
TEST_F(ZonePoolTest, Empty) {
ExpectForPool(0, 0, 0); ExpectForPool(0, 0, 0);
{ {
ZoneStats::StatsScope stats(zone_stats()); ZonePool::StatsScope stats(zone_pool());
Expect(&stats, 0, 0, 0); Expect(&stats, 0, 0, 0);
} }
ExpectForPool(0, 0, 0); ExpectForPool(0, 0, 0);
{ {
ZoneStats::Scope scope(zone_stats()); ZonePool::Scope scope(zone_pool());
scope.zone(); scope.zone();
} }
ExpectForPool(0, 0, 0); ExpectForPool(0, 0, 0);
} }
TEST_F(ZoneStatsTest, MultipleZonesWithDeletion) {
TEST_F(ZonePoolTest, MultipleZonesWithDeletion) {
static const size_t kArraySize = 10; static const size_t kArraySize = 10;
ZoneStats::Scope* scopes[kArraySize]; ZonePool::Scope* scopes[kArraySize];
// Initialize. // Initialize.
size_t before_stats = 0; size_t before_stats = 0;
for (size_t i = 0; i < kArraySize; ++i) { for (size_t i = 0; i < kArraySize; ++i) {
scopes[i] = new ZoneStats::Scope(zone_stats()); scopes[i] = new ZonePool::Scope(zone_pool());
before_stats += Allocate(scopes[i]->zone()); // Add some stuff. before_stats += Allocate(scopes[i]->zone()); // Add some stuff.
} }
ExpectForPool(before_stats, before_stats, before_stats); ExpectForPool(before_stats, before_stats, before_stats);
ZoneStats::StatsScope stats(zone_stats()); ZonePool::StatsScope stats(zone_pool());
size_t before_deletion = 0; size_t before_deletion = 0;
for (size_t i = 0; i < kArraySize; ++i) { for (size_t i = 0; i < kArraySize; ++i) {
...@@ -85,7 +87,7 @@ TEST_F(ZoneStatsTest, MultipleZonesWithDeletion) { ...@@ -85,7 +87,7 @@ TEST_F(ZoneStatsTest, MultipleZonesWithDeletion) {
// Delete the scopes and create new ones. // Delete the scopes and create new ones.
for (size_t i = 0; i < kArraySize; ++i) { for (size_t i = 0; i < kArraySize; ++i) {
delete scopes[i]; delete scopes[i];
scopes[i] = new ZoneStats::Scope(zone_stats()); scopes[i] = new ZonePool::Scope(zone_pool());
} }
Expect(&stats, 0, before_deletion, before_deletion); Expect(&stats, 0, before_deletion, before_deletion);
...@@ -114,13 +116,14 @@ TEST_F(ZoneStatsTest, MultipleZonesWithDeletion) { ...@@ -114,13 +116,14 @@ TEST_F(ZoneStatsTest, MultipleZonesWithDeletion) {
before_stats + before_deletion + after_deletion); before_stats + before_deletion + after_deletion);
} }
TEST_F(ZoneStatsTest, SimpleAllocationLoop) {
TEST_F(ZonePoolTest, SimpleAllocationLoop) {
int runs = 20; int runs = 20;
size_t total_allocated = 0; size_t total_allocated = 0;
size_t max_loop_allocation = 0; size_t max_loop_allocation = 0;
ZoneStats::StatsScope outer_stats(zone_stats()); ZonePool::StatsScope outer_stats(zone_pool());
{ {
ZoneStats::Scope outer_scope(zone_stats()); ZonePool::Scope outer_scope(zone_pool());
size_t outer_allocated = 0; size_t outer_allocated = 0;
for (int i = 0; i < runs; ++i) { for (int i = 0; i < runs; ++i) {
{ {
...@@ -128,10 +131,10 @@ TEST_F(ZoneStatsTest, SimpleAllocationLoop) { ...@@ -128,10 +131,10 @@ TEST_F(ZoneStatsTest, SimpleAllocationLoop) {
outer_allocated += bytes; outer_allocated += bytes;
total_allocated += bytes; total_allocated += bytes;
} }
ZoneStats::StatsScope inner_stats(zone_stats()); ZonePool::StatsScope inner_stats(zone_pool());
size_t allocated = 0; size_t allocated = 0;
{ {
ZoneStats::Scope inner_scope(zone_stats()); ZonePool::Scope inner_scope(zone_pool());
for (int j = 0; j < 20; ++j) { for (int j = 0; j < 20; ++j) {
size_t bytes = Allocate(inner_scope.zone()); size_t bytes = Allocate(inner_scope.zone());
allocated += bytes; allocated += bytes;
......
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
'compiler/typed-optimization-unittest.cc', 'compiler/typed-optimization-unittest.cc',
'compiler/typer-unittest.cc', 'compiler/typer-unittest.cc',
'compiler/value-numbering-reducer-unittest.cc', 'compiler/value-numbering-reducer-unittest.cc',
'compiler/zone-stats-unittest.cc', 'compiler/zone-pool-unittest.cc',
'compiler-dispatcher/compiler-dispatcher-job-unittest.cc', 'compiler-dispatcher/compiler-dispatcher-job-unittest.cc',
'counters-unittest.cc', 'counters-unittest.cc',
'eh-frame-iterator-unittest.cc', 'eh-frame-iterator-unittest.cc',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment