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.


Reply via email to