mirror of https://gitlab.com/nakst/essence
remove system constants
This commit is contained in:
parent
ba8c1152c1
commit
bb7bf3300a
|
@ -523,7 +523,7 @@ void _start() {
|
||||||
nonBlockingTaskWorkAvailable = EsEventCreate(true /* autoReset */);
|
nonBlockingTaskWorkAvailable = EsEventCreate(true /* autoReset */);
|
||||||
EsThreadInformation _nonBlockingTaskThread = {};
|
EsThreadInformation _nonBlockingTaskThread = {};
|
||||||
|
|
||||||
for (uintptr_t i = 0; i < EsSystemGetConstant(ES_SYSTEM_CONSTANT_OPTIMAL_WORK_QUEUE_THREAD_COUNT); i++) {
|
for (uintptr_t i = 0; i < EsSystemGetOptimalWorkQueueThreadCount(); i++) {
|
||||||
EsThreadCreate(NonBlockingTaskThread, &_nonBlockingTaskThread, nullptr);
|
EsThreadCreate(NonBlockingTaskThread, &_nonBlockingTaskThread, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,6 @@ struct {
|
||||||
Array<MountPoint> mountPoints;
|
Array<MountPoint> mountPoints;
|
||||||
bool foundBootFileSystem;
|
bool foundBootFileSystem;
|
||||||
EsProcessStartupInformation *startupInformation;
|
EsProcessStartupInformation *startupInformation;
|
||||||
uint64_t systemConstants[ES_SYSTEM_CONSTANT_COUNT];
|
|
||||||
GlobalData *global;
|
GlobalData *global;
|
||||||
|
|
||||||
EsMutex messageMutex;
|
EsMutex messageMutex;
|
||||||
|
@ -132,7 +131,7 @@ struct {
|
||||||
|
|
||||||
EsSpinlock performanceTimerStackLock;
|
EsSpinlock performanceTimerStackLock;
|
||||||
#define PERFORMANCE_TIMER_STACK_SIZE (100)
|
#define PERFORMANCE_TIMER_STACK_SIZE (100)
|
||||||
uint64_t performanceTimerStack[PERFORMANCE_TIMER_STACK_SIZE];
|
double performanceTimerStack[PERFORMANCE_TIMER_STACK_SIZE];
|
||||||
uintptr_t performanceTimerStackCount;
|
uintptr_t performanceTimerStackCount;
|
||||||
|
|
||||||
ThreadLocalStorage firstThreadLocalStorage;
|
ThreadLocalStorage firstThreadLocalStorage;
|
||||||
|
@ -905,10 +904,6 @@ EsMessage *EsMessageReceive() {
|
||||||
|
|
||||||
EsMessageType type = message.message.type;
|
EsMessageType type = message.message.type;
|
||||||
|
|
||||||
if (type == ES_MSG_SYSTEM_CONSTANT_UPDATED) {
|
|
||||||
api.systemConstants[message.message.systemConstantUpdated.index] = message.message.systemConstantUpdated.newValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == ES_MSG_EYEDROP_REPORT) {
|
if (type == ES_MSG_EYEDROP_REPORT) {
|
||||||
EsMessageSend((EsElement *) message.object, &message.message);
|
EsMessageSend((EsElement *) message.object, &message.message);
|
||||||
} else if (type == ES_MSG_TIMER) {
|
} else if (type == ES_MSG_TIMER) {
|
||||||
|
@ -1186,8 +1181,8 @@ void EsInstanceSaveComplete(EsMessage *message, bool success) {
|
||||||
message->instanceSave.file->operationComplete = true;
|
message->instanceSave.file->operationComplete = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t EsSystemGetConstant(uintptr_t index) {
|
uintptr_t EsSystemGetOptimalWorkQueueThreadCount() {
|
||||||
return api.systemConstants[index];
|
return api.startupInformation->optimalWorkQueueThreadCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThreadInitialise(ThreadLocalStorage *local) {
|
void ThreadInitialise(ThreadLocalStorage *local) {
|
||||||
|
@ -1216,7 +1211,6 @@ extern "C" void _start(EsProcessStartupInformation *_startupInformation) {
|
||||||
// Initialise the API.
|
// Initialise the API.
|
||||||
|
|
||||||
_init();
|
_init();
|
||||||
EsSyscall(ES_SYSCALL_SYSTEM_GET_CONSTANTS, (uintptr_t) api.systemConstants, 0, 0, 0);
|
|
||||||
EsRandomSeed(EsTimeStamp());
|
EsRandomSeed(EsTimeStamp());
|
||||||
ThreadInitialise(&api.firstThreadLocalStorage);
|
ThreadInitialise(&api.firstThreadLocalStorage);
|
||||||
EsMessageMutexAcquire();
|
EsMessageMutexAcquire();
|
||||||
|
@ -1384,7 +1378,7 @@ void EsPerformanceTimerPush() {
|
||||||
EsSpinlockAcquire(&api.performanceTimerStackLock);
|
EsSpinlockAcquire(&api.performanceTimerStackLock);
|
||||||
|
|
||||||
if (api.performanceTimerStackCount < PERFORMANCE_TIMER_STACK_SIZE) {
|
if (api.performanceTimerStackCount < PERFORMANCE_TIMER_STACK_SIZE) {
|
||||||
api.performanceTimerStack[api.performanceTimerStackCount++] = EsTimeStamp();
|
api.performanceTimerStack[api.performanceTimerStackCount++] = EsTimeStampMs();
|
||||||
}
|
}
|
||||||
|
|
||||||
EsSpinlockRelease(&api.performanceTimerStackLock);
|
EsSpinlockRelease(&api.performanceTimerStackLock);
|
||||||
|
@ -1395,8 +1389,8 @@ double EsPerformanceTimerPop() {
|
||||||
EsSpinlockAcquire(&api.performanceTimerStackLock);
|
EsSpinlockAcquire(&api.performanceTimerStackLock);
|
||||||
|
|
||||||
if (api.performanceTimerStackCount) {
|
if (api.performanceTimerStackCount) {
|
||||||
uint64_t start = api.performanceTimerStack[--api.performanceTimerStackCount];
|
double start = api.performanceTimerStack[--api.performanceTimerStackCount];
|
||||||
result = ((double) (EsTimeStamp() - start) / (double) (api.systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND])) / 1000000.0;
|
result = (EsTimeStampMs() - start) / 1000.0 /* ms to seconds */;
|
||||||
}
|
}
|
||||||
|
|
||||||
EsSpinlockRelease(&api.performanceTimerStackLock);
|
EsSpinlockRelease(&api.performanceTimerStackLock);
|
||||||
|
|
|
@ -1732,8 +1732,8 @@ void ProcessAnimations() {
|
||||||
|
|
||||||
EsMessage m = {};
|
EsMessage m = {};
|
||||||
m.type = ES_MSG_ANIMATE;
|
m.type = ES_MSG_ANIMATE;
|
||||||
int64_t deltaUs = (timeStamp - element->lastTimeStamp) / api.systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND];
|
int64_t deltaMs = (timeStamp - element->lastTimeStamp) / api.startupInformation->timeStampTicksPerMs;
|
||||||
m.animate.deltaMs = deltaUs / 1000;
|
m.animate.deltaMs = deltaMs;
|
||||||
m.animate.complete = true;
|
m.animate.complete = true;
|
||||||
|
|
||||||
if (!m.animate.deltaMs) {
|
if (!m.animate.deltaMs) {
|
||||||
|
@ -1779,7 +1779,7 @@ void ProcessAnimations() {
|
||||||
waitMs = m.animate.waitMs;
|
waitMs = m.animate.waitMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
element->lastTimeStamp += m.animate.deltaMs * 1000 * api.systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND];
|
element->lastTimeStamp += m.animate.deltaMs * api.startupInformation->timeStampTicksPerMs;
|
||||||
UIWindowNeedsUpdate(element->window);
|
UIWindowNeedsUpdate(element->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2779,7 +2779,6 @@ EsScrollbar *ScrollbarCreate(EsElement *parent, uint64_t flags) {
|
||||||
} else if (message->type == ES_MSG_ANIMATE) {
|
} else if (message->type == ES_MSG_ANIMATE) {
|
||||||
if (scrollbar->position != scrollbar->smoothScrollTarget) {
|
if (scrollbar->position != scrollbar->smoothScrollTarget) {
|
||||||
double factor = EsCRTexp2f(-5.0f / message->animate.deltaMs);
|
double factor = EsCRTexp2f(-5.0f / message->animate.deltaMs);
|
||||||
// EsPrint("%dmcs -> %F\n", message->animate.deltaUs, factor);
|
|
||||||
scrollbar->position += (scrollbar->smoothScrollTarget - scrollbar->position) * factor;
|
scrollbar->position += (scrollbar->smoothScrollTarget - scrollbar->position) * factor;
|
||||||
ScrollbarSetPosition(scrollbar, scrollbar->smoothScrollTarget, true, true);
|
ScrollbarSetPosition(scrollbar, scrollbar->smoothScrollTarget, true, true);
|
||||||
bool done = scrollbar->position == scrollbar->smoothScrollTarget;
|
bool done = scrollbar->position == scrollbar->smoothScrollTarget;
|
||||||
|
|
|
@ -1484,7 +1484,7 @@ struct EsListView : EsElement {
|
||||||
EsMessageSend(this, &m);
|
EsMessageSend(this, &m);
|
||||||
return true;
|
return true;
|
||||||
} else if (!ctrl && !alt) {
|
} else if (!ctrl && !alt) {
|
||||||
uint64_t currentTime = EsTimeStamp() / (api.systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND] * 1000);
|
uint64_t currentTime = EsTimeStamp() / api.startupInformation->timeStampTicksPerMs;
|
||||||
|
|
||||||
if (searchBufferLastKeyTime + GetConstantNumber("listViewSearchBufferTimeout") < currentTime) {
|
if (searchBufferLastKeyTime + GetConstantNumber("listViewSearchBufferTimeout") < currentTime) {
|
||||||
searchBufferBytes = 0;
|
searchBufferBytes = 0;
|
||||||
|
@ -1787,7 +1787,7 @@ struct EsListView : EsElement {
|
||||||
DragSelect();
|
DragSelect();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t currentTime = EsTimeStamp() / (api.systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND] * 1000);
|
uint64_t currentTime = EsTimeStamp() / api.startupInformation->timeStampTicksPerMs;
|
||||||
int64_t remainingTime = searchBufferLastKeyTime + GetConstantNumber("listViewSearchBufferTimeout") - currentTime;
|
int64_t remainingTime = searchBufferLastKeyTime + GetConstantNumber("listViewSearchBufferTimeout") - currentTime;
|
||||||
|
|
||||||
if (remainingTime < 0) {
|
if (remainingTime < 0) {
|
||||||
|
|
|
@ -330,10 +330,6 @@ define ES_ERROR_NODE_NOT_LOADED (-71)
|
||||||
define ES_ERROR_DIRECTORY_ENTRY_BEING_REMOVED (-72)
|
define ES_ERROR_DIRECTORY_ENTRY_BEING_REMOVED (-72)
|
||||||
define ES_ERROR_CANCELLED (-73)
|
define ES_ERROR_CANCELLED (-73)
|
||||||
|
|
||||||
define ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND (0)
|
|
||||||
define ES_SYSTEM_CONSTANT_OPTIMAL_WORK_QUEUE_THREAD_COUNT (1)
|
|
||||||
define ES_SYSTEM_CONSTANT_COUNT (2)
|
|
||||||
|
|
||||||
define ES_INVALID_HANDLE ((EsHandle) (0))
|
define ES_INVALID_HANDLE ((EsHandle) (0))
|
||||||
define ES_CURRENT_THREAD ((EsHandle) (0x10))
|
define ES_CURRENT_THREAD ((EsHandle) (0x10))
|
||||||
define ES_CURRENT_PROCESS ((EsHandle) (0x11))
|
define ES_CURRENT_PROCESS ((EsHandle) (0x11))
|
||||||
|
@ -764,31 +760,31 @@ enum EsSyscallType {
|
||||||
|
|
||||||
// Processing.
|
// Processing.
|
||||||
|
|
||||||
ES_SYSCALL_PROCESS_CREATE
|
|
||||||
ES_SYSCALL_PROCESS_GET_CREATION_ARGUMENT
|
|
||||||
ES_SYSCALL_THREAD_TERMINATE
|
|
||||||
ES_SYSCALL_THREAD_CREATE
|
|
||||||
ES_SYSCALL_WAIT
|
|
||||||
ES_SYSCALL_PROCESS_TERMINATE
|
|
||||||
ES_SYSCALL_EVENT_CREATE
|
ES_SYSCALL_EVENT_CREATE
|
||||||
ES_SYSCALL_EVENT_SET
|
|
||||||
ES_SYSCALL_EVENT_RESET
|
|
||||||
ES_SYSCALL_PROCESS_PAUSE
|
|
||||||
ES_SYSCALL_PROCESS_CRASH
|
|
||||||
ES_SYSCALL_THREAD_GET_ID
|
|
||||||
ES_SYSCALL_PROCESS_GET_STATE
|
|
||||||
ES_SYSCALL_YIELD_SCHEDULER
|
|
||||||
ES_SYSCALL_SLEEP
|
|
||||||
ES_SYSCALL_PROCESS_OPEN
|
|
||||||
ES_SYSCALL_PROCESS_SET_TLS
|
|
||||||
ES_SYSCALL_PROCESS_GET_TLS
|
|
||||||
ES_SYSCALL_PROCESS_GET_STATUS
|
|
||||||
ES_SYSCALL_EVENT_FORWARD
|
ES_SYSCALL_EVENT_FORWARD
|
||||||
|
ES_SYSCALL_EVENT_RESET
|
||||||
|
ES_SYSCALL_EVENT_SET
|
||||||
ES_SYSCALL_EVENT_SINK_CREATE
|
ES_SYSCALL_EVENT_SINK_CREATE
|
||||||
ES_SYSCALL_EVENT_SINK_POP
|
ES_SYSCALL_EVENT_SINK_POP
|
||||||
ES_SYSCALL_EVENT_SINK_PUSH
|
ES_SYSCALL_EVENT_SINK_PUSH
|
||||||
ES_SYSCALL_THREAD_STACK_SIZE
|
ES_SYSCALL_PROCESS_CRASH
|
||||||
|
ES_SYSCALL_PROCESS_CREATE
|
||||||
|
ES_SYSCALL_PROCESS_GET_CREATION_ARGUMENT
|
||||||
|
ES_SYSCALL_PROCESS_GET_STATE
|
||||||
|
ES_SYSCALL_PROCESS_GET_STATUS
|
||||||
|
ES_SYSCALL_PROCESS_GET_TLS
|
||||||
|
ES_SYSCALL_PROCESS_OPEN
|
||||||
|
ES_SYSCALL_PROCESS_PAUSE
|
||||||
|
ES_SYSCALL_PROCESS_SET_TLS
|
||||||
ES_SYSCALL_PROCESS_SHARE
|
ES_SYSCALL_PROCESS_SHARE
|
||||||
|
ES_SYSCALL_PROCESS_TERMINATE
|
||||||
|
ES_SYSCALL_SLEEP
|
||||||
|
ES_SYSCALL_THREAD_CREATE
|
||||||
|
ES_SYSCALL_THREAD_GET_ID
|
||||||
|
ES_SYSCALL_THREAD_STACK_SIZE
|
||||||
|
ES_SYSCALL_THREAD_TERMINATE
|
||||||
|
ES_SYSCALL_WAIT
|
||||||
|
ES_SYSCALL_YIELD_SCHEDULER
|
||||||
|
|
||||||
// Windowing.
|
// Windowing.
|
||||||
|
|
||||||
|
@ -823,15 +819,15 @@ enum EsSyscallType {
|
||||||
// IO.
|
// IO.
|
||||||
|
|
||||||
ES_SYSCALL_NODE_OPEN
|
ES_SYSCALL_NODE_OPEN
|
||||||
|
ES_SYSCALL_NODE_DELETE
|
||||||
|
ES_SYSCALL_NODE_MOVE
|
||||||
|
ES_SYSCALL_NODE_SHARE
|
||||||
ES_SYSCALL_FILE_READ_SYNC
|
ES_SYSCALL_FILE_READ_SYNC
|
||||||
ES_SYSCALL_FILE_WRITE_SYNC
|
ES_SYSCALL_FILE_WRITE_SYNC
|
||||||
ES_SYSCALL_FILE_RESIZE
|
ES_SYSCALL_FILE_RESIZE
|
||||||
ES_SYSCALL_FILE_GET_SIZE
|
ES_SYSCALL_FILE_GET_SIZE
|
||||||
ES_SYSCALL_DIRECTORY_ENUMERATE
|
|
||||||
ES_SYSCALL_NODE_DELETE
|
|
||||||
ES_SYSCALL_NODE_MOVE
|
|
||||||
ES_SYSCALL_FILE_CONTROL
|
ES_SYSCALL_FILE_CONTROL
|
||||||
ES_SYSCALL_NODE_SHARE
|
ES_SYSCALL_DIRECTORY_ENUMERATE
|
||||||
ES_SYSCALL_VOLUME_GET_INFORMATION
|
ES_SYSCALL_VOLUME_GET_INFORMATION
|
||||||
|
|
||||||
// Networking.
|
// Networking.
|
||||||
|
@ -851,11 +847,6 @@ enum EsSyscallType {
|
||||||
ES_SYSCALL_PIPE_WRITE
|
ES_SYSCALL_PIPE_WRITE
|
||||||
ES_SYSCALL_PIPE_READ
|
ES_SYSCALL_PIPE_READ
|
||||||
|
|
||||||
// System information.
|
|
||||||
|
|
||||||
ES_SYSCALL_SYSTEM_GET_CONSTANTS
|
|
||||||
ES_SYSCALL_SYSTEM_TAKE_SNAPSHOT
|
|
||||||
|
|
||||||
// Misc.
|
// Misc.
|
||||||
|
|
||||||
ES_SYSCALL_PRINT
|
ES_SYSCALL_PRINT
|
||||||
|
@ -864,6 +855,7 @@ enum EsSyscallType {
|
||||||
ES_SYSCALL_SHUTDOWN
|
ES_SYSCALL_SHUTDOWN
|
||||||
ES_SYSCALL_POSIX
|
ES_SYSCALL_POSIX
|
||||||
ES_SYSCALL_DEBUG_COMMAND
|
ES_SYSCALL_DEBUG_COMMAND
|
||||||
|
ES_SYSCALL_SYSTEM_TAKE_SNAPSHOT
|
||||||
|
|
||||||
// End.
|
// End.
|
||||||
|
|
||||||
|
@ -987,7 +979,6 @@ enum EsMessageType {
|
||||||
|
|
||||||
// Misc messages:
|
// Misc messages:
|
||||||
ES_MSG_EYEDROP_REPORT = 0x5001
|
ES_MSG_EYEDROP_REPORT = 0x5001
|
||||||
ES_MSG_SYSTEM_CONSTANT_UPDATED = 0x5002
|
|
||||||
ES_MSG_TIMER = 0x5003
|
ES_MSG_TIMER = 0x5003
|
||||||
ES_MSG_PING = 0x5004 // Sent by Desktop to check processes are processing messages.
|
ES_MSG_PING = 0x5004 // Sent by Desktop to check processes are processing messages.
|
||||||
ES_MSG_WAKEUP = 0x5005 // Sent to wakeup the message thread, so that it can process locally posted messages.
|
ES_MSG_WAKEUP = 0x5005 // Sent to wakeup the message thread, so that it can process locally posted messages.
|
||||||
|
@ -1727,11 +1718,6 @@ struct EsMessageTabOperation {
|
||||||
EsError error;
|
EsError error;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EsMessageSystemConstantUpdated {
|
|
||||||
uintptr_t index;
|
|
||||||
uint64_t newValue;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct EsMessageRegisterFileSystem {
|
struct EsMessageRegisterFileSystem {
|
||||||
EsHandle rootDirectory;
|
EsHandle rootDirectory;
|
||||||
bool isBootFileSystem;
|
bool isBootFileSystem;
|
||||||
|
@ -1815,7 +1801,6 @@ struct EsMessage {
|
||||||
// Internal messages:
|
// Internal messages:
|
||||||
void *_argument;
|
void *_argument;
|
||||||
EsMessageProcessCrash crash;
|
EsMessageProcessCrash crash;
|
||||||
EsMessageSystemConstantUpdated systemConstantUpdated;
|
|
||||||
EsMessageDesktop desktop;
|
EsMessageDesktop desktop;
|
||||||
EsMessageEyedrop eyedrop;
|
EsMessageEyedrop eyedrop;
|
||||||
EsMessageCreateInstance createInstance;
|
EsMessageCreateInstance createInstance;
|
||||||
|
@ -1901,7 +1886,7 @@ function uintptr_t _EsSyscall(uintptr_t a, uintptr_t b, uintptr_t c, uintptr_t d
|
||||||
|
|
||||||
// Configuration and settings.
|
// Configuration and settings.
|
||||||
|
|
||||||
function uint64_t EsSystemGetConstant(uintptr_t index);
|
function uintptr_t EsSystemGetOptimalWorkQueueThreadCount();
|
||||||
|
|
||||||
function int64_t EsSystemConfigurationReadInteger(STRING section, STRING key, int64_t defaultValue = 0);
|
function int64_t EsSystemConfigurationReadInteger(STRING section, STRING key, int64_t defaultValue = 0);
|
||||||
function char *EsSystemConfigurationReadString(STRING section, STRING key, size_t *valueBytes = ES_NULL); // Free with EsHeapFree.
|
function char *EsSystemConfigurationReadString(STRING section, STRING key, size_t *valueBytes = ES_NULL); // Free with EsHeapFree.
|
||||||
|
|
|
@ -531,11 +531,10 @@ long EsPOSIXSystemCall(long n, long a1, long a2, long a3, long a4, long a5, long
|
||||||
case SYS_clock_gettime: {
|
case SYS_clock_gettime: {
|
||||||
// We'll ignore the clockid_t in a1, since we don't have proper timekeeping yet.
|
// We'll ignore the clockid_t in a1, since we don't have proper timekeeping yet.
|
||||||
struct timespec *tp = (struct timespec *) a2;
|
struct timespec *tp = (struct timespec *) a2;
|
||||||
uint64_t timeStamp = EsTimeStamp();
|
double timeStampMs = EsTimeStampMs();
|
||||||
uint64_t unitsPerMicrosecond = EsSystemGetConstant(ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND);
|
uint64_t ns = timeStampMs * 1e6;
|
||||||
uint64_t microseconds = timeStamp / unitsPerMicrosecond;
|
tp->tv_sec = ns / 1000000000;
|
||||||
tp->tv_sec = microseconds / 1000000;
|
tp->tv_nsec = (ns % 1000000000) * 1000;
|
||||||
tp->tv_nsec = (microseconds % 1000000) * 1000;
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case SYS_wait4: {
|
case SYS_wait4: {
|
||||||
|
|
|
@ -250,6 +250,8 @@ struct EsProcessStartupInformation {
|
||||||
uintptr_t tlsImageStart;
|
uintptr_t tlsImageStart;
|
||||||
uintptr_t tlsImageBytes;
|
uintptr_t tlsImageBytes;
|
||||||
uintptr_t tlsBytes; // All bytes after the image are to be zeroed.
|
uintptr_t tlsBytes; // All bytes after the image are to be zeroed.
|
||||||
|
uintptr_t timeStampTicksPerMs;
|
||||||
|
uintptr_t optimalWorkQueueThreadCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EsPOSIXSyscall {
|
struct _EsPOSIXSyscall {
|
||||||
|
|
|
@ -3,10 +3,10 @@ ThreadLocalStorage *GetThreadLocalStorage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
double EsTimeStampMs() {
|
double EsTimeStampMs() {
|
||||||
if (!api.systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND]) {
|
if (!api.startupInformation->timeStampTicksPerMs) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return (double) EsTimeStamp() / api.systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND] / 1000;
|
return (double) EsTimeStamp() / api.startupInformation->timeStampTicksPerMs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -628,6 +628,8 @@ void NewProcess() {
|
||||||
startupInformation->tlsImageStart = application.tlsImageStart;
|
startupInformation->tlsImageStart = application.tlsImageStart;
|
||||||
startupInformation->tlsImageBytes = application.tlsImageBytes;
|
startupInformation->tlsImageBytes = application.tlsImageBytes;
|
||||||
startupInformation->tlsBytes = application.tlsBytes;
|
startupInformation->tlsBytes = application.tlsBytes;
|
||||||
|
startupInformation->timeStampTicksPerMs = timeStampTicksPerMs;
|
||||||
|
startupInformation->optimalWorkQueueThreadCount = scheduler.currentProcessorID; // TODO Update this as processors are added/removed.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1418,15 +1418,6 @@ SYSCALL_IMPLEMENT(ES_SYSCALL_YIELD_SCHEDULER) {
|
||||||
SYSCALL_RETURN(ES_SUCCESS, false);
|
SYSCALL_RETURN(ES_SUCCESS, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSCALL_IMPLEMENT(ES_SYSCALL_SYSTEM_GET_CONSTANTS) {
|
|
||||||
uint64_t systemConstants[ES_SYSTEM_CONSTANT_COUNT];
|
|
||||||
EsMemoryZero(systemConstants, sizeof(systemConstants));
|
|
||||||
systemConstants[ES_SYSTEM_CONSTANT_TIME_STAMP_UNITS_PER_MICROSECOND] = timeStampTicksPerMs / 1000;
|
|
||||||
systemConstants[ES_SYSTEM_CONSTANT_OPTIMAL_WORK_QUEUE_THREAD_COUNT] = scheduler.currentProcessorID; // TODO Update this as processors are added/removed.
|
|
||||||
SYSCALL_WRITE(argument0, systemConstants, sizeof(systemConstants));
|
|
||||||
SYSCALL_RETURN(ES_SUCCESS, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
SYSCALL_IMPLEMENT(ES_SYSCALL_SYSTEM_TAKE_SNAPSHOT) {
|
SYSCALL_IMPLEMENT(ES_SYSCALL_SYSTEM_TAKE_SNAPSHOT) {
|
||||||
SYSCALL_PERMISSION(ES_PERMISSION_TAKE_SYSTEM_SNAPSHOT);
|
SYSCALL_PERMISSION(ES_PERMISSION_TAKE_SYSTEM_SNAPSHOT);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ EsPOSIXInitialise=4
|
||||||
EsFileStoreReadAll=5
|
EsFileStoreReadAll=5
|
||||||
EsPOSIXSystemCall=6
|
EsPOSIXSystemCall=6
|
||||||
EsINIParse=7
|
EsINIParse=7
|
||||||
EsSystemGetConstant=8
|
|
||||||
EsTakeSystemSnapshot=9
|
EsTakeSystemSnapshot=9
|
||||||
EsListViewFocusItem=10
|
EsListViewFocusItem=10
|
||||||
_EsInstanceCreate=11
|
_EsInstanceCreate=11
|
||||||
|
@ -444,3 +443,4 @@ EsDrawTextSimple=442
|
||||||
EsColorInterpolate=443
|
EsColorInterpolate=443
|
||||||
EsBufferReadInt32Endian=444
|
EsBufferReadInt32Endian=444
|
||||||
EsBufferWriteInt32Endian=445
|
EsBufferWriteInt32Endian=445
|
||||||
|
EsSystemGetOptimalWorkQueueThreadCount=446
|
||||||
|
|
Loading…
Reference in New Issue