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.