Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index 87d54537560fdb061a59f68d3c386d98700d6f2c..c91e4f95b34d1c7a8aa4df5196b9df3356a53e36 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -13711,58 +13711,65 @@ TEST(SourceURLInStackTrace) { |
THREADED_TEST(IdleNotification) { |
v8::HandleScope scope; |
LocalContext env; |
- CompileRun("function binom(n, m) {" |
- " var C = [[1]];" |
- " for (var i = 1; i <= n; ++i) {" |
- " C[i] = [1];" |
- " for (var j = 1; j < i; ++j) {" |
- " C[i][j] = C[i-1][j-1] + C[i-1][j];" |
- " }" |
- " C[i][i] = 1;" |
- " }" |
- " return C[n][m];" |
- "};" |
- "binom(1000, 500)"); |
- bool rv = false; |
- for (int i = 0; i < 100; i++) { |
- rv = v8::V8::IdleNotification(); |
- if (rv) |
- break; |
+ { |
+ // Create garbage in old-space to generate work for idle notification. |
+ i::AlwaysAllocateScope always_allocate; |
+ for (int i = 0; i < 100; i++) { |
+ FACTORY->NewFixedArray(1000, i::TENURED); |
+ } |
} |
- CHECK(rv == true); |
+ bool finshed_idle_work = false; |
+ for (int i = 0; i < 100 && !finshed_idle_work; i++) { |
+ finshed_idle_work = v8::V8::IdleNotification(); |
+ } |
+ CHECK(finshed_idle_work); |
} |
// Test that idle notification can be handled and eventually returns true. |
// This just checks the contract of the IdleNotification() function, |
// and does not verify that it does reasonable work. |
-TEST(IdleNotificationWithHint) { |
+TEST(IdleNotificationWithSmallHint) { |
v8::HandleScope scope; |
LocalContext env; |
{ |
+ // Create garbage in old-space to generate work for idle notification. |
i::AlwaysAllocateScope always_allocate; |
- CompileRun("function binom(n, m) {" |
- " var C = [[1]];" |
- " for (var i = 1; i <= n; ++i) {" |
- " C[i] = [1];" |
- " for (var j = 1; j < i; ++j) {" |
- " C[i][j] = C[i-1][j-1] + C[i-1][j];" |
- " }" |
- " C[i][i] = 1;" |
- " }" |
- " return C[n][m];" |
- "};" |
- "binom(1000, 500)"); |
+ for (int i = 0; i < 100; i++) { |
+ FACTORY->NewFixedArray(1000, i::TENURED); |
+ } |
} |
- bool rv = false; |
intptr_t old_size = HEAP->SizeOfObjects(); |
+ bool finshed_idle_work = false; |
bool no_idle_work = v8::V8::IdleNotification(10); |
- for (int i = 0; i < 200; i++) { |
- rv = v8::V8::IdleNotification(10); |
- if (rv) |
- break; |
+ for (int i = 0; i < 200 && !finshed_idle_work; i++) { |
+ finshed_idle_work = v8::V8::IdleNotification(10); |
+ } |
+ intptr_t new_size = HEAP->SizeOfObjects(); |
+ CHECK(finshed_idle_work); |
+ CHECK(no_idle_work || new_size < old_size); |
+} |
+ |
+ |
+// This just checks the contract of the IdleNotification() function, |
+// and does not verify that it does reasonable work. |
+TEST(IdleNotificationWithLargeHint) { |
+ v8::HandleScope scope; |
+ LocalContext env; |
+ { |
+ // Create garbage in old-space to generate work for idle notification. |
+ i::AlwaysAllocateScope always_allocate; |
+ for (int i = 0; i < 100; i++) { |
+ FACTORY->NewFixedArray(1000, i::TENURED); |
+ } |
+ } |
+ intptr_t old_size = HEAP->SizeOfObjects(); |
+ bool finshed_idle_work = false; |
+ bool no_idle_work = v8::V8::IdleNotification(900); |
+ for (int i = 0; i < 200 && !finshed_idle_work; i++) { |
+ finshed_idle_work = v8::V8::IdleNotification(900); |
} |
- CHECK(rv == true); |
intptr_t new_size = HEAP->SizeOfObjects(); |
+ CHECK(finshed_idle_work); |
CHECK(no_idle_work || new_size < old_size); |
} |