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

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

Issue 2582333002: [serializer] fix leak in test. (Closed)
Patch Set: Created 4 years 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 | « no previous file | 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 2154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2165 int index) { 2165 int index) {
2166 InternalFieldData* data = static_cast<InternalFieldData*>( 2166 InternalFieldData* data = static_cast<InternalFieldData*>(
2167 holder->GetAlignedPointerFromInternalField(index)); 2167 holder->GetAlignedPointerFromInternalField(index));
2168 int size = sizeof(*data); 2168 int size = sizeof(*data);
2169 char* payload = new char[size]; 2169 char* payload = new char[size];
2170 // We simply use memcpy to serialize the content. 2170 // We simply use memcpy to serialize the content.
2171 memcpy(payload, data, size); 2171 memcpy(payload, data, size);
2172 return {payload, size}; 2172 return {payload, size};
2173 } 2173 }
2174 2174
2175 std::vector<InternalFieldData*> deserialized_data;
2176
2175 void DeserializeInternalFields(v8::Local<v8::Object> holder, int index, 2177 void DeserializeInternalFields(v8::Local<v8::Object> holder, int index,
2176 v8::StartupData payload) { 2178 v8::StartupData payload) {
2177 InternalFieldData* data = new InternalFieldData{0}; 2179 InternalFieldData* data = new InternalFieldData{0};
2178 memcpy(data, payload.data, payload.raw_size); 2180 memcpy(data, payload.data, payload.raw_size);
2179 holder->SetAlignedPointerInInternalField(index, data); 2181 holder->SetAlignedPointerInInternalField(index, data);
2182 deserialized_data.push_back(data);
2180 } 2183 }
2181 2184
2182 TEST(SnapshotCreatorTemplates) { 2185 TEST(SnapshotCreatorTemplates) {
2183 DisableAlwaysOpt(); 2186 DisableAlwaysOpt();
2184 v8::StartupData blob; 2187 v8::StartupData blob;
2185 2188
2186 { 2189 {
2187 InternalFieldData* a1 = new InternalFieldData{11}; 2190 InternalFieldData* a1 = new InternalFieldData{11};
2188 InternalFieldData* b0 = new InternalFieldData{20}; 2191 InternalFieldData* b0 = new InternalFieldData{20};
2189 InternalFieldData* c0 = new InternalFieldData{30}; 2192 InternalFieldData* c0 = new InternalFieldData{30};
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
2307 CHECK(c1->IsExternal()); 2310 CHECK(c1->IsExternal());
2308 CHECK_NULL(v8::Local<v8::External>::Cast(c1)->Value()); 2311 CHECK_NULL(v8::Local<v8::External>::Cast(c1)->Value());
2309 CHECK_EQ(static_cast<void*>(&serialized_static_field), 2312 CHECK_EQ(static_cast<void*>(&serialized_static_field),
2310 v8::Local<v8::External>::Cast(c2)->Value()); 2313 v8::Local<v8::External>::Cast(c2)->Value());
2311 2314
2312 // Accessing out of bound returns empty MaybeHandle. 2315 // Accessing out of bound returns empty MaybeHandle.
2313 CHECK(v8::ObjectTemplate::FromSnapshot(isolate, 2).IsEmpty()); 2316 CHECK(v8::ObjectTemplate::FromSnapshot(isolate, 2).IsEmpty());
2314 CHECK(v8::FunctionTemplate::FromSnapshot(isolate, 2).IsEmpty()); 2317 CHECK(v8::FunctionTemplate::FromSnapshot(isolate, 2).IsEmpty());
2315 CHECK(v8::Context::FromSnapshot(isolate, 1).IsEmpty()); 2318 CHECK(v8::Context::FromSnapshot(isolate, 1).IsEmpty());
2316 2319
2317 delete a1; 2320 for (auto data : deserialized_data) delete data;
2318 delete b0; 2321 deserialized_data.clear();
2319 delete c0;
2320 } 2322 }
2321 2323
2322 { 2324 {
2323 // Create a context with a new object template. It is merged into the 2325 // Create a context with a new object template. It is merged into the
2324 // deserialized global object. 2326 // deserialized global object.
2325 v8::HandleScope handle_scope(isolate); 2327 v8::HandleScope handle_scope(isolate);
2326 v8::ExtensionConfiguration* no_extension = nullptr; 2328 v8::ExtensionConfiguration* no_extension = nullptr;
2327 v8::Local<v8::ObjectTemplate> global_template = 2329 v8::Local<v8::ObjectTemplate> global_template =
2328 v8::ObjectTemplate::New(isolate); 2330 v8::ObjectTemplate::New(isolate);
2329 global_template->Set( 2331 global_template->Set(
2330 v8_str("g"), 2332 v8_str("g"),
2331 v8::FunctionTemplate::New(isolate, SerializedCallbackReplacement)); 2333 v8::FunctionTemplate::New(isolate, SerializedCallbackReplacement));
2332 v8::Local<v8::Context> context = 2334 v8::Local<v8::Context> context =
2333 v8::Context::New(isolate, no_extension, global_template); 2335 v8::Context::New(isolate, no_extension, global_template);
2334 v8::Context::Scope context_scope(context); 2336 v8::Context::Scope context_scope(context);
2335 ExpectInt32("g()", 1337); 2337 ExpectInt32("g()", 1337);
2336 ExpectInt32("f()", 42); 2338 ExpectInt32("f()", 42);
2339
2340 for (auto data : deserialized_data) delete data;
2341 deserialized_data.clear();
2337 } 2342 }
2338 } 2343 }
2339 isolate->Dispose(); 2344 isolate->Dispose();
2340 } 2345 }
2341 delete[] blob.data; 2346 delete[] blob.data;
2342 } 2347 }
2343 2348
2344 TEST(SnapshotCreatorIncludeGlobalProxy) { 2349 TEST(SnapshotCreatorIncludeGlobalProxy) {
2345 DisableAlwaysOpt(); 2350 DisableAlwaysOpt();
2346 v8::StartupData blob; 2351 v8::StartupData blob;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
2527 } 2532 }
2528 delete[] blob.data; 2533 delete[] blob.data;
2529 } 2534 }
2530 2535
2531 TEST(SerializationMemoryStats) { 2536 TEST(SerializationMemoryStats) {
2532 FLAG_profile_deserialization = true; 2537 FLAG_profile_deserialization = true;
2533 FLAG_always_opt = false; 2538 FLAG_always_opt = false;
2534 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); 2539 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob();
2535 delete[] blob.data; 2540 delete[] blob.data;
2536 } 2541 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698