1
0
Fork 0
forked from suyu/suyu

Merge pull request #932 from lioncash/func

core_timing: Use transparent functors where applicable
This commit is contained in:
bunnei 2018-08-05 23:37:53 -04:00 committed by GitHub
commit 0b80bbeb95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 9 deletions

View file

@ -141,7 +141,7 @@ void ScheduleEvent(s64 cycles_into_future, const EventType* event_type, u64 user
ForceExceptionCheck(cycles_into_future); ForceExceptionCheck(cycles_into_future);
event_queue.emplace_back(Event{timeout, event_fifo_id++, userdata, event_type}); event_queue.emplace_back(Event{timeout, event_fifo_id++, userdata, event_type});
std::push_heap(event_queue.begin(), event_queue.end(), std::greater<Event>()); std::push_heap(event_queue.begin(), event_queue.end(), std::greater<>());
} }
void ScheduleEventThreadsafe(s64 cycles_into_future, const EventType* event_type, u64 userdata) { void ScheduleEventThreadsafe(s64 cycles_into_future, const EventType* event_type, u64 userdata) {
@ -156,7 +156,7 @@ void UnscheduleEvent(const EventType* event_type, u64 userdata) {
// Removing random items breaks the invariant so we have to re-establish it. // Removing random items breaks the invariant so we have to re-establish it.
if (itr != event_queue.end()) { if (itr != event_queue.end()) {
event_queue.erase(itr, event_queue.end()); event_queue.erase(itr, event_queue.end());
std::make_heap(event_queue.begin(), event_queue.end(), std::greater<Event>()); std::make_heap(event_queue.begin(), event_queue.end(), std::greater<>());
} }
} }
@ -167,7 +167,7 @@ void RemoveEvent(const EventType* event_type) {
// Removing random items breaks the invariant so we have to re-establish it. // Removing random items breaks the invariant so we have to re-establish it.
if (itr != event_queue.end()) { if (itr != event_queue.end()) {
event_queue.erase(itr, event_queue.end()); event_queue.erase(itr, event_queue.end());
std::make_heap(event_queue.begin(), event_queue.end(), std::greater<Event>()); std::make_heap(event_queue.begin(), event_queue.end(), std::greater<>());
} }
} }
@ -190,7 +190,7 @@ void MoveEvents() {
for (Event ev; ts_queue.Pop(ev);) { for (Event ev; ts_queue.Pop(ev);) {
ev.fifo_order = event_fifo_id++; ev.fifo_order = event_fifo_id++;
event_queue.emplace_back(std::move(ev)); event_queue.emplace_back(std::move(ev));
std::push_heap(event_queue.begin(), event_queue.end(), std::greater<Event>()); std::push_heap(event_queue.begin(), event_queue.end(), std::greater<>());
} }
} }
@ -205,7 +205,7 @@ void Advance() {
while (!event_queue.empty() && event_queue.front().time <= global_timer) { while (!event_queue.empty() && event_queue.front().time <= global_timer) {
Event evt = std::move(event_queue.front()); Event evt = std::move(event_queue.front());
std::pop_heap(event_queue.begin(), event_queue.end(), std::greater<Event>()); std::pop_heap(event_queue.begin(), event_queue.end(), std::greater<>());
event_queue.pop_back(); event_queue.pop_back();
evt.type->callback(evt.userdata, static_cast<int>(global_timer - evt.time)); evt.type->callback(evt.userdata, static_cast<int>(global_timer - evt.time));
} }

View file

@ -23,6 +23,10 @@
namespace CoreTiming { namespace CoreTiming {
struct EventType;
using TimedCallback = std::function<void(u64 userdata, int cycles_late)>;
/** /**
* CoreTiming begins at the boundary of timing slice -1. An initial call to Advance() is * CoreTiming begins at the boundary of timing slice -1. An initial call to Advance() is
* required to end slice -1 and start slice 0 before the first cycle of code is executed. * required to end slice -1 and start slice 0 before the first cycle of code is executed.
@ -30,8 +34,6 @@ namespace CoreTiming {
void Init(); void Init();
void Shutdown(); void Shutdown();
typedef std::function<void(u64 userdata, int cycles_late)> TimedCallback;
/** /**
* This should only be called from the emu thread, if you are calling it any other thread, you are * This should only be called from the emu thread, if you are calling it any other thread, you are
* doing something evil * doing something evil
@ -40,8 +42,6 @@ u64 GetTicks();
u64 GetIdleTicks(); u64 GetIdleTicks();
void AddTicks(u64 ticks); void AddTicks(u64 ticks);
struct EventType;
/** /**
* Returns the event_type identifier. if name is not unique, it will assert. * Returns the event_type identifier. if name is not unique, it will assert.
*/ */