| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
| 6 #include "vm/isolate.h" | 6 #include "vm/isolate.h" |
| 7 #include "vm/lockers.h" | 7 #include "vm/lockers.h" |
| 8 #include "vm/unit_test.h" | 8 #include "vm/unit_test.h" |
| 9 #include "vm/profiler.h" | 9 #include "vm/profiler.h" |
| 10 #include "vm/thread_pool.h" | 10 #include "vm/thread_pool.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 a0->Add(true); | 124 a0->Add(true); |
| 125 a1.Add(true); | 125 a1.Add(true); |
| 126 } | 126 } |
| 127 // Check that we can create handles and allocate in old space. | 127 // Check that we can create handles and allocate in old space. |
| 128 String& str = String::Handle(zone, String::New("old", Heap::kOld)); | 128 String& str = String::Handle(zone, String::New("old", Heap::kOld)); |
| 129 EXPECT(str.Equals("old")); | 129 EXPECT(str.Equals("old")); |
| 130 | 130 |
| 131 const intptr_t unique_smi = id_ + 928327281; | 131 const intptr_t unique_smi = id_ + 928327281; |
| 132 Smi& smi = Smi::Handle(zone, Smi::New(unique_smi)); | 132 Smi& smi = Smi::Handle(zone, Smi::New(unique_smi)); |
| 133 EXPECT(smi.Value() == unique_smi); | 133 EXPECT(smi.Value() == unique_smi); |
| 134 ObjectCounter counter(isolate_, &smi); | 134 { |
| 135 // Ensure that our particular zone is visited. | 135 ObjectCounter counter(isolate_, &smi); |
| 136 isolate_->IterateObjectPointers(&counter, | 136 // Ensure that our particular zone is visited. |
| 137 /* visit_prologue_weak_handles = */ true, | 137 isolate_->IterateObjectPointers( |
| 138 /* validate_frames = */ true); | 138 &counter, |
| 139 EXPECT_EQ(1, counter.count()); | 139 /* visit_prologue_weak_handles = */ true, |
| 140 | 140 StackFrameIterator::kValidateFrames); |
| 141 EXPECT_EQ(1, counter.count()); |
| 142 } |
| 141 char* unique_chars = zone->PrintToString("unique_str_%" Pd, id_); | 143 char* unique_chars = zone->PrintToString("unique_str_%" Pd, id_); |
| 142 String& unique_str = String::Handle(zone); | 144 String& unique_str = String::Handle(zone); |
| 143 { | 145 { |
| 144 // String::New may create additional handles in the topmost scope that | 146 // String::New may create additional handles in the topmost scope that |
| 145 // we don't want to count, so wrap this in its own scope. | 147 // we don't want to count, so wrap this in its own scope. |
| 146 HANDLESCOPE(thread); | 148 HANDLESCOPE(thread); |
| 147 unique_str = String::New(unique_chars, Heap::kOld); | 149 unique_str = String::New(unique_chars, Heap::kOld); |
| 148 } | 150 } |
| 149 EXPECT(unique_str.Equals(unique_chars)); | 151 EXPECT(unique_str.Equals(unique_chars)); |
| 150 ObjectCounter str_counter(isolate_, &unique_str); | 152 { |
| 151 // Ensure that our particular zone is visited. | 153 ObjectCounter str_counter(isolate_, &unique_str); |
| 152 // TODO(koda): Remove "->thread_registry()" after updating stack walker. | 154 // Ensure that our particular zone is visited. |
| 153 isolate_->thread_registry()->VisitObjectPointers(&str_counter); | 155 isolate_->IterateObjectPointers( |
| 154 // We should visit the string object exactly once. | 156 &str_counter, |
| 155 EXPECT_EQ(1, str_counter.count()); | 157 /* visit_prologue_weak_handles = */ true, |
| 158 StackFrameIterator::kValidateFrames); |
| 159 // We should visit the string object exactly once. |
| 160 EXPECT_EQ(1, str_counter.count()); |
| 161 } |
| 156 } | 162 } |
| 157 Thread::ExitIsolateAsHelper(); | 163 Thread::ExitIsolateAsHelper(); |
| 158 { | 164 { |
| 159 MonitorLocker ml(monitor_); | 165 MonitorLocker ml(monitor_); |
| 160 *done_ = true; | 166 *done_ = true; |
| 161 ml.Notify(); | 167 ml.Notify(); |
| 162 } | 168 } |
| 163 } | 169 } |
| 164 | 170 |
| 165 private: | 171 private: |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 HANDLESCOPE(thread); | 272 HANDLESCOPE(thread); |
| 267 const intptr_t kUniqueSmi = 928327281; | 273 const intptr_t kUniqueSmi = 928327281; |
| 268 Smi& smi = Smi::Handle(zone, Smi::New(kUniqueSmi)); | 274 Smi& smi = Smi::Handle(zone, Smi::New(kUniqueSmi)); |
| 269 if ((i % 100) != 0) { | 275 if ((i % 100) != 0) { |
| 270 // Usually, we just cooperate. | 276 // Usually, we just cooperate. |
| 271 isolate_->thread_registry()->CheckSafepoint(); | 277 isolate_->thread_registry()->CheckSafepoint(); |
| 272 } else { | 278 } else { |
| 273 // But occasionally, organize a rendezvous. | 279 // But occasionally, organize a rendezvous. |
| 274 isolate_->thread_registry()->SafepointThreads(); | 280 isolate_->thread_registry()->SafepointThreads(); |
| 275 ObjectCounter counter(isolate_, &smi); | 281 ObjectCounter counter(isolate_, &smi); |
| 276 isolate_->thread_registry()->VisitObjectPointers(&counter); | 282 isolate_->IterateObjectPointers( |
| 283 &counter, |
| 284 /* visit_prologue_weak_handles = */ true, |
| 285 StackFrameIterator::kValidateFrames); |
| 277 { | 286 { |
| 278 MutexLocker ml(mutex_); | 287 MutexLocker ml(mutex_); |
| 279 EXPECT_EQ(*expected_count_, counter.count()); | 288 EXPECT_EQ(*expected_count_, counter.count()); |
| 280 } | 289 } |
| 281 UserTag& tag = UserTag::Handle(zone, isolate_->current_tag()); | 290 UserTag& tag = UserTag::Handle(zone, isolate_->current_tag()); |
| 282 if (tag.raw() != isolate_->default_tag()) { | 291 if (tag.raw() != isolate_->default_tag()) { |
| 283 String& label = String::Handle(zone, tag.label()); | 292 String& label = String::Handle(zone, tag.label()); |
| 284 EXPECT(label.Equals("foo")); | 293 EXPECT(label.Equals("foo")); |
| 285 MutexLocker ml(mutex_); | 294 MutexLocker ml(mutex_); |
| 286 if (*expected_count_ == kTaskCount && !local_done_) { | 295 if (*expected_count_ == kTaskCount && !local_done_) { |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 while (true) { | 442 while (true) { |
| 434 isolate->thread_registry()->CheckSafepoint(); | 443 isolate->thread_registry()->CheckSafepoint(); |
| 435 MutexLocker ml(&mutex); | 444 MutexLocker ml(&mutex); |
| 436 if (exited == SafepointTestTask::kTaskCount) { | 445 if (exited == SafepointTestTask::kTaskCount) { |
| 437 break; | 446 break; |
| 438 } | 447 } |
| 439 } | 448 } |
| 440 } | 449 } |
| 441 | 450 |
| 442 } // namespace dart | 451 } // namespace dart |
| OLD | NEW |