pcsx2:linux: disable thread timing information. It seems to work only with eglibc (debian/ubuntu)

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4908 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
gregory.hainaut 2011-09-04 17:07:00 +00:00
parent 537dbcc58c
commit 0f354b7bcd
1 changed files with 22 additions and 4 deletions

View File

@ -55,6 +55,12 @@ __forceinline void Threading::DisableHiresScheduler()
{
}
// pthread_getcpuclockid causes a segmentation fault on Mandriva/Mageia.
// It seems to impact fedora users so I bet it is an issue with glic (the library was
// replaced by eglibc on Debian/Ubuntu)
// So for the moment I disable this feature -- Gregory
#define LNX_DISABLE_THREAD_TIME 1
u64 Threading::GetThreadTicksPerSecond()
{
// Note the value is not correct but I'm not sure we can do better because
@ -67,8 +73,12 @@ u64 Threading::GetThreadTicksPerSecond()
The actual frequency is hidden from userspace, deliberately. Indeed, some systems
use dynamic ticks or "tickless" systems, so there aren't really any at all.
*/
#ifndef LNX_DISABLE_THREAD_TIME
u32 hertz = sysconf(_SC_CLK_TCK);
return hertz;
#else
return 0;
#endif
}
u64 Threading::GetThreadCpuTime()
@ -77,16 +87,20 @@ u64 Threading::GetThreadCpuTime()
// thread has used on the CPU (scaled by the value returned by GetThreadTicksPerSecond(),
// which typically would be an OS-provided scalar or some sort).
#ifndef LNX_DISABLE_THREAD_TIME
clockid_t cid;
int err = pthread_getcpuclockid(pthread_self(), &cid);
if (err) return 0;
struct timespec ts;
clock_gettime(cid, &ts);
err = clock_gettime(cid, &ts);
if (err) return 0;
unsigned long timeJiff = (ts.tv_sec*1e6 + ts.tv_nsec / 1000)/1e6 * GetThreadTicksPerSecond();
return timeJiff;
#else
return 0;
#endif
}
u64 Threading::pxThread::GetCpuTime() const
@ -96,16 +110,20 @@ u64 Threading::pxThread::GetCpuTime() const
// thread has used on the CPU (scaled by the value returned by GetThreadTicksPerSecond(),
// which typically would be an OS-provided scalar or some sort).
#ifndef LNX_DISABLE_THREAD_TIME
clockid_t cid;
int err = pthread_getcpuclockid(m_native_id, &cid);
if (err) return 0;
struct timespec ts;
clock_gettime(cid, &ts);
err = clock_gettime(cid, &ts);
if (err) return 0;
unsigned long timeJiff = (ts.tv_sec*1e6 + ts.tv_nsec / 1000)/1e6 * GetThreadTicksPerSecond();
return timeJiff;
#else
return 0;
#endif
}
void Threading::pxThread::_platform_specific_OnStartInThread()