Chromium Code Reviews| Index: runtime/vm/heap_test.cc |
| =================================================================== |
| --- runtime/vm/heap_test.cc (revision 41855) |
| +++ runtime/vm/heap_test.cc (working copy) |
| @@ -169,6 +169,44 @@ |
| } |
| +TEST_CASE(ArrayHeapStats) { |
| + const char* kScriptChars = |
| + "List f(int len) {\n" |
| + " return new List(len);\n" |
| + "}\n" |
| + "" |
| + "main() {\n" |
| + " return f(1234);\n" |
| + "}\n"; |
| + Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| + Isolate* isolate = Isolate::Current(); |
| + ClassTable* class_table = isolate->class_table(); |
| + intptr_t cid = kArrayCid; |
| + ClassHeapStats* class_stats = |
| + ClassHeapStatsTestHelper::GetHeapStatsForCid(class_table, |
| + cid); |
| + Dart_EnterScope(); |
| + Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); |
| + EXPECT_VALID(result); |
| + EXPECT(!Dart_IsNull(result)); |
| + Library& lib = Library::Handle(); |
| + lib ^= Api::UnwrapHandle(h_lib); |
| + EXPECT(!lib.IsNull()); |
| + intptr_t before = class_stats->recent.new_size; |
| + Dart_Handle result2 = Dart_Invoke(h_lib, NewString("main"), 0, NULL); |
|
zra
2014/11/20 19:05:18
Add comment about invoking twice.
koda
2014/11/20 19:19:53
Done.
|
| + EXPECT_VALID(result2); |
| + EXPECT(!Dart_IsNull(result2)); |
| + intptr_t after = class_stats->recent.new_size; |
| + const intptr_t expected_size = Array::InstanceSize(1234); |
| + // Invoking the method might involve some additional tiny array allocations, |
| + // so we allow slightly more than expected. |
| + static const intptr_t kTolerance = 10 * kWordSize; |
| + EXPECT_LE(expected_size, after - before); |
| + EXPECT_GT(expected_size + kTolerance, after - before); |
| + Dart_ExitScope(); |
| +} |
| + |
| + |
| class FindOnly : public FindObjectVisitor { |
| public: |
| FindOnly(Isolate* isolate, RawObject* target) |