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

Side by Side Diff: runtime/vm/thread_test.cc

Issue 1263513002: VM: Load allocation-top and -end via Thread. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fixed cc tests Created 5 years, 4 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
OLDNEW
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"
11 #include "vm/thread_registry.h" 11 #include "vm/thread_registry.h"
12 12
13 namespace dart { 13 namespace dart {
14 14
15 UNIT_TEST_CASE(Mutex) { 15 UNIT_TEST_CASE(Mutex) {
16 // This unit test case needs a running isolate. 16 // This unit test case needs a running isolate.
17 Isolate::Flags vm_flags; 17 Dart_CreateIsolate(
18 Dart_IsolateFlags api_flags; 18 NULL, NULL, bin::isolate_snapshot_buffer, NULL, NULL, NULL);
19 vm_flags.CopyTo(&api_flags);
20 Isolate* isolate = Isolate::Init(NULL, api_flags);
21 19
22 Mutex* mutex = new Mutex(); 20 Mutex* mutex = new Mutex();
23 mutex->Lock(); 21 mutex->Lock();
24 EXPECT_EQ(false, mutex->TryLock()); 22 EXPECT_EQ(false, mutex->TryLock());
25 mutex->Unlock(); 23 mutex->Unlock();
26 EXPECT_EQ(true, mutex->TryLock()); 24 EXPECT_EQ(true, mutex->TryLock());
27 mutex->Unlock(); 25 mutex->Unlock();
28 { 26 {
29 MutexLocker ml(mutex); 27 MutexLocker ml(mutex);
30 EXPECT_EQ(false, mutex->TryLock()); 28 EXPECT_EQ(false, mutex->TryLock());
31 } 29 }
32 // The isolate shutdown and the destruction of the mutex are out-of-order on 30 // The isolate shutdown and the destruction of the mutex are out-of-order on
33 // purpose. 31 // purpose.
34 isolate->Shutdown(); 32 Dart_ShutdownIsolate();
35 delete isolate;
36 delete mutex; 33 delete mutex;
37 } 34 }
38 35
39 36
40 UNIT_TEST_CASE(Monitor) { 37 UNIT_TEST_CASE(Monitor) {
41 // This unit test case needs a running isolate. 38 // This unit test case needs a running isolate.
42 Isolate::Flags vm_flags; 39 Dart_CreateIsolate(
43 Dart_IsolateFlags api_flags; 40 NULL, NULL, bin::isolate_snapshot_buffer, NULL, NULL, NULL);
44 vm_flags.CopyTo(&api_flags); 41 Isolate* isolate = Isolate::Current();
45 Isolate* isolate = Isolate::Init(NULL, api_flags);
46 // Thread interrupter interferes with this test, disable interrupts. 42 // Thread interrupter interferes with this test, disable interrupts.
47 isolate->set_thread_state(NULL); 43 isolate->set_thread_state(NULL);
48 Profiler::EndExecution(isolate); 44 Profiler::EndExecution(isolate);
49 Monitor* monitor = new Monitor(); 45 Monitor* monitor = new Monitor();
50 monitor->Enter(); 46 monitor->Enter();
51 monitor->Exit(); 47 monitor->Exit();
52 48
53 const int kNumAttempts = 5; 49 const int kNumAttempts = 5;
54 int attempts = 0; 50 int attempts = 0;
55 while (attempts < kNumAttempts) { 51 while (attempts < kNumAttempts) {
(...skipping 16 matching lines...) Expand all
72 break; 68 break;
73 } 69 }
74 70
75 // Record the attempt. 71 // Record the attempt.
76 attempts++; 72 attempts++;
77 } 73 }
78 EXPECT_LT(attempts, kNumAttempts); 74 EXPECT_LT(attempts, kNumAttempts);
79 75
80 // The isolate shutdown and the destruction of the mutex are out-of-order on 76 // The isolate shutdown and the destruction of the mutex are out-of-order on
81 // purpose. 77 // purpose.
82 isolate->Shutdown(); 78 Dart_ShutdownIsolate();
83 delete isolate;
84 delete monitor; 79 delete monitor;
85 } 80 }
86 81
87 82
88 class ObjectCounter : public ObjectPointerVisitor { 83 class ObjectCounter : public ObjectPointerVisitor {
89 public: 84 public:
90 explicit ObjectCounter(Isolate* isolate, const Object* obj) 85 explicit ObjectCounter(Isolate* isolate, const Object* obj)
91 : ObjectPointerVisitor(isolate), obj_(obj), count_(0) { } 86 : ObjectPointerVisitor(isolate), obj_(obj), count_(0) { }
92 87
93 virtual void VisitPointers(RawObject** first, RawObject** last) { 88 virtual void VisitPointers(RawObject** first, RawObject** last) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 EXPECT(bar.Equals("bar")); 198 EXPECT(bar.Equals("bar"));
204 } 199 }
205 } 200 }
206 201
207 202
208 TEST_CASE(ThreadRegistry) { 203 TEST_CASE(ThreadRegistry) {
209 Isolate* orig = Thread::Current()->isolate(); 204 Isolate* orig = Thread::Current()->isolate();
210 Zone* orig_zone = Thread::Current()->zone(); 205 Zone* orig_zone = Thread::Current()->zone();
211 char* orig_str = orig_zone->PrintToString("foo"); 206 char* orig_str = orig_zone->PrintToString("foo");
212 Thread::ExitIsolate(); 207 Thread::ExitIsolate();
213 Isolate::Flags vm_flags;
214 Dart_IsolateFlags api_flags;
215 vm_flags.CopyTo(&api_flags);
216 Isolate* isos[2];
217 // Create and enter a new isolate. 208 // Create and enter a new isolate.
218 isos[0] = Isolate::Init(NULL, api_flags); 209 Dart_CreateIsolate(
210 NULL, NULL, bin::isolate_snapshot_buffer, NULL, NULL, NULL);
219 Zone* zone0 = Thread::Current()->zone(); 211 Zone* zone0 = Thread::Current()->zone();
220 EXPECT(zone0 != orig_zone); 212 EXPECT(zone0 != orig_zone);
221 isos[0]->Shutdown(); 213 Dart_ShutdownIsolate();
222 Thread::ExitIsolate();
223 // Create and enter yet another isolate. 214 // Create and enter yet another isolate.
224 isos[1] = Isolate::Init(NULL, api_flags); 215 Dart_CreateIsolate(
216 NULL, NULL, bin::isolate_snapshot_buffer, NULL, NULL, NULL);
225 { 217 {
226 // Create a stack resource this time, and exercise it. 218 // Create a stack resource this time, and exercise it.
227 StackZone stack_zone(Thread::Current()); 219 StackZone stack_zone(Thread::Current());
228 Zone* zone1 = Thread::Current()->zone(); 220 Zone* zone1 = Thread::Current()->zone();
229 EXPECT(zone1 != zone0); 221 EXPECT(zone1 != zone0);
230 EXPECT(zone1 != orig_zone); 222 EXPECT(zone1 != orig_zone);
231 } 223 }
232 isos[1]->Shutdown(); 224 Dart_ShutdownIsolate();
233 Thread::ExitIsolate();
234 Thread::EnterIsolate(orig); 225 Thread::EnterIsolate(orig);
235 // Original zone should be preserved. 226 // Original zone should be preserved.
236 EXPECT_EQ(orig_zone, Thread::Current()->zone()); 227 EXPECT_EQ(orig_zone, Thread::Current()->zone());
237 EXPECT_STREQ("foo", orig_str); 228 EXPECT_STREQ("foo", orig_str);
238 delete isos[0];
239 delete isos[1];
240 } 229 }
241 230
242 231
243 // A helper thread that alternatingly cooperates and organizes 232 // A helper thread that alternatingly cooperates and organizes
244 // safepoint rendezvous. At rendezvous, it explicitly visits the 233 // safepoint rendezvous. At rendezvous, it explicitly visits the
245 // stacks looking for a specific marker (Smi) to verify that the expected 234 // stacks looking for a specific marker (Smi) to verify that the expected
246 // number threads are actually visited. The task is "done" when it has 235 // number threads are actually visited. The task is "done" when it has
247 // successfully made all other tasks and the main thread rendezvous (may 236 // successfully made all other tasks and the main thread rendezvous (may
248 // not happen in the first rendezvous, since tasks are still starting up). 237 // not happen in the first rendezvous, since tasks are still starting up).
249 class SafepointTestTask : public ThreadPool::Task { 238 class SafepointTestTask : public ThreadPool::Task {
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 while (true) { 431 while (true) {
443 isolate->thread_registry()->CheckSafepoint(); 432 isolate->thread_registry()->CheckSafepoint();
444 MutexLocker ml(&mutex); 433 MutexLocker ml(&mutex);
445 if (exited == SafepointTestTask::kTaskCount) { 434 if (exited == SafepointTestTask::kTaskCount) {
446 break; 435 break;
447 } 436 }
448 } 437 }
449 } 438 }
450 439
451 } // namespace dart 440 } // namespace dart
OLDNEW
« runtime/vm/isolate.h ('K') | « runtime/vm/thread.cc ('k') | runtime/vm/zone_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698