Reviewers: Michael Starzinger,
Description:
Added new GetHeapStatistics API entry and deprecated old one.
Simplified the HeapStatistics class a bit, following Uncle Bob's advice that
adding accessors to DTOs only satisfies some design fundamentalists, but
serves
no other purpose. :-)
Please review this at https://codereview.chromium.org/12207076/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M include/v8.h
M src/api.cc
M test/cctest/test-api.cc
Index: include/v8.h
diff --git a/include/v8.h b/include/v8.h
index
bf3beff5f0d22a56efc7756845b34ffac130138b..4c0237b15a66b8b847c126a951fa23dca135db38
100644
--- a/include/v8.h
+++ b/include/v8.h
@@ -2840,15 +2840,7 @@ class V8EXPORT HeapStatistics {
size_t heap_size_limit() { return heap_size_limit_; }
private:
- void set_total_heap_size(size_t size) { total_heap_size_ = size; }
- void set_total_heap_size_executable(size_t size) {
- total_heap_size_executable_ = size;
- }
- void set_total_physical_size(size_t size) {
- total_physical_size_ = size;
- }
- void set_used_heap_size(size_t size) { used_heap_size_ = size; }
- void set_heap_size_limit(size_t size) { heap_size_limit_ = size; }
+ void Clear();
size_t total_heap_size_;
size_t total_heap_size_executable_;
@@ -2857,6 +2849,7 @@ class V8EXPORT HeapStatistics {
size_t heap_size_limit_;
friend class V8;
+ friend class Isolate;
};
@@ -2946,6 +2939,11 @@ class V8EXPORT Isolate {
*/
V8_INLINE(void* GetData());
+ /**
+ * Get statistics about the heap memory usage.
+ */
+ void GetHeapStatistics(HeapStatistics* heap_statistics);
+
private:
Isolate();
Isolate(const Isolate&);
@@ -3500,10 +3498,8 @@ class V8EXPORT V8 {
*/
static bool Dispose();
- /**
- * Get statistics about the heap memory usage.
- */
- static void GetHeapStatistics(HeapStatistics* heap_statistics);
+ /** Deprecated. Use Isolate::GetHeapStatistics instead. */
+ V8_DEPRECATED(static void GetHeapStatistics(HeapStatistics*
heap_statistics));
/**
* Iterates through all external resources referenced from current
isolate
Index: src/api.cc
diff --git a/src/api.cc b/src/api.cc
index
d3d472d79947cd208684db88d98cc633a551f48c..495df09848ce426ae99d12ac0f0429316a7dfe11
100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -4399,31 +4399,29 @@ bool v8::V8::Dispose() {
}
-HeapStatistics::HeapStatistics(): total_heap_size_(0),
- total_heap_size_executable_(0),
- total_physical_size_(0),
- used_heap_size_(0),
- heap_size_limit_(0) { }
+HeapStatistics::HeapStatistics() {
+ Clear();
+}
+
+
+void HeapStatistics::Clear() {
+ total_heap_size_ = 0;
+ total_heap_size_executable_ = 0;
+ total_physical_size_ = 0;
+ used_heap_size_ = 0;
+ heap_size_limit_ = 0;
+}
void v8::V8::GetHeapStatistics(HeapStatistics* heap_statistics) {
- if (!i::Isolate::Current()->IsInitialized()) {
+ i::Isolate* isolate = i::Isolate::UncheckedCurrent();
+ if (isolate == NULL || !isolate->IsInitialized()) {
// Isolate is unitialized thus heap is not configured yet.
- heap_statistics->set_total_heap_size(0);
- heap_statistics->set_total_heap_size_executable(0);
- heap_statistics->set_total_physical_size(0);
- heap_statistics->set_used_heap_size(0);
- heap_statistics->set_heap_size_limit(0);
+ heap_statistics->Clear();
return;
}
-
- i::Heap* heap = i::Isolate::Current()->heap();
- heap_statistics->set_total_heap_size(heap->CommittedMemory());
- heap_statistics->set_total_heap_size_executable(
- heap->CommittedMemoryExecutable());
-
heap_statistics->set_total_physical_size(heap->CommittedPhysicalMemory());
- heap_statistics->set_used_heap_size(heap->SizeOfObjects());
- heap_statistics->set_heap_size_limit(heap->MaxReserved());
+ Isolate* ext_isolate = reinterpret_cast<Isolate*>(isolate);
+ return ext_isolate->GetHeapStatistics(heap_statistics);
}
@@ -5609,6 +5607,18 @@ void Isolate::Exit() {
}
+void Isolate::GetHeapStatistics(HeapStatistics* heap_statistics) {
+ i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
+ i::Heap* heap = isolate->heap();
+ heap_statistics->total_heap_size_ = heap->CommittedMemory();
+ heap_statistics->total_heap_size_executable_ =
+ heap->CommittedMemoryExecutable();
+ heap_statistics->total_physical_size_ = heap->CommittedPhysicalMemory();
+ heap_statistics->used_heap_size_ = heap->SizeOfObjects();
+ heap_statistics->heap_size_limit_ = heap->MaxReserved();
+}
+
+
String::Utf8Value::Utf8Value(v8::Handle<v8::Value> obj)
: str_(NULL), length_(0) {
i::Isolate* isolate = i::Isolate::Current();
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index
8cb85a7c0478324a163f4d955d3f2d4961c82e03..64a003e049506ef8f54245fe83f72510ff04be89
100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -15205,7 +15205,7 @@ THREADED_TEST(GetHeapStatistics) {
v8::HeapStatistics heap_statistics;
CHECK_EQ(static_cast<int>(heap_statistics.total_heap_size()), 0);
CHECK_EQ(static_cast<int>(heap_statistics.used_heap_size()), 0);
- v8::V8::GetHeapStatistics(&heap_statistics);
+ c1->GetIsolate()->GetHeapStatistics(&heap_statistics);
CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0);
CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0);
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.