[Base] Clock state now unaltered by threading.
- Removed tick and time values from ThreadSavedState. - Removed affiliated get/set code from Save and Restore. - Removed dangerous SetGuestTickCount method.
This commit is contained in:
parent
d6ce72ddc9
commit
7e244e0488
|
@ -126,13 +126,6 @@ uint32_t Clock::QueryGuestUptimeMillis() {
|
||||||
std::numeric_limits<uint32_t>::max()));
|
std::numeric_limits<uint32_t>::max()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clock::SetGuestTickCount(uint64_t tick_count) {
|
|
||||||
std::lock_guard<std::mutex> lock(tick_mutex_);
|
|
||||||
|
|
||||||
last_host_tick_count_ = Clock::QueryHostTickCount();
|
|
||||||
last_guest_tick_count_ = tick_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Clock::SetGuestSystemTime(uint64_t system_time) {
|
void Clock::SetGuestSystemTime(uint64_t system_time) {
|
||||||
// Query the filetime offset to calculate a new base time.
|
// Query the filetime offset to calculate a new base time.
|
||||||
auto guest_system_time_offset = QueryGuestSystemTimeOffset();
|
auto guest_system_time_offset = QueryGuestSystemTimeOffset();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* Xenia : Xbox 360 Emulator Research Project *
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* Copyright 2015 Ben Vanik. All rights reserved. *
|
* Copyright 2019 Ben Vanik. All rights reserved. *
|
||||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
@ -47,9 +47,7 @@ class Clock {
|
||||||
// Queries the milliseconds since the guest began, accounting for scaling.
|
// Queries the milliseconds since the guest began, accounting for scaling.
|
||||||
static uint32_t QueryGuestUptimeMillis();
|
static uint32_t QueryGuestUptimeMillis();
|
||||||
|
|
||||||
// Sets the guest tick count for the current thread.
|
// Sets the system time of the guest.
|
||||||
static void SetGuestTickCount(uint64_t tick_count);
|
|
||||||
// Sets the system time for the current thread.
|
|
||||||
static void SetGuestSystemTime(uint64_t system_time);
|
static void SetGuestSystemTime(uint64_t system_time);
|
||||||
|
|
||||||
// Scales a time duration in milliseconds, from guest time.
|
// Scales a time duration in milliseconds, from guest time.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* Xenia : Xbox 360 Emulator Research Project *
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
* Copyright 2019 Ben Vanik. All rights reserved. *
|
||||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
@ -821,10 +821,6 @@ struct ThreadSavedState {
|
||||||
bool is_main_thread; // Is this the main thread?
|
bool is_main_thread; // Is this the main thread?
|
||||||
bool is_running;
|
bool is_running;
|
||||||
|
|
||||||
// Clock settings (invalid if not running)
|
|
||||||
uint64_t tick_count_;
|
|
||||||
uint64_t system_time_;
|
|
||||||
|
|
||||||
uint32_t apc_head;
|
uint32_t apc_head;
|
||||||
uint32_t tls_static_address;
|
uint32_t tls_static_address;
|
||||||
uint32_t tls_dynamic_address;
|
uint32_t tls_dynamic_address;
|
||||||
|
@ -893,10 +889,6 @@ bool XThread::Save(ByteStream* stream) {
|
||||||
state.stack_alloc_size = stack_alloc_size_;
|
state.stack_alloc_size = stack_alloc_size_;
|
||||||
|
|
||||||
if (running_) {
|
if (running_) {
|
||||||
state.tick_count_ = Clock::QueryGuestTickCount();
|
|
||||||
state.system_time_ =
|
|
||||||
Clock::QueryGuestSystemTime() - Clock::guest_system_time_base();
|
|
||||||
|
|
||||||
// Context information
|
// Context information
|
||||||
auto context = thread_state_->context();
|
auto context = thread_state_->context();
|
||||||
state.context.lr = context->lr;
|
state.context.lr = context->lr;
|
||||||
|
@ -1006,10 +998,6 @@ object_ref<XThread> XThread::Restore(KernelState* kernel_state,
|
||||||
// Profiler needs to know about the thread.
|
// Profiler needs to know about the thread.
|
||||||
xe::Profiler::ThreadEnter(thread->name().c_str());
|
xe::Profiler::ThreadEnter(thread->name().c_str());
|
||||||
|
|
||||||
// Setup the time now that we're in the thread.
|
|
||||||
Clock::SetGuestTickCount(state.tick_count_);
|
|
||||||
Clock::SetGuestSystemTime(state.system_time_);
|
|
||||||
|
|
||||||
current_xthread_tls_ = thread;
|
current_xthread_tls_ = thread;
|
||||||
current_thread_ = thread;
|
current_thread_ = thread;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue