diff options
| author | 2019-02-12 12:32:15 -0500 | |
|---|---|---|
| committer | 2019-02-12 12:42:17 -0500 | |
| commit | 48d9d66dc585477d26b4cfbf1c4f71fd637b42ea (patch) | |
| tree | f53430f173796e92b2e3dfd2570ed6752d5e8f77 /src/tests | |
| parent | Merge pull request #1904 from bunnei/better-fermi-copy (diff) | |
| download | yuzu-48d9d66dc585477d26b4cfbf1c4f71fd637b42ea.tar.gz yuzu-48d9d66dc585477d26b4cfbf1c4f71fd637b42ea.tar.xz yuzu-48d9d66dc585477d26b4cfbf1c4f71fd637b42ea.zip | |
core_timing: Rename CoreTiming namespace to Core::Timing
Places all of the timing-related functionality under the existing Core
namespace to keep things consistent, rather than having the timing
utilities sitting in its own completely separate namespace.
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/core/core_timing.cpp | 169 |
1 files changed, 85 insertions, 84 deletions
diff --git a/src/tests/core/core_timing.cpp b/src/tests/core/core_timing.cpp index 2242c14cf..77607a755 100644 --- a/src/tests/core/core_timing.cpp +++ b/src/tests/core/core_timing.cpp | |||
| @@ -31,10 +31,10 @@ void CallbackTemplate(u64 userdata, s64 cycles_late) { | |||
| 31 | class ScopeInit final { | 31 | class ScopeInit final { |
| 32 | public: | 32 | public: |
| 33 | ScopeInit() { | 33 | ScopeInit() { |
| 34 | CoreTiming::Init(); | 34 | Core::Timing::Init(); |
| 35 | } | 35 | } |
| 36 | ~ScopeInit() { | 36 | ~ScopeInit() { |
| 37 | CoreTiming::Shutdown(); | 37 | Core::Timing::Shutdown(); |
| 38 | } | 38 | } |
| 39 | }; | 39 | }; |
| 40 | 40 | ||
| @@ -44,37 +44,37 @@ static void AdvanceAndCheck(u32 idx, int downcount, int expected_lateness = 0, | |||
| 44 | expected_callback = CB_IDS[idx]; | 44 | expected_callback = CB_IDS[idx]; |
| 45 | lateness = expected_lateness; | 45 | lateness = expected_lateness; |
| 46 | 46 | ||
| 47 | CoreTiming::AddTicks(CoreTiming::GetDowncount() - | 47 | // Pretend we executed X cycles of instructions. |
| 48 | cpu_downcount); // Pretend we executed X cycles of instructions. | 48 | Core::Timing::AddTicks(Core::Timing::GetDowncount() - cpu_downcount); |
| 49 | CoreTiming::Advance(); | 49 | Core::Timing::Advance(); |
| 50 | 50 | ||
| 51 | REQUIRE(decltype(callbacks_ran_flags)().set(idx) == callbacks_ran_flags); | 51 | REQUIRE(decltype(callbacks_ran_flags)().set(idx) == callbacks_ran_flags); |
| 52 | REQUIRE(downcount == CoreTiming::GetDowncount()); | 52 | REQUIRE(downcount == Core::Timing::GetDowncount()); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | TEST_CASE("CoreTiming[BasicOrder]", "[core]") { | 55 | TEST_CASE("CoreTiming[BasicOrder]", "[core]") { |
| 56 | ScopeInit guard; | 56 | ScopeInit guard; |
| 57 | 57 | ||
| 58 | CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); | 58 | Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>); |
| 59 | CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); | 59 | Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>); |
| 60 | CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", CallbackTemplate<2>); | 60 | Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", CallbackTemplate<2>); |
| 61 | CoreTiming::EventType* cb_d = CoreTiming::RegisterEvent("callbackD", CallbackTemplate<3>); | 61 | Core::Timing::EventType* cb_d = Core::Timing::RegisterEvent("callbackD", CallbackTemplate<3>); |
| 62 | CoreTiming::EventType* cb_e = CoreTiming::RegisterEvent("callbackE", CallbackTemplate<4>); | 62 | Core::Timing::EventType* cb_e = Core::Timing::RegisterEvent("callbackE", CallbackTemplate<4>); |
| 63 | 63 | ||
| 64 | // Enter slice 0 | 64 | // Enter slice 0 |
| 65 | CoreTiming::Advance(); | 65 | Core::Timing::Advance(); |
| 66 | 66 | ||
| 67 | // D -> B -> C -> A -> E | 67 | // D -> B -> C -> A -> E |
| 68 | CoreTiming::ScheduleEvent(1000, cb_a, CB_IDS[0]); | 68 | Core::Timing::ScheduleEvent(1000, cb_a, CB_IDS[0]); |
| 69 | REQUIRE(1000 == CoreTiming::GetDowncount()); | 69 | REQUIRE(1000 == Core::Timing::GetDowncount()); |
| 70 | CoreTiming::ScheduleEvent(500, cb_b, CB_IDS[1]); | 70 | Core::Timing::ScheduleEvent(500, cb_b, CB_IDS[1]); |
| 71 | REQUIRE(500 == CoreTiming::GetDowncount()); | 71 | REQUIRE(500 == Core::Timing::GetDowncount()); |
| 72 | CoreTiming::ScheduleEvent(800, cb_c, CB_IDS[2]); | 72 | Core::Timing::ScheduleEvent(800, cb_c, CB_IDS[2]); |
| 73 | REQUIRE(500 == CoreTiming::GetDowncount()); | 73 | REQUIRE(500 == Core::Timing::GetDowncount()); |
| 74 | CoreTiming::ScheduleEvent(100, cb_d, CB_IDS[3]); | 74 | Core::Timing::ScheduleEvent(100, cb_d, CB_IDS[3]); |
| 75 | REQUIRE(100 == CoreTiming::GetDowncount()); | 75 | REQUIRE(100 == Core::Timing::GetDowncount()); |
| 76 | CoreTiming::ScheduleEvent(1200, cb_e, CB_IDS[4]); | 76 | Core::Timing::ScheduleEvent(1200, cb_e, CB_IDS[4]); |
| 77 | REQUIRE(100 == CoreTiming::GetDowncount()); | 77 | REQUIRE(100 == Core::Timing::GetDowncount()); |
| 78 | 78 | ||
| 79 | AdvanceAndCheck(3, 400); | 79 | AdvanceAndCheck(3, 400); |
| 80 | AdvanceAndCheck(1, 300); | 80 | AdvanceAndCheck(1, 300); |
| @@ -86,36 +86,36 @@ TEST_CASE("CoreTiming[BasicOrder]", "[core]") { | |||
| 86 | TEST_CASE("CoreTiming[Threadsave]", "[core]") { | 86 | TEST_CASE("CoreTiming[Threadsave]", "[core]") { |
| 87 | ScopeInit guard; | 87 | ScopeInit guard; |
| 88 | 88 | ||
| 89 | CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); | 89 | Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>); |
| 90 | CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); | 90 | Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>); |
| 91 | CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", CallbackTemplate<2>); | 91 | Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", CallbackTemplate<2>); |
| 92 | CoreTiming::EventType* cb_d = CoreTiming::RegisterEvent("callbackD", CallbackTemplate<3>); | 92 | Core::Timing::EventType* cb_d = Core::Timing::RegisterEvent("callbackD", CallbackTemplate<3>); |
| 93 | CoreTiming::EventType* cb_e = CoreTiming::RegisterEvent("callbackE", CallbackTemplate<4>); | 93 | Core::Timing::EventType* cb_e = Core::Timing::RegisterEvent("callbackE", CallbackTemplate<4>); |
| 94 | 94 | ||
| 95 | // Enter slice 0 | 95 | // Enter slice 0 |
| 96 | CoreTiming::Advance(); | 96 | Core::Timing::Advance(); |
| 97 | 97 | ||
| 98 | // D -> B -> C -> A -> E | 98 | // D -> B -> C -> A -> E |
| 99 | CoreTiming::ScheduleEventThreadsafe(1000, cb_a, CB_IDS[0]); | 99 | Core::Timing::ScheduleEventThreadsafe(1000, cb_a, CB_IDS[0]); |
| 100 | // Manually force since ScheduleEventThreadsafe doesn't call it | 100 | // Manually force since ScheduleEventThreadsafe doesn't call it |
| 101 | CoreTiming::ForceExceptionCheck(1000); | 101 | Core::Timing::ForceExceptionCheck(1000); |
| 102 | REQUIRE(1000 == CoreTiming::GetDowncount()); | 102 | REQUIRE(1000 == Core::Timing::GetDowncount()); |
| 103 | CoreTiming::ScheduleEventThreadsafe(500, cb_b, CB_IDS[1]); | 103 | Core::Timing::ScheduleEventThreadsafe(500, cb_b, CB_IDS[1]); |
| 104 | // Manually force since ScheduleEventThreadsafe doesn't call it | 104 | // Manually force since ScheduleEventThreadsafe doesn't call it |
| 105 | CoreTiming::ForceExceptionCheck(500); | 105 | Core::Timing::ForceExceptionCheck(500); |
| 106 | REQUIRE(500 == CoreTiming::GetDowncount()); | 106 | REQUIRE(500 == Core::Timing::GetDowncount()); |
| 107 | CoreTiming::ScheduleEventThreadsafe(800, cb_c, CB_IDS[2]); | 107 | Core::Timing::ScheduleEventThreadsafe(800, cb_c, CB_IDS[2]); |
| 108 | // Manually force since ScheduleEventThreadsafe doesn't call it | 108 | // Manually force since ScheduleEventThreadsafe doesn't call it |
| 109 | CoreTiming::ForceExceptionCheck(800); | 109 | Core::Timing::ForceExceptionCheck(800); |
| 110 | REQUIRE(500 == CoreTiming::GetDowncount()); | 110 | REQUIRE(500 == Core::Timing::GetDowncount()); |
| 111 | CoreTiming::ScheduleEventThreadsafe(100, cb_d, CB_IDS[3]); | 111 | Core::Timing::ScheduleEventThreadsafe(100, cb_d, CB_IDS[3]); |
| 112 | // Manually force since ScheduleEventThreadsafe doesn't call it | 112 | // Manually force since ScheduleEventThreadsafe doesn't call it |
| 113 | CoreTiming::ForceExceptionCheck(100); | 113 | Core::Timing::ForceExceptionCheck(100); |
| 114 | REQUIRE(100 == CoreTiming::GetDowncount()); | 114 | REQUIRE(100 == Core::Timing::GetDowncount()); |
| 115 | CoreTiming::ScheduleEventThreadsafe(1200, cb_e, CB_IDS[4]); | 115 | Core::Timing::ScheduleEventThreadsafe(1200, cb_e, CB_IDS[4]); |
| 116 | // Manually force since ScheduleEventThreadsafe doesn't call it | 116 | // Manually force since ScheduleEventThreadsafe doesn't call it |
| 117 | CoreTiming::ForceExceptionCheck(1200); | 117 | Core::Timing::ForceExceptionCheck(1200); |
| 118 | REQUIRE(100 == CoreTiming::GetDowncount()); | 118 | REQUIRE(100 == Core::Timing::GetDowncount()); |
| 119 | 119 | ||
| 120 | AdvanceAndCheck(3, 400); | 120 | AdvanceAndCheck(3, 400); |
| 121 | AdvanceAndCheck(1, 300); | 121 | AdvanceAndCheck(1, 300); |
| @@ -143,42 +143,42 @@ TEST_CASE("CoreTiming[SharedSlot]", "[core]") { | |||
| 143 | 143 | ||
| 144 | ScopeInit guard; | 144 | ScopeInit guard; |
| 145 | 145 | ||
| 146 | CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", FifoCallback<0>); | 146 | Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", FifoCallback<0>); |
| 147 | CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", FifoCallback<1>); | 147 | Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", FifoCallback<1>); |
| 148 | CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", FifoCallback<2>); | 148 | Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", FifoCallback<2>); |
| 149 | CoreTiming::EventType* cb_d = CoreTiming::RegisterEvent("callbackD", FifoCallback<3>); | 149 | Core::Timing::EventType* cb_d = Core::Timing::RegisterEvent("callbackD", FifoCallback<3>); |
| 150 | CoreTiming::EventType* cb_e = CoreTiming::RegisterEvent("callbackE", FifoCallback<4>); | 150 | Core::Timing::EventType* cb_e = Core::Timing::RegisterEvent("callbackE", FifoCallback<4>); |
| 151 | 151 | ||
| 152 | CoreTiming::ScheduleEvent(1000, cb_a, CB_IDS[0]); | 152 | Core::Timing::ScheduleEvent(1000, cb_a, CB_IDS[0]); |
| 153 | CoreTiming::ScheduleEvent(1000, cb_b, CB_IDS[1]); | 153 | Core::Timing::ScheduleEvent(1000, cb_b, CB_IDS[1]); |
| 154 | CoreTiming::ScheduleEvent(1000, cb_c, CB_IDS[2]); | 154 | Core::Timing::ScheduleEvent(1000, cb_c, CB_IDS[2]); |
| 155 | CoreTiming::ScheduleEvent(1000, cb_d, CB_IDS[3]); | 155 | Core::Timing::ScheduleEvent(1000, cb_d, CB_IDS[3]); |
| 156 | CoreTiming::ScheduleEvent(1000, cb_e, CB_IDS[4]); | 156 | Core::Timing::ScheduleEvent(1000, cb_e, CB_IDS[4]); |
| 157 | 157 | ||
| 158 | // Enter slice 0 | 158 | // Enter slice 0 |
| 159 | CoreTiming::Advance(); | 159 | Core::Timing::Advance(); |
| 160 | REQUIRE(1000 == CoreTiming::GetDowncount()); | 160 | REQUIRE(1000 == Core::Timing::GetDowncount()); |
| 161 | 161 | ||
| 162 | callbacks_ran_flags = 0; | 162 | callbacks_ran_flags = 0; |
| 163 | counter = 0; | 163 | counter = 0; |
| 164 | lateness = 0; | 164 | lateness = 0; |
| 165 | CoreTiming::AddTicks(CoreTiming::GetDowncount()); | 165 | Core::Timing::AddTicks(Core::Timing::GetDowncount()); |
| 166 | CoreTiming::Advance(); | 166 | Core::Timing::Advance(); |
| 167 | REQUIRE(MAX_SLICE_LENGTH == CoreTiming::GetDowncount()); | 167 | REQUIRE(MAX_SLICE_LENGTH == Core::Timing::GetDowncount()); |
| 168 | REQUIRE(0x1FULL == callbacks_ran_flags.to_ullong()); | 168 | REQUIRE(0x1FULL == callbacks_ran_flags.to_ullong()); |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | TEST_CASE("CoreTiming[PredictableLateness]", "[core]") { | 171 | TEST_CASE("Core::Timing[PredictableLateness]", "[core]") { |
| 172 | ScopeInit guard; | 172 | ScopeInit guard; |
| 173 | 173 | ||
| 174 | CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); | 174 | Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>); |
| 175 | CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); | 175 | Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>); |
| 176 | 176 | ||
| 177 | // Enter slice 0 | 177 | // Enter slice 0 |
| 178 | CoreTiming::Advance(); | 178 | Core::Timing::Advance(); |
| 179 | 179 | ||
| 180 | CoreTiming::ScheduleEvent(100, cb_a, CB_IDS[0]); | 180 | Core::Timing::ScheduleEvent(100, cb_a, CB_IDS[0]); |
| 181 | CoreTiming::ScheduleEvent(200, cb_b, CB_IDS[1]); | 181 | Core::Timing::ScheduleEvent(200, cb_b, CB_IDS[1]); |
| 182 | 182 | ||
| 183 | AdvanceAndCheck(0, 90, 10, -10); // (100 - 10) | 183 | AdvanceAndCheck(0, 90, 10, -10); // (100 - 10) |
| 184 | AdvanceAndCheck(1, MAX_SLICE_LENGTH, 50, -50); | 184 | AdvanceAndCheck(1, MAX_SLICE_LENGTH, 50, -50); |
| @@ -192,9 +192,10 @@ static void RescheduleCallback(u64 userdata, s64 cycles_late) { | |||
| 192 | REQUIRE(reschedules >= 0); | 192 | REQUIRE(reschedules >= 0); |
| 193 | REQUIRE(lateness == cycles_late); | 193 | REQUIRE(lateness == cycles_late); |
| 194 | 194 | ||
| 195 | if (reschedules > 0) | 195 | if (reschedules > 0) { |
| 196 | CoreTiming::ScheduleEvent(1000, reinterpret_cast<CoreTiming::EventType*>(userdata), | 196 | Core::Timing::ScheduleEvent(1000, reinterpret_cast<Core::Timing::EventType*>(userdata), |
| 197 | userdata); | 197 | userdata); |
| 198 | } | ||
| 198 | } | 199 | } |
| 199 | } // namespace ChainSchedulingTest | 200 | } // namespace ChainSchedulingTest |
| 200 | 201 | ||
| @@ -203,35 +204,35 @@ TEST_CASE("CoreTiming[ChainScheduling]", "[core]") { | |||
| 203 | 204 | ||
| 204 | ScopeInit guard; | 205 | ScopeInit guard; |
| 205 | 206 | ||
| 206 | CoreTiming::EventType* cb_a = CoreTiming::RegisterEvent("callbackA", CallbackTemplate<0>); | 207 | Core::Timing::EventType* cb_a = Core::Timing::RegisterEvent("callbackA", CallbackTemplate<0>); |
| 207 | CoreTiming::EventType* cb_b = CoreTiming::RegisterEvent("callbackB", CallbackTemplate<1>); | 208 | Core::Timing::EventType* cb_b = Core::Timing::RegisterEvent("callbackB", CallbackTemplate<1>); |
| 208 | CoreTiming::EventType* cb_c = CoreTiming::RegisterEvent("callbackC", CallbackTemplate<2>); | 209 | Core::Timing::EventType* cb_c = Core::Timing::RegisterEvent("callbackC", CallbackTemplate<2>); |
| 209 | CoreTiming::EventType* cb_rs = | 210 | Core::Timing::EventType* cb_rs = |
| 210 | CoreTiming::RegisterEvent("callbackReschedule", RescheduleCallback); | 211 | Core::Timing::RegisterEvent("callbackReschedule", RescheduleCallback); |
| 211 | 212 | ||
| 212 | // Enter slice 0 | 213 | // Enter slice 0 |
| 213 | CoreTiming::Advance(); | 214 | Core::Timing::Advance(); |
| 214 | 215 | ||
| 215 | CoreTiming::ScheduleEvent(800, cb_a, CB_IDS[0]); | 216 | Core::Timing::ScheduleEvent(800, cb_a, CB_IDS[0]); |
| 216 | CoreTiming::ScheduleEvent(1000, cb_b, CB_IDS[1]); | 217 | Core::Timing::ScheduleEvent(1000, cb_b, CB_IDS[1]); |
| 217 | CoreTiming::ScheduleEvent(2200, cb_c, CB_IDS[2]); | 218 | Core::Timing::ScheduleEvent(2200, cb_c, CB_IDS[2]); |
| 218 | CoreTiming::ScheduleEvent(1000, cb_rs, reinterpret_cast<u64>(cb_rs)); | 219 | Core::Timing::ScheduleEvent(1000, cb_rs, reinterpret_cast<u64>(cb_rs)); |
| 219 | REQUIRE(800 == CoreTiming::GetDowncount()); | 220 | REQUIRE(800 == Core::Timing::GetDowncount()); |
| 220 | 221 | ||
| 221 | reschedules = 3; | 222 | reschedules = 3; |
| 222 | AdvanceAndCheck(0, 200); // cb_a | 223 | AdvanceAndCheck(0, 200); // cb_a |
| 223 | AdvanceAndCheck(1, 1000); // cb_b, cb_rs | 224 | AdvanceAndCheck(1, 1000); // cb_b, cb_rs |
| 224 | REQUIRE(2 == reschedules); | 225 | REQUIRE(2 == reschedules); |
| 225 | 226 | ||
| 226 | CoreTiming::AddTicks(CoreTiming::GetDowncount()); | 227 | Core::Timing::AddTicks(Core::Timing::GetDowncount()); |
| 227 | CoreTiming::Advance(); // cb_rs | 228 | Core::Timing::Advance(); // cb_rs |
| 228 | REQUIRE(1 == reschedules); | 229 | REQUIRE(1 == reschedules); |
| 229 | REQUIRE(200 == CoreTiming::GetDowncount()); | 230 | REQUIRE(200 == Core::Timing::GetDowncount()); |
| 230 | 231 | ||
| 231 | AdvanceAndCheck(2, 800); // cb_c | 232 | AdvanceAndCheck(2, 800); // cb_c |
| 232 | 233 | ||
| 233 | CoreTiming::AddTicks(CoreTiming::GetDowncount()); | 234 | Core::Timing::AddTicks(Core::Timing::GetDowncount()); |
| 234 | CoreTiming::Advance(); // cb_rs | 235 | Core::Timing::Advance(); // cb_rs |
| 235 | REQUIRE(0 == reschedules); | 236 | REQUIRE(0 == reschedules); |
| 236 | REQUIRE(MAX_SLICE_LENGTH == CoreTiming::GetDowncount()); | 237 | REQUIRE(MAX_SLICE_LENGTH == Core::Timing::GetDowncount()); |
| 237 | } | 238 | } |