OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 6188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6199 size_t start = heap->OldGenerationAllocationCounter(); | 6199 size_t start = heap->OldGenerationAllocationCounter(); |
6200 for (int i = 0; i < 20; i++) { | 6200 for (int i = 0; i < 20; i++) { |
6201 AllocateInSpace(isolate, kSize, OLD_SPACE); | 6201 AllocateInSpace(isolate, kSize, OLD_SPACE); |
6202 size_t counter = heap->OldGenerationAllocationCounter(); | 6202 size_t counter = heap->OldGenerationAllocationCounter(); |
6203 CHECK_LE(kSize, counter - start); | 6203 CHECK_LE(kSize, counter - start); |
6204 start = counter; | 6204 start = counter; |
6205 } | 6205 } |
6206 } | 6206 } |
6207 | 6207 |
6208 | 6208 |
6209 TEST(NewSpaceAllocationThroughput) { | |
6210 CcTest::InitializeVM(); | |
6211 v8::HandleScope scope(CcTest::isolate()); | |
6212 Isolate* isolate = CcTest::i_isolate(); | |
6213 Heap* heap = isolate->heap(); | |
6214 GCTracer* tracer = heap->tracer(); | |
6215 tracer->ResetForTesting(); | |
6216 int time1 = 100; | |
6217 size_t counter1 = 1000; | |
6218 tracer->SampleAllocation(time1, counter1, 0); | |
6219 int time2 = 200; | |
6220 size_t counter2 = 2000; | |
6221 tracer->SampleAllocation(time2, counter2, 0); | |
6222 size_t throughput = | |
6223 tracer->NewSpaceAllocationThroughputInBytesPerMillisecond(); | |
6224 CHECK_EQ((counter2 - counter1) / (time2 - time1), throughput); | |
6225 int time3 = 1000; | |
6226 size_t counter3 = 30000; | |
6227 tracer->SampleAllocation(time3, counter3, 0); | |
6228 throughput = tracer->NewSpaceAllocationThroughputInBytesPerMillisecond(); | |
6229 CHECK_EQ((counter3 - counter1) / (time3 - time1), throughput); | |
6230 } | |
6231 | |
6232 | |
6233 TEST(NewSpaceAllocationThroughput2) { | |
6234 CcTest::InitializeVM(); | |
6235 v8::HandleScope scope(CcTest::isolate()); | |
6236 Isolate* isolate = CcTest::i_isolate(); | |
6237 Heap* heap = isolate->heap(); | |
6238 GCTracer* tracer = heap->tracer(); | |
6239 tracer->ResetForTesting(); | |
6240 int time1 = 100; | |
6241 size_t counter1 = 1000; | |
6242 tracer->SampleAllocation(time1, counter1, 0); | |
6243 int time2 = 200; | |
6244 size_t counter2 = 2000; | |
6245 tracer->SampleAllocation(time2, counter2, 0); | |
6246 size_t throughput = | |
6247 tracer->NewSpaceAllocationThroughputInBytesPerMillisecond(100); | |
6248 CHECK_EQ((counter2 - counter1) / (time2 - time1), throughput); | |
6249 int time3 = 1000; | |
6250 size_t counter3 = 30000; | |
6251 tracer->SampleAllocation(time3, counter3, 0); | |
6252 throughput = tracer->NewSpaceAllocationThroughputInBytesPerMillisecond(100); | |
6253 CHECK_EQ((counter3 - counter1) / (time3 - time1), throughput); | |
6254 } | |
6255 | |
6256 | |
6257 static void CheckLeak(const v8::FunctionCallbackInfo<v8::Value>& args) { | 6209 static void CheckLeak(const v8::FunctionCallbackInfo<v8::Value>& args) { |
6258 Isolate* isolate = CcTest::i_isolate(); | 6210 Isolate* isolate = CcTest::i_isolate(); |
6259 Object* message = | 6211 Object* message = |
6260 *reinterpret_cast<Object**>(isolate->pending_message_obj_address()); | 6212 *reinterpret_cast<Object**>(isolate->pending_message_obj_address()); |
6261 CHECK(message->IsTheHole(isolate)); | 6213 CHECK(message->IsTheHole(isolate)); |
6262 } | 6214 } |
6263 | 6215 |
6264 | 6216 |
6265 TEST(MessageObjectLeak) { | 6217 TEST(MessageObjectLeak) { |
6266 CcTest::InitializeVM(); | 6218 CcTest::InitializeVM(); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6359 "var g1 = f();" | 6311 "var g1 = f();" |
6360 "var g2 = f();" | 6312 "var g2 = f();" |
6361 "check(g1, g2);" | 6313 "check(g1, g2);" |
6362 "g1();" | 6314 "g1();" |
6363 "g2();" | 6315 "g2();" |
6364 "remove(g1);" | 6316 "remove(g1);" |
6365 "g2();" | 6317 "g2();" |
6366 "check(g1, g2);"); | 6318 "check(g1, g2);"); |
6367 } | 6319 } |
6368 | 6320 |
6369 TEST(OldGenerationAllocationThroughput) { | |
6370 CcTest::InitializeVM(); | |
6371 v8::HandleScope scope(CcTest::isolate()); | |
6372 Isolate* isolate = CcTest::i_isolate(); | |
6373 Heap* heap = isolate->heap(); | |
6374 GCTracer* tracer = heap->tracer(); | |
6375 tracer->ResetForTesting(); | |
6376 int time1 = 100; | |
6377 size_t counter1 = 1000; | |
6378 tracer->SampleAllocation(time1, 0, counter1); | |
6379 int time2 = 200; | |
6380 size_t counter2 = 2000; | |
6381 tracer->SampleAllocation(time2, 0, counter2); | |
6382 size_t throughput = static_cast<size_t>( | |
6383 tracer->OldGenerationAllocationThroughputInBytesPerMillisecond(100)); | |
6384 CHECK_EQ((counter2 - counter1) / (time2 - time1), throughput); | |
6385 int time3 = 1000; | |
6386 size_t counter3 = 30000; | |
6387 tracer->SampleAllocation(time3, 0, counter3); | |
6388 throughput = static_cast<size_t>( | |
6389 tracer->OldGenerationAllocationThroughputInBytesPerMillisecond(100)); | |
6390 CHECK_EQ((counter3 - counter1) / (time3 - time1), throughput); | |
6391 } | |
6392 | |
6393 | |
6394 TEST(AllocationThroughput) { | |
6395 CcTest::InitializeVM(); | |
6396 v8::HandleScope scope(CcTest::isolate()); | |
6397 Isolate* isolate = CcTest::i_isolate(); | |
6398 Heap* heap = isolate->heap(); | |
6399 GCTracer* tracer = heap->tracer(); | |
6400 tracer->ResetForTesting(); | |
6401 int time1 = 100; | |
6402 size_t counter1 = 1000; | |
6403 tracer->SampleAllocation(time1, counter1, counter1); | |
6404 int time2 = 200; | |
6405 size_t counter2 = 2000; | |
6406 tracer->SampleAllocation(time2, counter2, counter2); | |
6407 size_t throughput = static_cast<size_t>( | |
6408 tracer->AllocationThroughputInBytesPerMillisecond(100)); | |
6409 CHECK_EQ(2 * (counter2 - counter1) / (time2 - time1), throughput); | |
6410 int time3 = 1000; | |
6411 size_t counter3 = 30000; | |
6412 tracer->SampleAllocation(time3, counter3, counter3); | |
6413 throughput = tracer->AllocationThroughputInBytesPerMillisecond(100); | |
6414 CHECK_EQ(2 * (counter3 - counter1) / (time3 - time1), throughput); | |
6415 } | |
6416 | |
6417 | |
6418 TEST(ContextMeasure) { | 6321 TEST(ContextMeasure) { |
6419 CcTest::InitializeVM(); | 6322 CcTest::InitializeVM(); |
6420 v8::HandleScope scope(CcTest::isolate()); | 6323 v8::HandleScope scope(CcTest::isolate()); |
6421 Isolate* isolate = CcTest::i_isolate(); | 6324 Isolate* isolate = CcTest::i_isolate(); |
6422 LocalContext context; | 6325 LocalContext context; |
6423 | 6326 |
6424 int size_upper_limit = 0; | 6327 int size_upper_limit = 0; |
6425 int count_upper_limit = 0; | 6328 int count_upper_limit = 0; |
6426 HeapIterator it(CcTest::heap()); | 6329 HeapIterator it(CcTest::heap()); |
6427 for (HeapObject* obj = it.next(); obj != NULL; obj = it.next()) { | 6330 for (HeapObject* obj = it.next(); obj != NULL; obj = it.next()) { |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7176 chunk, chunk->area_end() - kPointerSize, chunk->area_end()); | 7079 chunk, chunk->area_end() - kPointerSize, chunk->area_end()); |
7177 slots[chunk->area_end() - kPointerSize] = false; | 7080 slots[chunk->area_end() - kPointerSize] = false; |
7178 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { | 7081 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { |
7179 CHECK(slots[addr]); | 7082 CHECK(slots[addr]); |
7180 return KEEP_SLOT; | 7083 return KEEP_SLOT; |
7181 }); | 7084 }); |
7182 } | 7085 } |
7183 | 7086 |
7184 } // namespace internal | 7087 } // namespace internal |
7185 } // namespace v8 | 7088 } // namespace v8 |
OLD | NEW |