rpcsx/rpcs3/Emu/Cell/lv2/sys_timer.h
Ivan da7472fe81 Optimizations (#1680)
* Optimizations

1) Some headers simplified for better compilation time
2) Some templates simplified for smaller executable size
3) Eliminate std::future to fix compilation for mingw64
4) PKG installation can be cancelled now
5) cellGame fixes
6) XAudio2 fix for mingw64
7) PPUInterpreter bug fixed (Clang)

* any_pod<> implemented

Aliases: any16, any32, any64
rsx::make_command fixed
2016-04-25 13:49:12 +03:00

53 lines
1.3 KiB
C++

#pragma once
#include "Utilities/Thread.h"
namespace vm { using namespace ps3; }
// Timer State
enum : u32
{
SYS_TIMER_STATE_STOP = 0,
SYS_TIMER_STATE_RUN = 1,
};
struct sys_timer_information_t
{
be_t<s64> next_expiration_time;
be_t<u64> period;
be_t<u32> timer_state;
be_t<u32> pad;
};
class lv2_timer_t final : public named_thread
{
void on_task() override;
public:
std::string get_name() const override;
void on_stop() override;
const u32 id{}; // Timer id
atomic_t<u32> state{ SYS_TIMER_STATE_RUN }; // Timer state
std::weak_ptr<lv2_event_queue_t> port; // Event queue
u64 source; // Event source
u64 data1; // Event arg 1
u64 data2; // Event arg 2
u64 expire = 0; // Next expiration time
u64 period = 0; // Period (oneshot if 0)
};
s32 sys_timer_create(vm::ptr<u32> timer_id);
s32 sys_timer_destroy(u32 timer_id);
s32 sys_timer_get_information(u32 timer_id, vm::ptr<sys_timer_information_t> info);
s32 _sys_timer_start(u32 timer_id, u64 basetime, u64 period); // basetime type changed from s64
s32 sys_timer_stop(u32 timer_id);
s32 sys_timer_connect_event_queue(u32 timer_id, u32 queue_id, u64 name, u64 data1, u64 data2);
s32 sys_timer_disconnect_event_queue(u32 timer_id);
s32 sys_timer_sleep(u32 sleep_time);
s32 sys_timer_usleep(u64 sleep_time);