| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent acd087d commit 2a5f67b
6 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -784,8 +784,12 @@ inline bool Environment::has_run_bootstrapping_code() const { | |||
| 784 | 784 | return has_run_bootstrapping_code_; | |
| 785 | 785 | } | |
| 786 | 786 | ||
| 787 | - inline void Environment::set_has_run_bootstrapping_code(bool value) { | ||
| 788 | - has_run_bootstrapping_code_ = value; | ||
| 787 | + inline void Environment::DoneBootstrapping() { | ||
| 788 | + has_run_bootstrapping_code_ = true; | ||
| 789 | + // This adjusts the return value of base_object_created_after_bootstrap() so | ||
| 790 | + // that tests that check the count do not have to account for internally | ||
| 791 | + // created BaseObjects. | ||
| 792 | + base_object_created_by_bootstrap_ = base_object_count_; | ||
| 789 | 793 | } | |
| 790 | 794 | ||
| 791 | 795 | inline bool Environment::has_serialized_options() const { | |
@@ -1089,8 +1093,12 @@ void Environment::modify_base_object_count(int64_t delta) { | |||
| 1089 | 1093 | base_object_count_ += delta; | |
| 1090 | 1094 | } | |
| 1091 | 1095 | ||
| 1096 | + int64_t Environment::base_object_created_after_bootstrap() const { | ||
| 1097 | + return base_object_count_ - base_object_created_by_bootstrap_; | ||
| 1098 | + } | ||
| 1099 | + | ||
| 1092 | 1100 | int64_t Environment::base_object_count() const { | |
| 1093 | - return base_object_count_ - initial_base_object_count_; | ||
| 1101 | + return base_object_count_; | ||
| 1094 | 1102 | } | |
| 1095 | 1103 | ||
| 1096 | 1104 | void Environment::set_main_utf16(std::unique_ptr<v8::String::Value> str) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -422,10 +422,6 @@ Environment::Environment(IsolateData* isolate_data, | |||
| 422 | 422 | "args", | |
| 423 | 423 | std::move(traced_value)); | |
| 424 | 424 | } | |
| 425 | - | ||
| 426 | - // This adjusts the return value of base_object_count() so that tests that | ||
| 427 | - // check the count do not have to account for internally created BaseObjects. | ||
| 428 | - initial_base_object_count_ = base_object_count(); | ||
| 429 | 425 | } | |
| 430 | 426 | ||
| 431 | 427 | Environment::Environment(IsolateData* isolate_data, | |
@@ -468,10 +464,6 @@ void Environment::InitializeMainContext(Local<Context> context, | |||
| 468 | 464 | per_process::node_start_time); | |
| 469 | 465 | performance_state_->Mark(performance::NODE_PERFORMANCE_MILESTONE_V8_START, | |
| 470 | 466 | performance::performance_v8_start); | |
| 471 | - | ||
| 472 | - // This adjusts the return value of base_object_count() so that tests that | ||
| 473 | - // check the count do not have to account for internally created BaseObjects. | ||
| 474 | - initial_base_object_count_ = base_object_count(); | ||
| 475 | 467 | } | |
| 476 | 468 | ||
| 477 | 469 | Environment::~Environment() { | |
@@ -662,7 +654,6 @@ void Environment::RunCleanup() { | |||
| 662 | 654 | TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), | |
| 663 | 655 | "RunCleanup", this); | |
| 664 | 656 | bindings_.clear(); | |
| 665 | - initial_base_object_count_ = 0; | ||
| 666 | 657 | CleanupHandles(); | |
| 667 | 658 | ||
| 668 | 659 | while (!cleanup_hooks_.empty() || | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1132,7 +1132,7 @@ class Environment : public MemoryRetainer { | |||
| 1132 | 1132 | inline void add_refs(int64_t diff); | |
| 1133 | 1133 | ||
| 1134 | 1134 | inline bool has_run_bootstrapping_code() const; | |
| 1135 | - inline void set_has_run_bootstrapping_code(bool has_run_bootstrapping_code); | ||
| 1135 | + inline void DoneBootstrapping(); | ||
| 1136 | 1136 | ||
| 1137 | 1137 | inline bool has_serialized_options() const; | |
| 1138 | 1138 | inline void set_has_serialized_options(bool has_serialized_options); | |
@@ -1318,6 +1318,7 @@ class Environment : public MemoryRetainer { | |||
| 1318 | 1318 | // no memory leaks caused by BaseObjects staying alive longer than expected | |
| 1319 | 1319 | // (in particular, no circular BaseObjectPtr references). | |
| 1320 | 1320 | inline void modify_base_object_count(int64_t delta); | |
| 1321 | + inline int64_t base_object_created_after_bootstrap() const; | ||
| 1321 | 1322 | inline int64_t base_object_count() const; | |
| 1322 | 1323 | ||
| 1323 | 1324 | inline int32_t stack_trace_limit() const { return 10; } | |
@@ -1511,7 +1512,7 @@ class Environment : public MemoryRetainer { | |||
| 1511 | 1512 | bool started_cleanup_ = false; | |
| 1512 | 1513 | ||
| 1513 | 1514 | int64_t base_object_count_ = 0; | |
| 1514 | - int64_t initial_base_object_count_ = 0; | ||
| 1515 | + int64_t base_object_created_by_bootstrap_ = 0; | ||
| 1515 | 1516 | std::atomic_bool is_stopping_ { false }; | |
| 1516 | 1517 | ||
| 1517 | 1518 | std::unordered_set<int> unmanaged_fds_; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -415,7 +415,7 @@ MaybeLocal<Value> Environment::RunBootstrapping() { | |||
| 415 | 415 | CHECK(req_wrap_queue()->IsEmpty()); | |
| 416 | 416 | CHECK(handle_wrap_queue()->IsEmpty()); | |
| 417 | 417 | ||
| 418 | - set_has_run_bootstrapping_code(true); | ||
| 418 | + DoneBootstrapping(); | ||
| 419 | 419 | ||
| 420 | 420 | return scope.Escape(result); | |
| 421 | 421 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -209,10 +209,18 @@ NodeMainInstance::CreateMainEnvironment(int* exit_code, | |||
| 209 | 209 | {DeserializeNodeInternalFields, env.get()}) | |
| 210 | 210 | .ToLocalChecked(); | |
| 211 | 211 | ||
| 212 | + CHECK(!context.IsEmpty()); | ||
| 213 | + Context::Scope context_scope(context); | ||
| 212 | 214 | InitializeContextRuntime(context); | |
| 213 | 215 | SetIsolateErrorHandlers(isolate_, {}); | |
| 216 | + env->InitializeMainContext(context, env_info); | ||
| 217 | + #if HAVE_INSPECTOR | ||
| 218 | + env->InitializeInspector({}); | ||
| 219 | + #endif | ||
| 220 | + env->DoneBootstrapping(); | ||
| 214 | 221 | } else { | |
| 215 | 222 | context = NewContext(isolate_); | |
| 223 | + CHECK(!context.IsEmpty()); | ||
| 216 | 224 | Context::Scope context_scope(context); | |
| 217 | 225 | env.reset(new Environment(isolate_data_.get(), | |
| 218 | 226 | context, | |
@@ -221,24 +229,16 @@ NodeMainInstance::CreateMainEnvironment(int* exit_code, | |||
| 221 | 229 | nullptr, | |
| 222 | 230 | EnvironmentFlags::kDefaultFlags, | |
| 223 | 231 | {})); | |
| 224 | - } | ||
| 225 | - | ||
| 226 | - CHECK(!context.IsEmpty()); | ||
| 227 | - Context::Scope context_scope(context); | ||
| 228 | - | ||
| 229 | - env->InitializeMainContext(context, env_info); | ||
| 230 | - | ||
| 231 | 232 | #if HAVE_INSPECTOR | |
| 232 | - env->InitializeInspector({}); | ||
| 233 | + env->InitializeInspector({}); | ||
| 233 | 234 | #endif | |
| 234 | - | ||
| 235 | - if (!deserialize_mode_ && env->RunBootstrapping().IsEmpty()) { | ||
| 236 | - return nullptr; | ||
| 235 | + if (env->RunBootstrapping().IsEmpty()) { | ||
| 236 | + return nullptr; | ||
| 237 | + } | ||
| 237 | 238 | } | |
| 238 | 239 | ||
| 239 | 240 | CHECK(env->req_wrap_queue()->IsEmpty()); | |
| 240 | 241 | CHECK(env->handle_wrap_queue()->IsEmpty()); | |
| 241 | - env->set_has_run_bootstrapping_code(true); | ||
| 242 | 242 | return env; | |
| 243 | 243 | } | |
| 244 | 244 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -14,10 +14,6 @@ using v8::Isolate; | |||
| 14 | 14 | using v8::Local; | |
| 15 | 15 | using v8::Object; | |
| 16 | 16 | ||
| 17 | - // Environments may come with existing BaseObject instances. | ||
| 18 | - // This variable offsets the expected BaseObject counts. | ||
| 19 | - static const int BASE_OBJECT_COUNT = 0; | ||
| 20 | - | ||
| 21 | 17 | class BaseObjectPtrTest : public EnvironmentTestFixture {}; | |
| 22 | 18 | ||
| 23 | 19 | class DummyBaseObject : public BaseObject { | |
@@ -51,12 +47,12 @@ TEST_F(BaseObjectPtrTest, ScopedDetached) { | |||
| 51 | 47 | Env env_{handle_scope, argv}; | |
| 52 | 48 | Environment* env = *env_; | |
| 53 | 49 | ||
| 54 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT); | ||
| 50 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 0); | ||
| 55 | 51 | { | |
| 56 | 52 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::NewDetached(env); | |
| 57 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 1); | ||
| 53 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 1); | ||
| 58 | 54 | } | |
| 59 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT); | ||
| 55 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 0); | ||
| 60 | 56 | } | |
| 61 | 57 | ||
| 62 | 58 | TEST_F(BaseObjectPtrTest, ScopedDetachedWithWeak) { | |
@@ -67,14 +63,14 @@ TEST_F(BaseObjectPtrTest, ScopedDetachedWithWeak) { | |||
| 67 | 63 | ||
| 68 | 64 | BaseObjectWeakPtr<DummyBaseObject> weak_ptr; | |
| 69 | 65 | ||
| 70 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT); | ||
| 66 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 0); | ||
| 71 | 67 | { | |
| 72 | 68 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::NewDetached(env); | |
| 73 | 69 | weak_ptr = ptr; | |
| 74 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 1); | ||
| 70 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 1); | ||
| 75 | 71 | } | |
| 76 | 72 | EXPECT_EQ(weak_ptr.get(), nullptr); | |
| 77 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT); | ||
| 73 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 0); | ||
| 78 | 74 | } | |
| 79 | 75 | ||
| 80 | 76 | TEST_F(BaseObjectPtrTest, Undetached) { | |
@@ -86,13 +82,12 @@ TEST_F(BaseObjectPtrTest, Undetached) { | |||
| 86 | 82 | node::AddEnvironmentCleanupHook( | |
| 87 | 83 | isolate_, | |
| 88 | 84 | [](void* arg) { | |
| 89 | - EXPECT_EQ(static_cast<Environment*>(arg)->base_object_count(), | ||
| 90 | - BASE_OBJECT_COUNT); | ||
| 85 | + EXPECT_EQ(static_cast<Environment*>(arg)->base_object_count(), 0); | ||
| 91 | 86 | }, | |
| 92 | 87 | env); | |
| 93 | 88 | ||
| 94 | 89 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::New(env); | |
| 95 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 1); | ||
| 90 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 1); | ||
| 96 | 91 | } | |
| 97 | 92 | ||
| 98 | 93 | TEST_F(BaseObjectPtrTest, GCWeak) { | |
@@ -109,21 +104,21 @@ TEST_F(BaseObjectPtrTest, GCWeak) { | |||
| 109 | 104 | weak_ptr = ptr; | |
| 110 | 105 | ptr->MakeWeak(); | |
| 111 | 106 | ||
| 112 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 1); | ||
| 107 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 1); | ||
| 113 | 108 | EXPECT_EQ(weak_ptr.get(), ptr.get()); | |
| 114 | 109 | EXPECT_EQ(weak_ptr->persistent().IsWeak(), false); | |
| 115 | 110 | ||
| 116 | 111 | ptr.reset(); | |
| 117 | 112 | } | |
| 118 | 113 | ||
| 119 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 1); | ||
| 114 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 1); | ||
| 120 | 115 | EXPECT_NE(weak_ptr.get(), nullptr); | |
| 121 | 116 | EXPECT_EQ(weak_ptr->persistent().IsWeak(), true); | |
| 122 | 117 | ||
| 123 | 118 | v8::V8::SetFlagsFromString("--expose-gc"); | |
| 124 | 119 | isolate_->RequestGarbageCollectionForTesting(Isolate::kFullGarbageCollection); | |
| 125 | 120 | ||
| 126 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT); | ||
| 121 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 0); | ||
| 127 | 122 | EXPECT_EQ(weak_ptr.get(), nullptr); | |
| 128 | 123 | } | |
| 129 | 124 | ||
@@ -134,7 +129,7 @@ TEST_F(BaseObjectPtrTest, Moveable) { | |||
| 134 | 129 | Environment* env = *env_; | |
| 135 | 130 | ||
| 136 | 131 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::NewDetached(env); | |
| 137 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 1); | ||
| 132 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 1); | ||
| 138 | 133 | BaseObjectWeakPtr<DummyBaseObject> weak_ptr { ptr }; | |
| 139 | 134 | EXPECT_EQ(weak_ptr.get(), ptr.get()); | |
| 140 | 135 | ||
@@ -145,12 +140,12 @@ TEST_F(BaseObjectPtrTest, Moveable) { | |||
| 145 | 140 | BaseObjectWeakPtr<DummyBaseObject> weak_ptr2 = std::move(weak_ptr); | |
| 146 | 141 | EXPECT_EQ(weak_ptr2.get(), ptr2.get()); | |
| 147 | 142 | EXPECT_EQ(weak_ptr.get(), nullptr); | |
| 148 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 1); | ||
| 143 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 1); | ||
| 149 | 144 | ||
| 150 | 145 | ptr2.reset(); | |
| 151 | 146 | ||
| 152 | 147 | EXPECT_EQ(weak_ptr2.get(), nullptr); | |
| 153 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT); | ||
| 148 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 0); | ||
| 154 | 149 | } | |
| 155 | 150 | ||
| 156 | 151 | TEST_F(BaseObjectPtrTest, NestedClasses) { | |
@@ -174,8 +169,7 @@ TEST_F(BaseObjectPtrTest, NestedClasses) { | |||
| 174 | 169 | node::AddEnvironmentCleanupHook( | |
| 175 | 170 | isolate_, | |
| 176 | 171 | [](void* arg) { | |
| 177 | - EXPECT_EQ(static_cast<Environment*>(arg)->base_object_count(), | ||
| 178 | - BASE_OBJECT_COUNT); | ||
| 172 | + EXPECT_EQ(static_cast<Environment*>(arg)->base_object_count(), 0); | ||
| 179 | 173 | }, | |
| 180 | 174 | env); | |
| 181 | 175 | ||
@@ -184,5 +178,5 @@ TEST_F(BaseObjectPtrTest, NestedClasses) { | |||
| 184 | 178 | obj->ptr1 = DummyBaseObject::NewDetached(env); | |
| 185 | 179 | obj->ptr2 = DummyBaseObject::New(env); | |
| 186 | 180 | ||
| 187 | - EXPECT_EQ(env->base_object_count(), BASE_OBJECT_COUNT + 3); | ||
| 181 | + EXPECT_EQ(env->base_object_created_after_bootstrap(), 3); | ||
| 188 | 182 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments