Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: test/cctest/test-serialize.cc

Issue 2619203002: [serializer] pass internal fields deserializer callback as argument. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/snapshot/snapshot-common.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007-2010 the V8 project authors. All rights reserved. 1 // Copyright 2007-2010 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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 314
315 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 315 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
316 HandleScope handle_scope(isolate); 316 HandleScope handle_scope(isolate);
317 Handle<Object> root; 317 Handle<Object> root;
318 // Intentionally empty handle. The deserializer should not come across 318 // Intentionally empty handle. The deserializer should not come across
319 // any references to the global proxy in this test. 319 // any references to the global proxy in this test.
320 Handle<JSGlobalProxy> global_proxy = Handle<JSGlobalProxy>::null(); 320 Handle<JSGlobalProxy> global_proxy = Handle<JSGlobalProxy>::null();
321 { 321 {
322 SnapshotData snapshot_data(partial_blob); 322 SnapshotData snapshot_data(partial_blob);
323 Deserializer deserializer(&snapshot_data); 323 Deserializer deserializer(&snapshot_data);
324 root = deserializer.DeserializePartial(isolate, global_proxy) 324 root = deserializer.DeserializePartial(isolate, global_proxy, nullptr)
325 .ToHandleChecked(); 325 .ToHandleChecked();
326 CHECK(root->IsString()); 326 CHECK(root->IsString());
327 } 327 }
328 328
329 Handle<Object> root2; 329 Handle<Object> root2;
330 { 330 {
331 SnapshotData snapshot_data(partial_blob); 331 SnapshotData snapshot_data(partial_blob);
332 Deserializer deserializer(&snapshot_data); 332 Deserializer deserializer(&snapshot_data);
333 root2 = deserializer.DeserializePartial(isolate, global_proxy) 333 root2 = deserializer.DeserializePartial(isolate, global_proxy, nullptr)
334 .ToHandleChecked(); 334 .ToHandleChecked();
335 CHECK(root2->IsString()); 335 CHECK(root2->IsString());
336 CHECK(root.is_identical_to(root2)); 336 CHECK(root.is_identical_to(root2));
337 } 337 }
338 partial_blob.Dispose(); 338 partial_blob.Dispose();
339 } 339 }
340 v8_isolate->Dispose(); 340 v8_isolate->Dispose();
341 } 341 }
342 342
343 static void PartiallySerializeContext(Vector<const byte>* startup_blob_out, 343 static void PartiallySerializeContext(Vector<const byte>* startup_blob_out,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 412
413 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 413 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
414 HandleScope handle_scope(isolate); 414 HandleScope handle_scope(isolate);
415 Handle<Object> root; 415 Handle<Object> root;
416 Handle<JSGlobalProxy> global_proxy = 416 Handle<JSGlobalProxy> global_proxy =
417 isolate->factory()->NewUninitializedJSGlobalProxy( 417 isolate->factory()->NewUninitializedJSGlobalProxy(
418 JSGlobalProxy::SizeWithInternalFields(0)); 418 JSGlobalProxy::SizeWithInternalFields(0));
419 { 419 {
420 SnapshotData snapshot_data(partial_blob); 420 SnapshotData snapshot_data(partial_blob);
421 Deserializer deserializer(&snapshot_data); 421 Deserializer deserializer(&snapshot_data);
422 root = deserializer.DeserializePartial(isolate, global_proxy) 422 root = deserializer.DeserializePartial(isolate, global_proxy, nullptr)
423 .ToHandleChecked(); 423 .ToHandleChecked();
424 CHECK(root->IsContext()); 424 CHECK(root->IsContext());
425 CHECK(Handle<Context>::cast(root)->global_proxy() == *global_proxy); 425 CHECK(Handle<Context>::cast(root)->global_proxy() == *global_proxy);
426 } 426 }
427 427
428 Handle<Object> root2; 428 Handle<Object> root2;
429 { 429 {
430 SnapshotData snapshot_data(partial_blob); 430 SnapshotData snapshot_data(partial_blob);
431 Deserializer deserializer(&snapshot_data); 431 Deserializer deserializer(&snapshot_data);
432 root2 = deserializer.DeserializePartial(isolate, global_proxy) 432 root2 = deserializer.DeserializePartial(isolate, global_proxy, nullptr)
433 .ToHandleChecked(); 433 .ToHandleChecked();
434 CHECK(root2->IsContext()); 434 CHECK(root2->IsContext());
435 CHECK(!root.is_identical_to(root2)); 435 CHECK(!root.is_identical_to(root2));
436 } 436 }
437 partial_blob.Dispose(); 437 partial_blob.Dispose();
438 } 438 }
439 v8_isolate->Dispose(); 439 v8_isolate->Dispose();
440 } 440 }
441 441
442 static void PartiallySerializeCustomContext( 442 static void PartiallySerializeCustomContext(
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 532
533 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 533 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
534 HandleScope handle_scope(isolate); 534 HandleScope handle_scope(isolate);
535 Handle<Object> root; 535 Handle<Object> root;
536 Handle<JSGlobalProxy> global_proxy = 536 Handle<JSGlobalProxy> global_proxy =
537 isolate->factory()->NewUninitializedJSGlobalProxy( 537 isolate->factory()->NewUninitializedJSGlobalProxy(
538 JSGlobalProxy::SizeWithInternalFields(0)); 538 JSGlobalProxy::SizeWithInternalFields(0));
539 { 539 {
540 SnapshotData snapshot_data(partial_blob); 540 SnapshotData snapshot_data(partial_blob);
541 Deserializer deserializer(&snapshot_data); 541 Deserializer deserializer(&snapshot_data);
542 root = deserializer.DeserializePartial(isolate, global_proxy) 542 root = deserializer.DeserializePartial(isolate, global_proxy, nullptr)
543 .ToHandleChecked(); 543 .ToHandleChecked();
544 CHECK(root->IsContext()); 544 CHECK(root->IsContext());
545 Handle<Context> context = Handle<Context>::cast(root); 545 Handle<Context> context = Handle<Context>::cast(root);
546 546
547 // Add context to the weak native context list 547 // Add context to the weak native context list
548 context->set(Context::NEXT_CONTEXT_LINK, 548 context->set(Context::NEXT_CONTEXT_LINK,
549 isolate->heap()->native_contexts_list(), 549 isolate->heap()->native_contexts_list(),
550 UPDATE_WEAK_WRITE_BARRIER); 550 UPDATE_WEAK_WRITE_BARRIER);
551 isolate->heap()->set_native_contexts_list(*context); 551 isolate->heap()->set_native_contexts_list(*context);
552 552
(...skipping 1643 matching lines...) Expand 10 before | Expand all | Expand 10 after
2196 { 2196 {
2197 v8::HandleScope handle_scope(isolate); 2197 v8::HandleScope handle_scope(isolate);
2198 v8::ExtensionConfiguration* no_extension = nullptr; 2198 v8::ExtensionConfiguration* no_extension = nullptr;
2199 v8::Local<v8::ObjectTemplate> global_template = 2199 v8::Local<v8::ObjectTemplate> global_template =
2200 v8::ObjectTemplate::New(isolate); 2200 v8::ObjectTemplate::New(isolate);
2201 v8::Local<v8::FunctionTemplate> callback = 2201 v8::Local<v8::FunctionTemplate> callback =
2202 v8::FunctionTemplate::New(isolate, SerializedCallback); 2202 v8::FunctionTemplate::New(isolate, SerializedCallback);
2203 global_template->Set(v8_str("f"), callback); 2203 global_template->Set(v8_str("f"), callback);
2204 v8::Local<v8::Context> context = 2204 v8::Local<v8::Context> context =
2205 v8::Context::New(isolate, no_extension, global_template); 2205 v8::Context::New(isolate, no_extension, global_template);
2206 creator.SetDefaultContext(context);
2207 context = v8::Context::New(isolate, no_extension, global_template);
2206 v8::Local<v8::ObjectTemplate> object_template = 2208 v8::Local<v8::ObjectTemplate> object_template =
2207 v8::ObjectTemplate::New(isolate); 2209 v8::ObjectTemplate::New(isolate);
2208 object_template->SetInternalFieldCount(3); 2210 object_template->SetInternalFieldCount(3);
2209 2211
2210 v8::Context::Scope context_scope(context); 2212 v8::Context::Scope context_scope(context);
2211 ExpectInt32("f()", 42); 2213 ExpectInt32("f()", 42);
2212 2214
2213 v8::Local<v8::Object> a = 2215 v8::Local<v8::Object> a =
2214 object_template->NewInstance(context).ToLocalChecked(); 2216 object_template->NewInstance(context).ToLocalChecked();
2215 v8::Local<v8::Object> b = 2217 v8::Local<v8::Object> b =
2216 object_template->NewInstance(context).ToLocalChecked(); 2218 object_template->NewInstance(context).ToLocalChecked();
2217 v8::Local<v8::Object> c = 2219 v8::Local<v8::Object> c =
2218 object_template->NewInstance(context).ToLocalChecked(); 2220 object_template->NewInstance(context).ToLocalChecked();
2219 v8::Local<v8::External> null_external = 2221 v8::Local<v8::External> null_external =
2220 v8::External::New(isolate, nullptr); 2222 v8::External::New(isolate, nullptr);
2221 v8::Local<v8::External> field_external = 2223 v8::Local<v8::External> field_external =
2222 v8::External::New(isolate, &serialized_static_field); 2224 v8::External::New(isolate, &serialized_static_field);
2223 a->SetInternalField(0, b); 2225 a->SetInternalField(0, b);
2224 a->SetAlignedPointerInInternalField(1, a1); 2226 a->SetAlignedPointerInInternalField(1, a1);
2225 b->SetAlignedPointerInInternalField(0, b0); 2227 b->SetAlignedPointerInInternalField(0, b0);
2226 b->SetInternalField(1, c); 2228 b->SetInternalField(1, c);
2227 c->SetAlignedPointerInInternalField(0, c0); 2229 c->SetAlignedPointerInInternalField(0, c0);
2228 c->SetInternalField(1, null_external); 2230 c->SetInternalField(1, null_external);
2229 c->SetInternalField(2, field_external); 2231 c->SetInternalField(2, field_external);
2230 CHECK(context->Global()->Set(context, v8_str("a"), a).FromJust()); 2232 CHECK(context->Global()->Set(context, v8_str("a"), a).FromJust());
2231 2233
2232 creator.SetDefaultContext(context); 2234 CHECK_EQ(0u, creator.AddContext(context, SerializeInternalFields));
2233 CHECK_EQ(0u, creator.AddTemplate(callback)); 2235 CHECK_EQ(0u, creator.AddTemplate(callback));
2234 CHECK_EQ(1u, creator.AddTemplate(global_template)); 2236 CHECK_EQ(1u, creator.AddTemplate(global_template));
2235 } 2237 }
2236 blob = creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear, 2238 blob =
2237 SerializeInternalFields); 2239 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear);
2238 2240
2239 delete a1; 2241 delete a1;
2240 delete b0; 2242 delete b0;
2241 delete c0; 2243 delete c0;
2242 } 2244 }
2243 2245
2244 { 2246 {
2245 v8::Isolate::CreateParams params; 2247 v8::Isolate::CreateParams params;
2246 params.snapshot_blob = &blob; 2248 params.snapshot_blob = &blob;
2247 params.array_buffer_allocator = CcTest::array_buffer_allocator(); 2249 params.array_buffer_allocator = CcTest::array_buffer_allocator();
2248 params.external_references = original_external_references; 2250 params.external_references = original_external_references;
2249 params.deserialize_internal_fields_callback = DeserializeInternalFields;
2250 v8::Isolate* isolate = v8::Isolate::New(params); 2251 v8::Isolate* isolate = v8::Isolate::New(params);
2251 { 2252 {
2252 v8::Isolate::Scope isolate_scope(isolate); 2253 v8::Isolate::Scope isolate_scope(isolate);
2253 { 2254 {
2254 // Create a new context without a new object template. 2255 // Create a new context without a new object template.
2255 v8::HandleScope handle_scope(isolate); 2256 v8::HandleScope handle_scope(isolate);
2256 v8::Local<v8::Context> context = v8::Context::New(isolate); 2257 v8::Local<v8::Context> context =
2258 v8::Context::FromSnapshot(isolate, 0, DeserializeInternalFields)
2259 .ToLocalChecked();
2257 v8::Context::Scope context_scope(context); 2260 v8::Context::Scope context_scope(context);
2258 ExpectInt32("f()", 42); 2261 ExpectInt32("f()", 42);
2259 2262
2260 // Retrieve the snapshotted object template. 2263 // Retrieve the snapshotted object template.
2261 v8::Local<v8::ObjectTemplate> obj_template = 2264 v8::Local<v8::ObjectTemplate> obj_template =
2262 v8::ObjectTemplate::FromSnapshot(isolate, 1).ToLocalChecked(); 2265 v8::ObjectTemplate::FromSnapshot(isolate, 1).ToLocalChecked();
2263 CHECK(!obj_template.IsEmpty()); 2266 CHECK(!obj_template.IsEmpty());
2264 v8::Local<v8::Object> object = 2267 v8::Local<v8::Object> object =
2265 obj_template->NewInstance(context).ToLocalChecked(); 2268 obj_template->NewInstance(context).ToLocalChecked();
2266 CHECK(context->Global()->Set(context, v8_str("o"), object).FromJust()); 2269 CHECK(context->Global()->Set(context, v8_str("o"), object).FromJust());
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2313 v8::Local<v8::External>::Cast(c2)->Value()); 2316 v8::Local<v8::External>::Cast(c2)->Value());
2314 2317
2315 // Accessing out of bound returns empty MaybeHandle. 2318 // Accessing out of bound returns empty MaybeHandle.
2316 CHECK(v8::ObjectTemplate::FromSnapshot(isolate, 2).IsEmpty()); 2319 CHECK(v8::ObjectTemplate::FromSnapshot(isolate, 2).IsEmpty());
2317 CHECK(v8::FunctionTemplate::FromSnapshot(isolate, 2).IsEmpty()); 2320 CHECK(v8::FunctionTemplate::FromSnapshot(isolate, 2).IsEmpty());
2318 CHECK(v8::Context::FromSnapshot(isolate, 1).IsEmpty()); 2321 CHECK(v8::Context::FromSnapshot(isolate, 1).IsEmpty());
2319 2322
2320 for (auto data : deserialized_data) delete data; 2323 for (auto data : deserialized_data) delete data;
2321 deserialized_data.clear(); 2324 deserialized_data.clear();
2322 } 2325 }
2323
2324 {
2325 // Create a context with a new object template. It is merged into the
2326 // deserialized global object.
2327 v8::HandleScope handle_scope(isolate);
2328 v8::ExtensionConfiguration* no_extension = nullptr;
2329 v8::Local<v8::ObjectTemplate> global_template =
2330 v8::ObjectTemplate::New(isolate);
2331 global_template->Set(
2332 v8_str("g"),
2333 v8::FunctionTemplate::New(isolate, SerializedCallbackReplacement));
2334 v8::Local<v8::Context> context =
2335 v8::Context::New(isolate, no_extension, global_template);
2336 v8::Context::Scope context_scope(context);
2337 ExpectInt32("g()", 1337);
2338 ExpectInt32("f()", 42);
2339
2340 for (auto data : deserialized_data) delete data;
2341 deserialized_data.clear();
2342 }
2343 } 2326 }
2344 isolate->Dispose(); 2327 isolate->Dispose();
2345 } 2328 }
2346 delete[] blob.data; 2329 delete[] blob.data;
2347 } 2330 }
2348 2331
2349 TEST(SnapshotCreatorIncludeGlobalProxy) { 2332 TEST(SnapshotCreatorIncludeGlobalProxy) {
2350 DisableAlwaysOpt(); 2333 DisableAlwaysOpt();
2351 v8::StartupData blob; 2334 v8::StartupData blob;
2352 2335
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2418 ExpectInt32("h()", 13); 2401 ExpectInt32("h()", 13);
2419 ExpectInt32("o.p", 7); 2402 ExpectInt32("o.p", 7);
2420 ExpectInt32("x", 2016); 2403 ExpectInt32("x", 2016);
2421 ExpectInt32("y", 2017); 2404 ExpectInt32("y", 2017);
2422 CHECK(v8_str("hidden string") 2405 CHECK(v8_str("hidden string")
2423 ->Equals(context, context->Global() 2406 ->Equals(context, context->Global()
2424 ->GetPrivate(context, hidden) 2407 ->GetPrivate(context, hidden)
2425 .ToLocalChecked()) 2408 .ToLocalChecked())
2426 .FromJust()); 2409 .FromJust());
2427 2410
2428 CHECK_EQ(0u, creator.AddContext(context)); 2411 CHECK_EQ(0u, creator.AddContext(context, SerializeInternalFields));
2429 } 2412 }
2430 blob = creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear, 2413 blob =
2431 SerializeInternalFields); 2414 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear);
2432 } 2415 }
2433 2416
2434 { 2417 {
2435 v8::Isolate::CreateParams params; 2418 v8::Isolate::CreateParams params;
2436 params.snapshot_blob = &blob; 2419 params.snapshot_blob = &blob;
2437 params.array_buffer_allocator = CcTest::array_buffer_allocator(); 2420 params.array_buffer_allocator = CcTest::array_buffer_allocator();
2438 params.external_references = original_external_references; 2421 params.external_references = original_external_references;
2439 params.deserialize_internal_fields_callback = DeserializeInternalFields;
2440 v8::Isolate* isolate = v8::Isolate::New(params); 2422 v8::Isolate* isolate = v8::Isolate::New(params);
2441 { 2423 {
2442 v8::Isolate::Scope isolate_scope(isolate); 2424 v8::Isolate::Scope isolate_scope(isolate);
2443 // We can introduce new extensions, which could override the already 2425 // We can introduce new extensions, which could override the already
2444 // snapshotted extension. 2426 // snapshotted extension.
2445 v8::Extension* extension = new v8::Extension("new extension", 2427 v8::Extension* extension = new v8::Extension("new extension",
2446 "function i() { return 24; }" 2428 "function i() { return 24; }"
2447 "function j() { return 25; }" 2429 "function j() { return 25; }"
2448 "if (o.p == 7) o.p++;"); 2430 "if (o.p == 7) o.p++;");
2449 extension->set_auto_enable(true); 2431 extension->set_auto_enable(true);
(...skipping 13 matching lines...) Expand all
2463 ExpectInt32("o.p", 8); 2445 ExpectInt32("o.p", 8);
2464 v8::TryCatch try_catch(isolate); 2446 v8::TryCatch try_catch(isolate);
2465 CHECK(CompileRun("x").IsEmpty()); 2447 CHECK(CompileRun("x").IsEmpty());
2466 CHECK(try_catch.HasCaught()); 2448 CHECK(try_catch.HasCaught());
2467 } 2449 }
2468 { 2450 {
2469 // Create a new context from first additional context snapshot. This 2451 // Create a new context from first additional context snapshot. This
2470 // will use the global object from the snapshot, including interceptor. 2452 // will use the global object from the snapshot, including interceptor.
2471 v8::HandleScope handle_scope(isolate); 2453 v8::HandleScope handle_scope(isolate);
2472 v8::Local<v8::Context> context = 2454 v8::Local<v8::Context> context =
2473 v8::Context::FromSnapshot(isolate, 0).ToLocalChecked(); 2455 v8::Context::FromSnapshot(isolate, 0, DeserializeInternalFields)
2456 .ToLocalChecked();
2474 { 2457 {
2475 v8::Context::Scope context_scope(context); 2458 v8::Context::Scope context_scope(context);
2476 ExpectInt32("f()", 42); 2459 ExpectInt32("f()", 42);
2477 ExpectInt32("g()", 12); 2460 ExpectInt32("g()", 12);
2478 ExpectInt32("h()", 13); 2461 ExpectInt32("h()", 13);
2479 ExpectInt32("i()", 24); 2462 ExpectInt32("i()", 24);
2480 ExpectInt32("j()", 25); 2463 ExpectInt32("j()", 25);
2481 ExpectInt32("o.p", 8); 2464 ExpectInt32("o.p", 8);
2482 ExpectInt32("x", 2016); 2465 ExpectInt32("x", 2016);
2483 v8::Local<v8::Private> hidden = 2466 v8::Local<v8::Private> hidden =
2484 v8::Private::ForApi(isolate, v8_str("hidden")); 2467 v8::Private::ForApi(isolate, v8_str("hidden"));
2485 CHECK(v8_str("hidden string") 2468 CHECK(v8_str("hidden string")
2486 ->Equals(context, context->Global() 2469 ->Equals(context, context->Global()
2487 ->GetPrivate(context, hidden) 2470 ->GetPrivate(context, hidden)
2488 .ToLocalChecked()) 2471 .ToLocalChecked())
2489 .FromJust()); 2472 .FromJust());
2490 ExpectString("cached", "cached string"); 2473 ExpectString("cached", "cached string");
2491 } 2474 }
2492 2475
2493 v8::Local<v8::Object> global = context->Global(); 2476 v8::Local<v8::Object> global = context->Global();
2494 CHECK_EQ(3, global->InternalFieldCount()); 2477 CHECK_EQ(3, global->InternalFieldCount());
2495 context->DetachGlobal(); 2478 context->DetachGlobal();
2496 2479
2497 // New context, but reuse global proxy. 2480 // New context, but reuse global proxy.
2498 v8::ExtensionConfiguration* no_extensions = nullptr; 2481 v8::ExtensionConfiguration* no_extensions = nullptr;
2499 v8::Local<v8::Context> context2 = 2482 v8::Local<v8::Context> context2 =
2500 v8::Context::FromSnapshot(isolate, 0, no_extensions, global) 2483 v8::Context::FromSnapshot(isolate, 0, DeserializeInternalFields,
2484 no_extensions, global)
2501 .ToLocalChecked(); 2485 .ToLocalChecked();
2502 { 2486 {
2503 v8::Context::Scope context_scope(context2); 2487 v8::Context::Scope context_scope(context2);
2504 ExpectInt32("f()", 42); 2488 ExpectInt32("f()", 42);
2505 ExpectInt32("g()", 12); 2489 ExpectInt32("g()", 12);
2506 ExpectInt32("h()", 13); 2490 ExpectInt32("h()", 13);
2507 ExpectInt32("i()", 24); 2491 ExpectInt32("i()", 24);
2508 ExpectInt32("j()", 25); 2492 ExpectInt32("j()", 25);
2509 ExpectInt32("o.p", 8); 2493 ExpectInt32("o.p", 8);
2510 ExpectInt32("x", 2016); 2494 ExpectInt32("x", 2016);
(...skipping 21 matching lines...) Expand all
2532 } 2516 }
2533 delete[] blob.data; 2517 delete[] blob.data;
2534 } 2518 }
2535 2519
2536 TEST(SerializationMemoryStats) { 2520 TEST(SerializationMemoryStats) {
2537 FLAG_profile_deserialization = true; 2521 FLAG_profile_deserialization = true;
2538 FLAG_always_opt = false; 2522 FLAG_always_opt = false;
2539 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); 2523 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob();
2540 delete[] blob.data; 2524 delete[] blob.data;
2541 } 2525 }
OLDNEW
« no previous file with comments | « src/snapshot/snapshot-common.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698