Revision: 16608
Author:   [email protected]
Date:     Tue Sep 10 10:57:00 2013 UTC
Log: Add a ResourceConstraint for the embedder to specify that V8 is running on a memory constrained device.

This enables us to specialize certain operations such that we limit memory
usage on low-memory devices, without reducing performance on devices which
are not memory constrained.

BUG=chromium:280984
[email protected]

Review URL: https://codereview.chromium.org/23464022

Patch from Ross McIlroy <[email protected]>.
http://code.google.com/p/v8/source/detail?r=16608

Modified:
 /branches/bleeding_edge/include/v8.h
 /branches/bleeding_edge/src/api.cc
 /branches/bleeding_edge/src/isolate.h

=======================================
--- /branches/bleeding_edge/include/v8.h        Tue Sep 10 10:53:33 2013 UTC
+++ /branches/bleeding_edge/include/v8.h        Tue Sep 10 10:57:00 2013 UTC
@@ -3763,11 +3763,20 @@
   uint32_t* stack_limit() const { return stack_limit_; }
   // Sets an address beyond which the VM's stack may not grow.
   void set_stack_limit(uint32_t* value) { stack_limit_ = value; }
+ Maybe<bool> is_memory_constrained() const { return is_memory_constrained_; } + // If set to true, V8 will limit it's memory usage, at the potential cost of + // lower performance. Note, this option is a tentative addition to the API
+  // and may be removed or modified without warning.
+  void set_memory_constrained(bool value) {
+    is_memory_constrained_ = Maybe<bool>(value);
+  }
+
  private:
   int max_young_space_size_;
   int max_old_space_size_;
   int max_executable_size_;
   uint32_t* stack_limit_;
+  Maybe<bool> is_memory_constrained_;
 };


=======================================
--- /branches/bleeding_edge/src/api.cc  Tue Sep 10 06:43:23 2013 UTC
+++ /branches/bleeding_edge/src/api.cc  Tue Sep 10 10:57:00 2013 UTC
@@ -624,7 +624,8 @@
   : max_young_space_size_(0),
     max_old_space_size_(0),
     max_executable_size_(0),
-    stack_limit_(NULL) { }
+    stack_limit_(NULL),
+    is_memory_constrained_() { }


 bool SetResourceConstraints(ResourceConstraints* constraints) {
@@ -645,6 +646,10 @@
uintptr_t limit = reinterpret_cast<uintptr_t>(constraints->stack_limit());
     isolate->stack_guard()->SetStackLimit(limit);
   }
+  if (constraints->is_memory_constrained().has_value) {
+    isolate->set_is_memory_constrained(
+        constraints->is_memory_constrained().value);
+  }
   return true;
 }

=======================================
--- /branches/bleeding_edge/src/isolate.h       Fri Sep  6 13:18:26 2013 UTC
+++ /branches/bleeding_edge/src/isolate.h       Tue Sep 10 10:57:00 2013 UTC
@@ -1128,6 +1128,13 @@
   // Given an address occupied by a live code object, return that object.
   Object* FindCodeObject(Address a);

+  bool is_memory_constrained() const {
+    return is_memory_constrained_;
+  }
+  void set_is_memory_constrained(bool value) {
+    is_memory_constrained_ = value;
+  }
+
  private:
   Isolate();

@@ -1299,6 +1306,7 @@
   DateCache* date_cache_;
unibrow::Mapping<unibrow::Ecma262Canonicalize> interp_canonicalize_mapping_;
   CodeStubInterfaceDescriptor* code_stub_interface_descriptors_;
+  bool is_memory_constrained_;

   // True if fatal error has been signaled for this isolate.
   bool has_fatal_error_;

--
--
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