OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 CcTest register_test_##Name(Test##Name, __FILE__, #Name, NULL, false); \ | 50 CcTest register_test_##Name(Test##Name, __FILE__, #Name, NULL, false); \ |
51 static void Test##Name() | 51 static void Test##Name() |
52 #endif | 52 #endif |
53 | 53 |
54 class CcTest { | 54 class CcTest { |
55 public: | 55 public: |
56 typedef void (TestFunction)(); | 56 typedef void (TestFunction)(); |
57 CcTest(TestFunction* callback, const char* file, const char* name, | 57 CcTest(TestFunction* callback, const char* file, const char* name, |
58 const char* dependency, bool enabled); | 58 const char* dependency, bool enabled); |
59 void Run() { callback_(); } | 59 void Run() { callback_(); } |
60 static int test_count(); | |
61 static CcTest* last() { return last_; } | 60 static CcTest* last() { return last_; } |
62 CcTest* prev() { return prev_; } | 61 CcTest* prev() { return prev_; } |
63 const char* file() { return file_; } | 62 const char* file() { return file_; } |
64 const char* name() { return name_; } | 63 const char* name() { return name_; } |
65 const char* dependency() { return dependency_; } | 64 const char* dependency() { return dependency_; } |
66 bool enabled() { return enabled_; } | 65 bool enabled() { return enabled_; } |
| 66 static void set_default_isolate(v8::Isolate* default_isolate) { |
| 67 default_isolate_ = default_isolate; |
| 68 } |
| 69 static v8::Isolate* default_isolate() { return default_isolate_; } |
| 70 |
67 private: | 71 private: |
68 TestFunction* callback_; | 72 TestFunction* callback_; |
69 const char* file_; | 73 const char* file_; |
70 const char* name_; | 74 const char* name_; |
71 const char* dependency_; | 75 const char* dependency_; |
72 bool enabled_; | 76 bool enabled_; |
73 static CcTest* last_; | 77 static CcTest* last_; |
74 CcTest* prev_; | 78 CcTest* prev_; |
| 79 static v8::Isolate* default_isolate_; |
75 }; | 80 }; |
76 | 81 |
77 // Switches between all the Api tests using the threading support. | 82 // Switches between all the Api tests using the threading support. |
78 // In order to get a surprising but repeatable pattern of thread | 83 // In order to get a surprising but repeatable pattern of thread |
79 // switching it has extra semaphores to control the order in which | 84 // switching it has extra semaphores to control the order in which |
80 // the tests alternate, not relying solely on the big V8 lock. | 85 // the tests alternate, not relying solely on the big V8 lock. |
81 // | 86 // |
82 // A test is augmented with calls to ApiTestFuzzer::Fuzz() in its | 87 // A test is augmented with calls to ApiTestFuzzer::Fuzz() in its |
83 // callbacks. This will have no effect when we are not running the | 88 // callbacks. This will have no effect when we are not running the |
84 // thread fuzzing test. In the thread fuzzing test it will | 89 // thread fuzzing test. In the thread fuzzing test it will |
85 // pseudorandomly select a successor thread and switch execution | 90 // pseudorandomly select a successor thread and switch execution |
86 // to that thread, suspending the current test. | 91 // to that thread, suspending the current test. |
87 class ApiTestFuzzer: public v8::internal::Thread { | 92 class ApiTestFuzzer: public v8::internal::Thread { |
88 public: | 93 public: |
89 void CallTest(); | 94 void CallTest(); |
90 explicit ApiTestFuzzer(int num) | |
91 : Thread("ApiTestFuzzer"), | |
92 test_number_(num), | |
93 gate_(v8::internal::OS::CreateSemaphore(0)), | |
94 active_(true) { | |
95 } | |
96 ~ApiTestFuzzer() { delete gate_; } | |
97 | 95 |
98 // The ApiTestFuzzer is also a Thread, so it has a Run method. | 96 // The ApiTestFuzzer is also a Thread, so it has a Run method. |
99 virtual void Run(); | 97 virtual void Run(); |
100 | 98 |
101 enum PartOfTest { FIRST_PART, | 99 enum PartOfTest { FIRST_PART, |
102 SECOND_PART, | 100 SECOND_PART, |
103 THIRD_PART, | 101 THIRD_PART, |
104 FOURTH_PART, | 102 FOURTH_PART, |
105 LAST_PART = FOURTH_PART }; | 103 LAST_PART = FOURTH_PART }; |
106 | 104 |
107 static void SetUp(PartOfTest part); | 105 static void SetUp(PartOfTest part); |
108 static void RunAllTests(); | 106 static void RunAllTests(); |
109 static void TearDown(); | 107 static void TearDown(); |
110 // This method switches threads if we are running the Threading test. | 108 // This method switches threads if we are running the Threading test. |
111 // Otherwise it does nothing. | 109 // Otherwise it does nothing. |
112 static void Fuzz(); | 110 static void Fuzz(); |
113 | 111 |
114 private: | 112 private: |
| 113 explicit ApiTestFuzzer(int num) |
| 114 : Thread("ApiTestFuzzer"), |
| 115 test_number_(num), |
| 116 gate_(v8::internal::OS::CreateSemaphore(0)), |
| 117 active_(true) { |
| 118 } |
| 119 ~ApiTestFuzzer() { delete gate_; } |
| 120 |
115 static bool fuzzing_; | 121 static bool fuzzing_; |
116 static int tests_being_run_; | 122 static int tests_being_run_; |
117 static int current_; | 123 static int current_; |
118 static int active_tests_; | 124 static int active_tests_; |
119 static bool NextThread(); | 125 static bool NextThread(); |
120 int test_number_; | 126 int test_number_; |
121 v8::internal::Semaphore* gate_; | 127 v8::internal::Semaphore* gate_; |
122 bool active_; | 128 bool active_; |
123 void ContextSwitch(); | 129 void ContextSwitch(); |
124 static int GetNextTestNumber(); | 130 static int GetNextTestNumber(); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 static inline void SimulateFullSpace(v8::internal::PagedSpace* space) { | 253 static inline void SimulateFullSpace(v8::internal::PagedSpace* space) { |
248 int old_linear_size = static_cast<int>(space->limit() - space->top()); | 254 int old_linear_size = static_cast<int>(space->limit() - space->top()); |
249 space->Free(space->top(), old_linear_size); | 255 space->Free(space->top(), old_linear_size); |
250 space->SetTop(space->limit(), space->limit()); | 256 space->SetTop(space->limit(), space->limit()); |
251 space->ResetFreeList(); | 257 space->ResetFreeList(); |
252 space->ClearStats(); | 258 space->ClearStats(); |
253 } | 259 } |
254 | 260 |
255 | 261 |
256 #endif // ifndef CCTEST_H_ | 262 #endif // ifndef CCTEST_H_ |
OLD | NEW |