summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-03-19LibCore: Use monotonic time when handling timersLiav A
2020-03-19Process: Use monotonic time for timeoutsLiav A
2020-03-19Scheduler: Use monotonic time for blocking threadsLiav A
2020-03-19Userland: Add functionality of changing system date in date utilityLiav A
2020-03-19LibC: Add new syscall to allow changing the system dateLiav A
2020-03-19Kernel: Add new syscall to allow changing the system dateLiav A
2020-03-19Kernel: Delete unnecessary filesLiav A
2020-03-19Kernel: Introduce the new Time management subsystemLiav A
This new subsystem includes better abstractions of how time will be handled in the OS. We take advantage of the existing RTC timer to aid in keeping time synchronized. This is standing in contrast to how we handled time-keeping in the kernel, where the PIT was responsible for that function in addition to update the scheduler about ticks. With that new advantage, we can easily change the ticking dynamically and still keep the time synchronized. In the process context, we no longer use a fixed declaration of TICKS_PER_SECOND, but we call the TimeManagement singleton class to provide us the right value. This allows us to use dynamic ticking in the future, a feature known as tickless kernel. The scheduler no longer does by himself the calculation of real time (Unix time), and just calls the TimeManagment singleton class to provide the value. Also, we can use 2 new boot arguments: - the "time" boot argument accpets either the value "modern", or "legacy". If "modern" is specified, the time management subsystem will try to setup HPET. Otherwise, for "legacy" value, the time subsystem will revert to use the PIT & RTC, leaving HPET disabled. If this boot argument is not specified, the default pattern is to try to setup HPET. - the "hpet" boot argumet accepts either the value "periodic" or "nonperiodic". If "periodic" is specified, the HPET will scan for periodic timers, and will assert if none are found. If only one is found, that timer will be assigned for the time-keeping task. If more than one is found, both time-keeping task & scheduler-ticking task will be assigned to periodic timers. If this boot argument is not specified, the default pattern is to try to scan for HPET periodic timers. This boot argument has no effect if HPET is disabled. In hardware context, PIT & RealTimeClock classes are merely inheriting from the HardwareTimer class, and they allow to use the old i8254 (PIT) and RTC devices, managing them via IO ports. By default, the RTC will be programmed to a frequency of 1024Hz. The PIT will be programmed to a frequency close to 1000Hz. About HPET, depending if we need to scan for periodic timers or not, we try to set a frequency close to 1000Hz for the time-keeping timer and scheduler-ticking timer. Also, if possible, we try to enable the Legacy replacement feature of the HPET. This feature if exists, instructs the chipset to disconnect both i8254 (PIT) and RTC. This behavior is observable on QEMU, and was verified against the source code: https://github.com/qemu/qemu/commit/ce967e2f33861b0e17753f97fa4527b5943c94b6 The HPETComparator class is inheriting from HardwareTimer class, and is responsible for an individual HPET comparator, which is essentially a timer. Therefore, it needs to call the singleton HPET class to perform HPET-related operations. The new abstraction of Hardware timers brings an opportunity of more new features in the foreseeable future. For example, we can change the callback function of each hardware timer, thus it makes it possible to swap missions between hardware timers, or to allow to use a hardware timer for other temporary missions (e.g. calibrating the LAPIC timer, measuring the CPU frequency, etc).
2020-03-19Kernel & LibC: Add CLOCK_REALTIME constantLiav A
2020-03-19ACPI: Delete irrelevant HPET definitionsLiav A
Also, the definition of the HPET ACPI table is correct now, in accordance to the HPET specification, revision 1.0a, October 2004.
2020-03-19Interrupts: Add an interface to determine if SMP is enabledLiav A
2020-03-19Kernel: Use a const reference to RegisterState in IRQ handlingLiav A
2020-03-19Kernel: Remove unnecessary include from PATAChannel.cppLiav A
2020-03-19Kernel: Add the NonMaskableInterruptDisabler classLiav A
This class will be used later to disable NMIs when we initialize the RTC timer.
2020-03-19LibJS: Parse FunctionExpressionsAndreas Kling
FunctionExpression is mostly like FunctionDeclaration, except the name is optional. Share the parsing logic in parse_function_node<NodeType>. This allows us to do nice things like: document.addEventListener("DOMContentLoaded", function() { alert("Hello friends!"); });
2020-03-19LibJS: Add FunctionExpression AST nodeAndreas Kling
Most of the code is shared with FunctionDeclaration, so the shared bits are moved up into a common base called FunctionNode.
2020-03-19LibJS: Fix reference leak in ASTNode::append()Andreas Kling
Using make<T> like this would create an unadopted object whose refcount would never reach zero.
2020-03-19Kernel: Resolve relative paths when there is a veil (#1474)Alex Muscar
2020-03-19Calendar: Allow the widget to resize with the windowrhin123
2020-03-19Calendar: Make const arrays static as wellrhin123
2020-03-19Calendar: Don't assign next_month button variable to add_event buttonrhin123
2020-03-18LibJS: Add missing copyright headersAndreas Kling
2020-03-18LibWeb: Add missing copyright headersAndreas Kling
2020-03-18LibWeb: Use a JS::Handle to keep the EventListener function aliveAndreas Kling
2020-03-18LibJS: Add Handle<T>, a strong C++ handle for keeping GC objects aliveAndreas Kling
This is pretty heavy and unoptimized, but it will do the trick for now. Basically, Heap now has a HashTable<HandleImpl*> and you can call JS::make_handle(T*) to construct a Handle<T> that guarantees that the pointee will always survive GC until the Handle<T> is destroyed.
2020-03-18LibWeb: Fire "mousedown" and "mousemove" events in the DOM :^)Andreas Kling
2020-03-18LibWeb: Start working on DOM event supportAndreas Kling
This patch adds the EventTarget class and makes Node inherit from it. You can register event listeners on an EventTarget, and when you call dispatch_event() on it, the event listeners will get invoked. An event listener is basically a wrapper around a JS::Function*. This is pretty far from how DOM events should eventually work, but it's a place to start and we'll build more on top of this. :^)
2020-03-18LibJS: Tolerate NativeFunction::call() with non-object 'this' for nowAndreas Kling
I'm not exactly sure why we end up in this situation, we'll have to look into it.
2020-03-18LibJS: Add Function to Forward.hAndreas Kling
2020-03-18LibJS: Add Interpreter::call(Function*, this_value, arguments)Andreas Kling
This helper function takes care of pushing/popping a call frame so you don't need to worry about it.
2020-03-18Browser: Fix unintentional Web::Element copyAndreas Kling
2020-03-18HackStudio: Expand project tree view by defaultOriko
2020-03-18LibWeb: Don't try to repaint frameless documents in CSSStyleValueAndreas Kling
2020-03-18LibJS: Make the AST reference-countedAndreas Kling
This allows function objects to outlive the original parsed program without their ScopeNode disappearing.
2020-03-18Terminal: Remove working directory argumentItamar
Applications that want to spawn Terminal in a specific directory should chdir to it before execing it.
2020-03-18Taskbar: chdir to home directory before launching appsItamar
2020-03-18SystemMenu: chdir to home directory before launching appsItamar
2020-03-18FileManager: chdir to appropriate directory before starting TerminalItamar
2020-03-18SystemServer: Add WorkingDirectory supportItamar
Services can now have their initial working directory configured via `SystemServer.ini`. This commit also configures Terminal's working directory to be /home/anon
2020-03-18Calendar: Implement basic GUI calendar applicationrhin123
2020-03-18LibCore: Moved cal.cpp functions to DateTimerhin123
2020-03-17LibJS: Implement typeof operatorConrad Pankoff
2020-03-17LibJS: Pass argument value vectors as const Vector<Value>&Andreas Kling
Now that Interpreter keeps all arguments in the CallFrame stack, we can just pass a const-reference to the CallFrame's argument vector to each function handler (instead of copying it.)
2020-03-17LibJS: Protect function call "this" and arguments from GCAndreas Kling
This patch adds a CallFrame stack to Interpreter, which keeps track of the "this" value and all argument values passed in function calls. Interpreter::gather_roots() scans the call stack, making sure that all argument values get marked. :^)
2020-03-17Base: Add Joi thememarprok
2020-03-16LibJS+js: Add a debug option (js -g) to GC after every allocationAndreas Kling
This is very useful for discovering collector bugs.
2020-03-16LibJS: Implement basic conservative garbage collectionAndreas Kling
We now scan the stack and CPU registers for potential pointers into the GC heap, and include any valid Cell pointers in the set of roots. This works pretty well but we'll also need to solve marking of things passed to native functions, since those are currently in Vector<Value> and the Vector storage is on the heap (not scanned.)
2020-03-16Kernel: Add sys$get_stack_bounds() for finding the stack base & sizeAndreas Kling
This will be useful when implementing conservative garbage collection.
2020-03-16LibJS: Replace the global print() function with console.log() :^)Andreas Kling
2020-03-16LibJS: Add "Heap" and "Runtime" subdirectoriesAndreas Kling
Let's try to keep LibJS tidy as it expands. :^)