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

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

Issue 2628093003: [serializer] change internal field callbacks to take data pointer. (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/partial-serializer.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 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 { 278 {
279 v8::HandleScope handle_scope(v8_isolate); 279 v8::HandleScope handle_scope(v8_isolate);
280 v8::Local<v8::Context>::New(v8_isolate, env)->Exit(); 280 v8::Local<v8::Context>::New(v8_isolate, env)->Exit();
281 } 281 }
282 env.Reset(); 282 env.Reset();
283 283
284 StartupSerializer startup_serializer( 284 StartupSerializer startup_serializer(
285 isolate, v8::SnapshotCreator::FunctionCodeHandling::kClear); 285 isolate, v8::SnapshotCreator::FunctionCodeHandling::kClear);
286 startup_serializer.SerializeStrongReferences(); 286 startup_serializer.SerializeStrongReferences();
287 287
288 PartialSerializer partial_serializer(isolate, &startup_serializer, nullptr); 288 PartialSerializer partial_serializer(isolate, &startup_serializer,
289 v8::SerializeInternalFieldsCallback());
289 partial_serializer.Serialize(&raw_foo, false); 290 partial_serializer.Serialize(&raw_foo, false);
290 291
291 startup_serializer.SerializeWeakReferencesAndDeferred(); 292 startup_serializer.SerializeWeakReferencesAndDeferred();
292 293
293 SnapshotData startup_snapshot(&startup_serializer); 294 SnapshotData startup_snapshot(&startup_serializer);
294 SnapshotData partial_snapshot(&partial_serializer); 295 SnapshotData partial_snapshot(&partial_serializer);
295 296
296 *partial_blob_out = WritePayload(partial_snapshot.RawData()); 297 *partial_blob_out = WritePayload(partial_snapshot.RawData());
297 *startup_blob_out = WritePayload(startup_snapshot.RawData()); 298 *startup_blob_out = WritePayload(startup_snapshot.RawData());
298 } 299 }
(...skipping 15 matching lines...) Expand all
314 315
315 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 316 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
316 HandleScope handle_scope(isolate); 317 HandleScope handle_scope(isolate);
317 Handle<Object> root; 318 Handle<Object> root;
318 // Intentionally empty handle. The deserializer should not come across 319 // Intentionally empty handle. The deserializer should not come across
319 // any references to the global proxy in this test. 320 // any references to the global proxy in this test.
320 Handle<JSGlobalProxy> global_proxy = Handle<JSGlobalProxy>::null(); 321 Handle<JSGlobalProxy> global_proxy = Handle<JSGlobalProxy>::null();
321 { 322 {
322 SnapshotData snapshot_data(partial_blob); 323 SnapshotData snapshot_data(partial_blob);
323 Deserializer deserializer(&snapshot_data); 324 Deserializer deserializer(&snapshot_data);
324 root = deserializer.DeserializePartial(isolate, global_proxy, nullptr) 325 root = deserializer
326 .DeserializePartial(isolate, global_proxy,
327 v8::DeserializeInternalFieldsCallback())
325 .ToHandleChecked(); 328 .ToHandleChecked();
326 CHECK(root->IsString()); 329 CHECK(root->IsString());
327 } 330 }
328 331
329 Handle<Object> root2; 332 Handle<Object> root2;
330 { 333 {
331 SnapshotData snapshot_data(partial_blob); 334 SnapshotData snapshot_data(partial_blob);
332 Deserializer deserializer(&snapshot_data); 335 Deserializer deserializer(&snapshot_data);
333 root2 = deserializer.DeserializePartial(isolate, global_proxy, nullptr) 336 root2 = deserializer
337 .DeserializePartial(isolate, global_proxy,
338 v8::DeserializeInternalFieldsCallback())
334 .ToHandleChecked(); 339 .ToHandleChecked();
335 CHECK(root2->IsString()); 340 CHECK(root2->IsString());
336 CHECK(root.is_identical_to(root2)); 341 CHECK(root.is_identical_to(root2));
337 } 342 }
338 partial_blob.Dispose(); 343 partial_blob.Dispose();
339 } 344 }
340 v8_isolate->Dispose(); 345 v8_isolate->Dispose();
341 } 346 }
342 347
343 static void PartiallySerializeContext(Vector<const byte>* startup_blob_out, 348 static void PartiallySerializeContext(Vector<const byte>* startup_blob_out,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 i::Object* raw_context = *v8::Utils::OpenPersistent(env); 383 i::Object* raw_context = *v8::Utils::OpenPersistent(env);
379 384
380 env.Reset(); 385 env.Reset();
381 386
382 SnapshotByteSink startup_sink; 387 SnapshotByteSink startup_sink;
383 StartupSerializer startup_serializer( 388 StartupSerializer startup_serializer(
384 isolate, v8::SnapshotCreator::FunctionCodeHandling::kClear); 389 isolate, v8::SnapshotCreator::FunctionCodeHandling::kClear);
385 startup_serializer.SerializeStrongReferences(); 390 startup_serializer.SerializeStrongReferences();
386 391
387 SnapshotByteSink partial_sink; 392 SnapshotByteSink partial_sink;
388 PartialSerializer partial_serializer(isolate, &startup_serializer, nullptr); 393 PartialSerializer partial_serializer(isolate, &startup_serializer,
394 v8::SerializeInternalFieldsCallback());
389 partial_serializer.Serialize(&raw_context, false); 395 partial_serializer.Serialize(&raw_context, false);
390 startup_serializer.SerializeWeakReferencesAndDeferred(); 396 startup_serializer.SerializeWeakReferencesAndDeferred();
391 397
392 SnapshotData startup_snapshot(&startup_serializer); 398 SnapshotData startup_snapshot(&startup_serializer);
393 SnapshotData partial_snapshot(&partial_serializer); 399 SnapshotData partial_snapshot(&partial_serializer);
394 400
395 *partial_blob_out = WritePayload(partial_snapshot.RawData()); 401 *partial_blob_out = WritePayload(partial_snapshot.RawData());
396 *startup_blob_out = WritePayload(startup_snapshot.RawData()); 402 *startup_blob_out = WritePayload(startup_snapshot.RawData());
397 } 403 }
398 v8_isolate->Dispose(); 404 v8_isolate->Dispose();
(...skipping 13 matching lines...) Expand all
412 418
413 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 419 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
414 HandleScope handle_scope(isolate); 420 HandleScope handle_scope(isolate);
415 Handle<Object> root; 421 Handle<Object> root;
416 Handle<JSGlobalProxy> global_proxy = 422 Handle<JSGlobalProxy> global_proxy =
417 isolate->factory()->NewUninitializedJSGlobalProxy( 423 isolate->factory()->NewUninitializedJSGlobalProxy(
418 JSGlobalProxy::SizeWithInternalFields(0)); 424 JSGlobalProxy::SizeWithInternalFields(0));
419 { 425 {
420 SnapshotData snapshot_data(partial_blob); 426 SnapshotData snapshot_data(partial_blob);
421 Deserializer deserializer(&snapshot_data); 427 Deserializer deserializer(&snapshot_data);
422 root = deserializer.DeserializePartial(isolate, global_proxy, nullptr) 428 root = deserializer
429 .DeserializePartial(isolate, global_proxy,
430 v8::DeserializeInternalFieldsCallback())
423 .ToHandleChecked(); 431 .ToHandleChecked();
424 CHECK(root->IsContext()); 432 CHECK(root->IsContext());
425 CHECK(Handle<Context>::cast(root)->global_proxy() == *global_proxy); 433 CHECK(Handle<Context>::cast(root)->global_proxy() == *global_proxy);
426 } 434 }
427 435
428 Handle<Object> root2; 436 Handle<Object> root2;
429 { 437 {
430 SnapshotData snapshot_data(partial_blob); 438 SnapshotData snapshot_data(partial_blob);
431 Deserializer deserializer(&snapshot_data); 439 Deserializer deserializer(&snapshot_data);
432 root2 = deserializer.DeserializePartial(isolate, global_proxy, nullptr) 440 root2 = deserializer
441 .DeserializePartial(isolate, global_proxy,
442 v8::DeserializeInternalFieldsCallback())
433 .ToHandleChecked(); 443 .ToHandleChecked();
434 CHECK(root2->IsContext()); 444 CHECK(root2->IsContext());
435 CHECK(!root.is_identical_to(root2)); 445 CHECK(!root.is_identical_to(root2));
436 } 446 }
437 partial_blob.Dispose(); 447 partial_blob.Dispose();
438 } 448 }
439 v8_isolate->Dispose(); 449 v8_isolate->Dispose();
440 } 450 }
441 451
442 static void PartiallySerializeCustomContext( 452 static void PartiallySerializeCustomContext(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 i::Object* raw_context = *v8::Utils::OpenPersistent(env); 508 i::Object* raw_context = *v8::Utils::OpenPersistent(env);
499 509
500 env.Reset(); 510 env.Reset();
501 511
502 SnapshotByteSink startup_sink; 512 SnapshotByteSink startup_sink;
503 StartupSerializer startup_serializer( 513 StartupSerializer startup_serializer(
504 isolate, v8::SnapshotCreator::FunctionCodeHandling::kClear); 514 isolate, v8::SnapshotCreator::FunctionCodeHandling::kClear);
505 startup_serializer.SerializeStrongReferences(); 515 startup_serializer.SerializeStrongReferences();
506 516
507 SnapshotByteSink partial_sink; 517 SnapshotByteSink partial_sink;
508 PartialSerializer partial_serializer(isolate, &startup_serializer, nullptr); 518 PartialSerializer partial_serializer(isolate, &startup_serializer,
519 v8::SerializeInternalFieldsCallback());
509 partial_serializer.Serialize(&raw_context, false); 520 partial_serializer.Serialize(&raw_context, false);
510 startup_serializer.SerializeWeakReferencesAndDeferred(); 521 startup_serializer.SerializeWeakReferencesAndDeferred();
511 522
512 SnapshotData startup_snapshot(&startup_serializer); 523 SnapshotData startup_snapshot(&startup_serializer);
513 SnapshotData partial_snapshot(&partial_serializer); 524 SnapshotData partial_snapshot(&partial_serializer);
514 525
515 *partial_blob_out = WritePayload(partial_snapshot.RawData()); 526 *partial_blob_out = WritePayload(partial_snapshot.RawData());
516 *startup_blob_out = WritePayload(startup_snapshot.RawData()); 527 *startup_blob_out = WritePayload(startup_snapshot.RawData());
517 } 528 }
518 v8_isolate->Dispose(); 529 v8_isolate->Dispose();
(...skipping 13 matching lines...) Expand all
532 543
533 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 544 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
534 HandleScope handle_scope(isolate); 545 HandleScope handle_scope(isolate);
535 Handle<Object> root; 546 Handle<Object> root;
536 Handle<JSGlobalProxy> global_proxy = 547 Handle<JSGlobalProxy> global_proxy =
537 isolate->factory()->NewUninitializedJSGlobalProxy( 548 isolate->factory()->NewUninitializedJSGlobalProxy(
538 JSGlobalProxy::SizeWithInternalFields(0)); 549 JSGlobalProxy::SizeWithInternalFields(0));
539 { 550 {
540 SnapshotData snapshot_data(partial_blob); 551 SnapshotData snapshot_data(partial_blob);
541 Deserializer deserializer(&snapshot_data); 552 Deserializer deserializer(&snapshot_data);
542 root = deserializer.DeserializePartial(isolate, global_proxy, nullptr) 553 root = deserializer
554 .DeserializePartial(isolate, global_proxy,
555 v8::DeserializeInternalFieldsCallback())
543 .ToHandleChecked(); 556 .ToHandleChecked();
544 CHECK(root->IsContext()); 557 CHECK(root->IsContext());
545 Handle<Context> context = Handle<Context>::cast(root); 558 Handle<Context> context = Handle<Context>::cast(root);
546 559
547 // Add context to the weak native context list 560 // Add context to the weak native context list
548 context->set(Context::NEXT_CONTEXT_LINK, 561 context->set(Context::NEXT_CONTEXT_LINK,
549 isolate->heap()->native_contexts_list(), 562 isolate->heap()->native_contexts_list(),
550 UPDATE_WEAK_WRITE_BARRIER); 563 UPDATE_WEAK_WRITE_BARRIER);
551 isolate->heap()->set_native_contexts_list(*context); 564 isolate->heap()->set_native_contexts_list(*context);
552 565
(...skipping 1601 matching lines...) Expand 10 before | Expand all | Expand 10 after
2154 v8::StartupData blob = 2167 v8::StartupData blob =
2155 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); 2168 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear);
2156 2169
2157 delete[] blob.data; 2170 delete[] blob.data;
2158 } 2171 }
2159 2172
2160 struct InternalFieldData { 2173 struct InternalFieldData {
2161 uint32_t data; 2174 uint32_t data;
2162 }; 2175 };
2163 2176
2164 v8::StartupData SerializeInternalFields(v8::Local<v8::Object> holder, 2177 v8::StartupData SerializeInternalFields(v8::Local<v8::Object> holder, int index,
2165 int index) { 2178 void* data) {
2166 InternalFieldData* data = static_cast<InternalFieldData*>( 2179 CHECK_EQ(reinterpret_cast<void*>(2016), data);
2180 InternalFieldData* internal_field = static_cast<InternalFieldData*>(
2167 holder->GetAlignedPointerFromInternalField(index)); 2181 holder->GetAlignedPointerFromInternalField(index));
2168 int size = sizeof(*data); 2182 int size = sizeof(*internal_field);
2169 char* payload = new char[size]; 2183 char* payload = new char[size];
2170 // We simply use memcpy to serialize the content. 2184 // We simply use memcpy to serialize the content.
2171 memcpy(payload, data, size); 2185 memcpy(payload, internal_field, size);
2172 return {payload, size}; 2186 return {payload, size};
2173 } 2187 }
2174 2188
2175 std::vector<InternalFieldData*> deserialized_data; 2189 std::vector<InternalFieldData*> deserialized_data;
2176 2190
2177 void DeserializeInternalFields(v8::Local<v8::Object> holder, int index, 2191 void DeserializeInternalFields(v8::Local<v8::Object> holder, int index,
2178 v8::StartupData payload) { 2192 v8::StartupData payload, void* data) {
2179 InternalFieldData* data = new InternalFieldData{0}; 2193 CHECK_EQ(reinterpret_cast<void*>(2017), data);
2180 memcpy(data, payload.data, payload.raw_size); 2194 InternalFieldData* internal_field = new InternalFieldData{0};
2181 holder->SetAlignedPointerInInternalField(index, data); 2195 memcpy(internal_field, payload.data, payload.raw_size);
2182 deserialized_data.push_back(data); 2196 holder->SetAlignedPointerInInternalField(index, internal_field);
2197 deserialized_data.push_back(internal_field);
2183 } 2198 }
2184 2199
2185 TEST(SnapshotCreatorTemplates) { 2200 TEST(SnapshotCreatorTemplates) {
2186 DisableAlwaysOpt(); 2201 DisableAlwaysOpt();
2187 v8::StartupData blob; 2202 v8::StartupData blob;
2188 2203
2189 { 2204 {
2190 InternalFieldData* a1 = new InternalFieldData{11}; 2205 InternalFieldData* a1 = new InternalFieldData{11};
2191 InternalFieldData* b0 = new InternalFieldData{20}; 2206 InternalFieldData* b0 = new InternalFieldData{20};
2192 InternalFieldData* c0 = new InternalFieldData{30}; 2207 InternalFieldData* c0 = new InternalFieldData{30};
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2224 v8::External::New(isolate, &serialized_static_field); 2239 v8::External::New(isolate, &serialized_static_field);
2225 a->SetInternalField(0, b); 2240 a->SetInternalField(0, b);
2226 a->SetAlignedPointerInInternalField(1, a1); 2241 a->SetAlignedPointerInInternalField(1, a1);
2227 b->SetAlignedPointerInInternalField(0, b0); 2242 b->SetAlignedPointerInInternalField(0, b0);
2228 b->SetInternalField(1, c); 2243 b->SetInternalField(1, c);
2229 c->SetAlignedPointerInInternalField(0, c0); 2244 c->SetAlignedPointerInInternalField(0, c0);
2230 c->SetInternalField(1, null_external); 2245 c->SetInternalField(1, null_external);
2231 c->SetInternalField(2, field_external); 2246 c->SetInternalField(2, field_external);
2232 CHECK(context->Global()->Set(context, v8_str("a"), a).FromJust()); 2247 CHECK(context->Global()->Set(context, v8_str("a"), a).FromJust());
2233 2248
2234 CHECK_EQ(0u, creator.AddContext(context, SerializeInternalFields)); 2249 CHECK_EQ(0u,
2250 creator.AddContext(context, v8::SerializeInternalFieldsCallback(
2251 SerializeInternalFields,
2252 reinterpret_cast<void*>(2016))));
2235 CHECK_EQ(0u, creator.AddTemplate(callback)); 2253 CHECK_EQ(0u, creator.AddTemplate(callback));
2236 CHECK_EQ(1u, creator.AddTemplate(global_template)); 2254 CHECK_EQ(1u, creator.AddTemplate(global_template));
2237 } 2255 }
2238 blob = 2256 blob =
2239 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); 2257 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear);
2240 2258
2241 delete a1; 2259 delete a1;
2242 delete b0; 2260 delete b0;
2243 delete c0; 2261 delete c0;
2244 } 2262 }
2245 2263
2246 { 2264 {
2247 v8::Isolate::CreateParams params; 2265 v8::Isolate::CreateParams params;
2248 params.snapshot_blob = &blob; 2266 params.snapshot_blob = &blob;
2249 params.array_buffer_allocator = CcTest::array_buffer_allocator(); 2267 params.array_buffer_allocator = CcTest::array_buffer_allocator();
2250 params.external_references = original_external_references; 2268 params.external_references = original_external_references;
2251 v8::Isolate* isolate = v8::Isolate::New(params); 2269 v8::Isolate* isolate = v8::Isolate::New(params);
2252 { 2270 {
2253 v8::Isolate::Scope isolate_scope(isolate); 2271 v8::Isolate::Scope isolate_scope(isolate);
2254 { 2272 {
2255 // Create a new context without a new object template. 2273 // Create a new context without a new object template.
2256 v8::HandleScope handle_scope(isolate); 2274 v8::HandleScope handle_scope(isolate);
2257 v8::Local<v8::Context> context = 2275 v8::Local<v8::Context> context =
2258 v8::Context::FromSnapshot(isolate, 0, DeserializeInternalFields) 2276 v8::Context::FromSnapshot(
2277 isolate, 0,
2278 v8::DeserializeInternalFieldsCallback(
2279 DeserializeInternalFields, reinterpret_cast<void*>(2017)))
2259 .ToLocalChecked(); 2280 .ToLocalChecked();
2260 v8::Context::Scope context_scope(context); 2281 v8::Context::Scope context_scope(context);
2261 ExpectInt32("f()", 42); 2282 ExpectInt32("f()", 42);
2262 2283
2263 // Retrieve the snapshotted object template. 2284 // Retrieve the snapshotted object template.
2264 v8::Local<v8::ObjectTemplate> obj_template = 2285 v8::Local<v8::ObjectTemplate> obj_template =
2265 v8::ObjectTemplate::FromSnapshot(isolate, 1).ToLocalChecked(); 2286 v8::ObjectTemplate::FromSnapshot(isolate, 1).ToLocalChecked();
2266 CHECK(!obj_template.IsEmpty()); 2287 CHECK(!obj_template.IsEmpty());
2267 v8::Local<v8::Object> object = 2288 v8::Local<v8::Object> object =
2268 obj_template->NewInstance(context).ToLocalChecked(); 2289 obj_template->NewInstance(context).ToLocalChecked();
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2401 ExpectInt32("h()", 13); 2422 ExpectInt32("h()", 13);
2402 ExpectInt32("o.p", 7); 2423 ExpectInt32("o.p", 7);
2403 ExpectInt32("x", 2016); 2424 ExpectInt32("x", 2016);
2404 ExpectInt32("y", 2017); 2425 ExpectInt32("y", 2017);
2405 CHECK(v8_str("hidden string") 2426 CHECK(v8_str("hidden string")
2406 ->Equals(context, context->Global() 2427 ->Equals(context, context->Global()
2407 ->GetPrivate(context, hidden) 2428 ->GetPrivate(context, hidden)
2408 .ToLocalChecked()) 2429 .ToLocalChecked())
2409 .FromJust()); 2430 .FromJust());
2410 2431
2411 CHECK_EQ(0u, creator.AddContext(context, SerializeInternalFields)); 2432 CHECK_EQ(0u,
2433 creator.AddContext(context, v8::SerializeInternalFieldsCallback(
2434 SerializeInternalFields,
2435 reinterpret_cast<void*>(2016))));
2412 } 2436 }
2413 blob = 2437 blob =
2414 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); 2438 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear);
2415 } 2439 }
2416 2440
2417 { 2441 {
2418 v8::Isolate::CreateParams params; 2442 v8::Isolate::CreateParams params;
2419 params.snapshot_blob = &blob; 2443 params.snapshot_blob = &blob;
2420 params.array_buffer_allocator = CcTest::array_buffer_allocator(); 2444 params.array_buffer_allocator = CcTest::array_buffer_allocator();
2421 params.external_references = original_external_references; 2445 params.external_references = original_external_references;
(...skipping 23 matching lines...) Expand all
2445 ExpectInt32("o.p", 8); 2469 ExpectInt32("o.p", 8);
2446 v8::TryCatch try_catch(isolate); 2470 v8::TryCatch try_catch(isolate);
2447 CHECK(CompileRun("x").IsEmpty()); 2471 CHECK(CompileRun("x").IsEmpty());
2448 CHECK(try_catch.HasCaught()); 2472 CHECK(try_catch.HasCaught());
2449 } 2473 }
2450 { 2474 {
2451 // Create a new context from first additional context snapshot. This 2475 // Create a new context from first additional context snapshot. This
2452 // will use the global object from the snapshot, including interceptor. 2476 // will use the global object from the snapshot, including interceptor.
2453 v8::HandleScope handle_scope(isolate); 2477 v8::HandleScope handle_scope(isolate);
2454 v8::Local<v8::Context> context = 2478 v8::Local<v8::Context> context =
2455 v8::Context::FromSnapshot(isolate, 0, DeserializeInternalFields) 2479 v8::Context::FromSnapshot(
2480 isolate, 0,
2481 v8::DeserializeInternalFieldsCallback(
2482 DeserializeInternalFields, reinterpret_cast<void*>(2017)))
2456 .ToLocalChecked(); 2483 .ToLocalChecked();
2484
2457 { 2485 {
2458 v8::Context::Scope context_scope(context); 2486 v8::Context::Scope context_scope(context);
2459 ExpectInt32("f()", 42); 2487 ExpectInt32("f()", 42);
2460 ExpectInt32("g()", 12); 2488 ExpectInt32("g()", 12);
2461 ExpectInt32("h()", 13); 2489 ExpectInt32("h()", 13);
2462 ExpectInt32("i()", 24); 2490 ExpectInt32("i()", 24);
2463 ExpectInt32("j()", 25); 2491 ExpectInt32("j()", 25);
2464 ExpectInt32("o.p", 8); 2492 ExpectInt32("o.p", 8);
2465 ExpectInt32("x", 2016); 2493 ExpectInt32("x", 2016);
2466 v8::Local<v8::Private> hidden = 2494 v8::Local<v8::Private> hidden =
2467 v8::Private::ForApi(isolate, v8_str("hidden")); 2495 v8::Private::ForApi(isolate, v8_str("hidden"));
2468 CHECK(v8_str("hidden string") 2496 CHECK(v8_str("hidden string")
2469 ->Equals(context, context->Global() 2497 ->Equals(context, context->Global()
2470 ->GetPrivate(context, hidden) 2498 ->GetPrivate(context, hidden)
2471 .ToLocalChecked()) 2499 .ToLocalChecked())
2472 .FromJust()); 2500 .FromJust());
2473 ExpectString("cached", "cached string"); 2501 ExpectString("cached", "cached string");
2474 } 2502 }
2475 2503
2476 v8::Local<v8::Object> global = context->Global(); 2504 v8::Local<v8::Object> global = context->Global();
2477 CHECK_EQ(3, global->InternalFieldCount()); 2505 CHECK_EQ(3, global->InternalFieldCount());
2478 context->DetachGlobal(); 2506 context->DetachGlobal();
2479 2507
2480 // New context, but reuse global proxy. 2508 // New context, but reuse global proxy.
2481 v8::ExtensionConfiguration* no_extensions = nullptr; 2509 v8::ExtensionConfiguration* no_extensions = nullptr;
2482 v8::Local<v8::Context> context2 = 2510 v8::Local<v8::Context> context2 =
2483 v8::Context::FromSnapshot(isolate, 0, DeserializeInternalFields, 2511 v8::Context::FromSnapshot(
2484 no_extensions, global) 2512 isolate, 0,
2513 v8::DeserializeInternalFieldsCallback(
2514 DeserializeInternalFields, reinterpret_cast<void*>(2017)),
2515 no_extensions, global)
2485 .ToLocalChecked(); 2516 .ToLocalChecked();
2486 { 2517 {
2487 v8::Context::Scope context_scope(context2); 2518 v8::Context::Scope context_scope(context2);
2488 ExpectInt32("f()", 42); 2519 ExpectInt32("f()", 42);
2489 ExpectInt32("g()", 12); 2520 ExpectInt32("g()", 12);
2490 ExpectInt32("h()", 13); 2521 ExpectInt32("h()", 13);
2491 ExpectInt32("i()", 24); 2522 ExpectInt32("i()", 24);
2492 ExpectInt32("j()", 25); 2523 ExpectInt32("j()", 25);
2493 ExpectInt32("o.p", 8); 2524 ExpectInt32("o.p", 8);
2494 ExpectInt32("x", 2016); 2525 ExpectInt32("x", 2016);
(...skipping 21 matching lines...) Expand all
2516 } 2547 }
2517 delete[] blob.data; 2548 delete[] blob.data;
2518 } 2549 }
2519 2550
2520 TEST(SerializationMemoryStats) { 2551 TEST(SerializationMemoryStats) {
2521 FLAG_profile_deserialization = true; 2552 FLAG_profile_deserialization = true;
2522 FLAG_always_opt = false; 2553 FLAG_always_opt = false;
2523 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); 2554 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob();
2524 delete[] blob.data; 2555 delete[] blob.data;
2525 } 2556 }
OLDNEW
« no previous file with comments | « src/snapshot/partial-serializer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698