| OLD | NEW | 
|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 177   Factory* factory = isolate->factory(); | 177   Factory* factory = isolate->factory(); | 
| 178   Heap* heap = isolate->heap(); | 178   Heap* heap = isolate->heap(); | 
| 179   HandleScope scope(isolate); | 179   HandleScope scope(isolate); | 
| 180   Handle<JSFunction> function = factory->NewFunction( | 180   Handle<JSFunction> function = factory->NewFunction( | 
| 181       factory->function_string()); | 181       factory->function_string()); | 
| 182   Handle<JSObject> key = factory->NewJSObject(function); | 182   Handle<JSObject> key = factory->NewJSObject(function); | 
| 183   Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate); | 183   Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate); | 
| 184 | 184 | 
| 185   // Start second old-space page so that values land on evacuation candidate. | 185   // Start second old-space page so that values land on evacuation candidate. | 
| 186   Page* first_page = heap->old_pointer_space()->anchor()->next_page(); | 186   Page* first_page = heap->old_pointer_space()->anchor()->next_page(); | 
| 187   factory->NewFixedArray(900 * KB / kPointerSize, TENURED); | 187   int dummy_array_size = Page::kMaxRegularHeapObjectSize - 92 * KB; | 
|  | 188   factory->NewFixedArray(dummy_array_size / kPointerSize, TENURED); | 
| 188 | 189 | 
| 189   // Fill up weak set with values on an evacuation candidate. | 190   // Fill up weak set with values on an evacuation candidate. | 
| 190   { | 191   { | 
| 191     HandleScope scope(isolate); | 192     HandleScope scope(isolate); | 
| 192     for (int i = 0; i < 32; i++) { | 193     for (int i = 0; i < 32; i++) { | 
| 193       Handle<JSObject> object = factory->NewJSObject(function, TENURED); | 194       Handle<JSObject> object = factory->NewJSObject(function, TENURED); | 
| 194       CHECK(!heap->InNewSpace(object->address())); | 195       CHECK(!heap->InNewSpace(object->address())); | 
| 195       CHECK(!first_page->Contains(object->address())); | 196       CHECK(!first_page->Contains(object->address())); | 
| 196       Runtime::WeakCollectionSet(weakset, key, object); | 197       Runtime::WeakCollectionSet(weakset, key, object); | 
| 197     } | 198     } | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 215   LocalContext context; | 216   LocalContext context; | 
| 216   Isolate* isolate = GetIsolateFrom(&context); | 217   Isolate* isolate = GetIsolateFrom(&context); | 
| 217   Factory* factory = isolate->factory(); | 218   Factory* factory = isolate->factory(); | 
| 218   Heap* heap = isolate->heap(); | 219   Heap* heap = isolate->heap(); | 
| 219   HandleScope scope(isolate); | 220   HandleScope scope(isolate); | 
| 220   Handle<JSFunction> function = factory->NewFunction( | 221   Handle<JSFunction> function = factory->NewFunction( | 
| 221       factory->function_string()); | 222       factory->function_string()); | 
| 222 | 223 | 
| 223   // Start second old-space page so that keys land on evacuation candidate. | 224   // Start second old-space page so that keys land on evacuation candidate. | 
| 224   Page* first_page = heap->old_pointer_space()->anchor()->next_page(); | 225   Page* first_page = heap->old_pointer_space()->anchor()->next_page(); | 
| 225   factory->NewFixedArray(900 * KB / kPointerSize, TENURED); | 226   int dummy_array_size = Page::kMaxRegularHeapObjectSize - 92 * KB; | 
|  | 227   factory->NewFixedArray(dummy_array_size / kPointerSize, TENURED); | 
| 226 | 228 | 
| 227   // Fill up weak set with keys on an evacuation candidate. | 229   // Fill up weak set with keys on an evacuation candidate. | 
| 228   Handle<JSObject> keys[32]; | 230   Handle<JSObject> keys[32]; | 
| 229   for (int i = 0; i < 32; i++) { | 231   for (int i = 0; i < 32; i++) { | 
| 230     keys[i] = factory->NewJSObject(function, TENURED); | 232     keys[i] = factory->NewJSObject(function, TENURED); | 
| 231     CHECK(!heap->InNewSpace(keys[i]->address())); | 233     CHECK(!heap->InNewSpace(keys[i]->address())); | 
| 232     CHECK(!first_page->Contains(keys[i]->address())); | 234     CHECK(!first_page->Contains(keys[i]->address())); | 
| 233   } | 235   } | 
| 234   Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate); | 236   Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate); | 
| 235   for (int i = 0; i < 32; i++) { | 237   for (int i = 0; i < 32; i++) { | 
| 236     Handle<Smi> smi(Smi::FromInt(i), isolate); | 238     Handle<Smi> smi(Smi::FromInt(i), isolate); | 
| 237     Runtime::WeakCollectionSet(weakset, keys[i], smi); | 239     Runtime::WeakCollectionSet(weakset, keys[i], smi); | 
| 238   } | 240   } | 
| 239 | 241 | 
| 240   // Force compacting garbage collection. The subsequent collections are used | 242   // Force compacting garbage collection. The subsequent collections are used | 
| 241   // to verify that key references were actually updated. | 243   // to verify that key references were actually updated. | 
| 242   CHECK(FLAG_always_compact); | 244   CHECK(FLAG_always_compact); | 
| 243   heap->CollectAllGarbage(Heap::kNoGCFlags); | 245   heap->CollectAllGarbage(Heap::kNoGCFlags); | 
| 244   heap->CollectAllGarbage(Heap::kNoGCFlags); | 246   heap->CollectAllGarbage(Heap::kNoGCFlags); | 
| 245   heap->CollectAllGarbage(Heap::kNoGCFlags); | 247   heap->CollectAllGarbage(Heap::kNoGCFlags); | 
| 246 } | 248 } | 
| OLD | NEW | 
|---|