Andreas Kling
0d0230ab10
JsonParser: Fold extract_while() into parse_number()
...
It wasn't unsed anywhere else anyway, and this is actually ~1% faster
on the load_4chan_catalog benchmark.
2019-08-04 20:23:46 +02:00
Andreas Kling
a846ee76ea
AK: Add VectorIterator::index()
...
A simple helper function that extracts the index of an iterator.
Note that the index is not valid if the iterator is end().
2019-08-04 20:18:18 +02:00
Andreas Kling
2a89bb2ac4
Vector: Add find() and some iterator improvements
...
Vector now has find() just like HashTable. I also made the iterator
comparison functions const-correct.
2019-08-04 19:21:08 +02:00
Andreas Kling
539985f4fe
HashTable: Use the Bucket type in some places over SinglyLinkedList<T>
...
This is just for consistency, and we might want to switch to another
bucket type some day.
2019-08-04 19:20:20 +02:00
Andreas Kling
b5aac9c44b
CHttpJob: Drive response download via on_ready_read instead of blocking
...
This allows the event loop to service events while an HTTP download is
happening. Pretty cool :^)
2019-08-04 18:59:06 +02:00
Andreas Kling
72b69b82bb
JsonParser: Oops, fix build.
2019-08-04 18:59:06 +02:00
Conrad Pankoff
cd235ce27d
Ports: mbedtls
...
This is a very basic mbedtls port. I've disabled the networking bits,
since they want some macros that we don't have defined. We might not even
want the networking functions anyway, since they wouldn't play very nice
with CEventLoop and friends.
2019-08-04 18:54:12 +02:00
Conrad Pankoff
c0ba6f69f0
LibC: Define SIZE_MAX
...
According to the internet, this is a safe way to define SIZE_MAX. There
may be a better way to do it, but this worked for me.
2019-08-04 18:46:58 +02:00
Andreas Kling
4e004a664f
JsonParser: Cache the last seen string starting with each possible char
...
Keep a 256-entry string cache during parse to avoid creating some new
strings when possible. This cache is far from perfect but very cheap.
Since none of the strings are transient, this only costs us a couple of
pointers and a bit of ref-count manipulation.
The cache hit rate on 4chan_catalog.json is ~33% and the speedup on
the load_4chan_catalog benchmark is ~7%.
2019-08-04 18:41:24 +02:00
Andreas Kling
a8740f82eb
CHttpJob: Collect the payload as a list of buffers during download
...
Instead of growing the payload buffer as-we-go. This avoids wasting a
ton of time on buffer reallocation for non-trivial payloads.
2019-08-04 14:54:25 +02:00
Andreas Kling
d0c1724d5b
ChanViewer: Give this application a simple window icon
2019-08-04 14:53:32 +02:00
Andreas Kling
3eb1a7f8f8
AK: Add a benchmark for parsing 4chan catalog JSON
...
I was able to get parsing time down to about 1/3 of the original time
by using callgrind+kcachegrind. There's definitely more improvements
that can be made here, but I'm gonna be happy with this for now. :^)
2019-08-04 11:57:32 +02:00
Andreas Kling
b62a12c687
JsonParser: Some minor optimizations
...
- Return more specific types from parse_array() and parse_object().
- Don't create a throwaway String in extract_while().
- Use a StringView in parse_number() to avoid a throwaway String.
2019-08-04 11:47:21 +02:00
Andreas Kling
93596dc00d
JsonObject: Add move constructors for JsonObject(Json{Array,Object}&&)
...
This also helps avoid JsonValue copying during parse.
2019-08-04 11:46:31 +02:00
Andreas Kling
82826104e0
Json: Add efficient copy and move constructors for Json{Array,Object}
...
This helps avoid copying JsonValues during parsing.
2019-08-04 11:45:16 +02:00
Andreas Kling
cce2ea9bb0
AK: Add StringView::to_int()
...
This is a shameless copy-paste of String::to_int(). We should find some
way to share this code between String and StringView instead of having
two duplicate copies like this.
2019-08-04 11:44:20 +02:00
Andreas Kling
c55129e573
JsonParser: Use Vector<char, 1024> instead of StringBuilder in parsing
...
This is a 10-12% speedup on the 4chan thread catalog JSON.
2019-08-04 10:38:15 +02:00
Andreas Kling
e38f78faf5
ChanViewer: Show the time of each post in the thread catalog
2019-08-04 10:15:06 +02:00
Andreas Kling
030891531b
ChanViewer: Start working on a simple read-only 4Chan viewer
...
Since they are nice enough to provide a JSON API over HTTP, this makes
for a perfect way to exercise our networking code a bit. :^)
2019-08-04 10:10:38 +02:00
Andreas Kling
210550d4b3
JsonArray: Expose the value vector to the outside for convenience
...
Sometimes it's easier to just work with a const Vector<JsonValue>&,
so give clients the option of doing that.
2019-08-04 10:05:02 +02:00
Andreas Kling
675aa550a4
Kernel: Put IPv4 and TCP related debug spam behind flags
...
...and turn those flags off for now, to make it possible to write some
networking code without being spammed to death.
2019-08-04 10:04:06 +02:00
Andreas Kling
273d9d6cf5
CHttpJob: If no "Content-Length" header was received, read until EOF
...
Instead of aborting after receiving the first chunk, we have to keep
reading until EOF.
2019-08-04 09:26:08 +02:00
Andreas Kling
6797f71e73
JsonParser: When encountering \uXXXX, just emit a "?" for now.
2019-08-04 08:58:45 +02:00
Andreas Kling
f37c8f618b
Terminal: Paint bold text with a bold font.
...
This was really straightforward since all the necessary pieces were
already in place. This patch just passes a bold font to draw_glyphs()
for buffer cells with the bold attribute set. :^)
2019-08-04 08:15:30 +02:00
Andreas Kling
7d08116a6d
LibDraw: Add Font::default_bold_fixed_width_font()
...
We need a way to get a bold version of the default fixed-width font.
2019-08-04 08:14:53 +02:00
Andreas Kling
116d551f82
IPCCompiler: Don't generate "OwnPtr<void>" as a handle() return type
...
This was happening for async (response-less) messages, since they were
returning void and were were always just wrapping the return type in
an OwnPtr no matter what.
2019-08-03 21:34:08 +02:00
Andreas Kling
3100e8dee5
IPCCompiler+AudioServer: Accept "//"-style comments in IPC defintions
2019-08-03 21:29:09 +02:00
Andreas Kling
0f0b00dc1f
Lagom: Add a simple IPC client and server for host-side testing
...
Add LibIPC to the Lagom build, and also implement two little test apps
so we can run IPC tests on other systems.
2019-08-03 20:57:57 +02:00
Andreas Kling
8e684f0959
AudioServer: Port to the new generated IPC mechanism
...
Fork the IPC Connection classes into Server:: and Client::ConnectionNG.
The new IPC messages are serialized very snugly instead of using the
same generic data structure for all messages.
Remove ASAPI.h since we now generate all of it from AudioServer.ipc :^)
2019-08-03 19:49:19 +02:00
Andreas Kling
3519b6c201
IPCCompiler: More work towards AudioServer bringup
...
- Add IEndpoint::handle(IMessage), a big switch table on message type.
handle() will return a response message for synchronous messages,
and return nullptr otherwise.
- Use i32 instead of int for everything
- Make IMessage::encode() const
- Make IEndpoint::decode_message() static, this allows template code to
decode messages without an endpoint instance on hand.
2019-08-03 19:24:08 +02:00
Andreas Kling
18aeda2e0d
BufferStream: It's not an error to read up to the very end of a buffer
...
Don't signal an error before we've reached the very end of the buffer.
2019-08-03 19:20:05 +02:00
Andreas Kling
6e956f2a0b
BufferStream: Add operator<<(const char*) overload
...
Ext2FS was relying on the presence of a (StringView) overload here and
when I added a (bool) overload, it started choosing that for literals.
2019-08-03 19:02:48 +02:00
Andreas Kling
3c1bad99a2
AudioServer: Link against LibIPC
...
We're not using any of the functionality yet, but soon...
2019-08-03 17:25:54 +02:00
Andreas Kling
8dd07c3075
IPCCompiler: Emit message parameter getters
...
For simplicity's sake, they are all "const type& name() const"
2019-08-03 17:24:47 +02:00
Andreas Kling
c255cedd7a
IPCCompiler: Make decode_message() return nullptr for unknown messages
2019-08-03 17:06:24 +02:00
Andreas Kling
925c8f42f8
IPCCompiler: Generate message decoding functions
...
An endpoint now knows how to decode a ByteBuffer into an IMessage.
2019-08-03 17:03:44 +02:00
Andreas Kling
b04dae7faa
BufferStream: Support "bool" as a streaming type
2019-08-03 17:02:42 +02:00
Andreas Kling
659ddddd20
IPCCompiler: Emit IEndpoint::name() overrides
2019-08-03 16:44:27 +02:00
Andreas Kling
4fc15c9e6e
AudioServer: The EnqueueBuffer response needs a success boolean
...
This was already in the current version of the code, I'm just updating
the soon-to-be-current IPC protocol version of it. :^)
2019-08-03 16:41:58 +02:00
Andreas Kling
36b352554e
IPCCompiler: Emit message constructors + include ID in serialization
2019-08-03 16:35:49 +02:00
Andreas Kling
05e08afcd8
IPCCompiler: Generate getters for message ID's and message names
...
Each endpoint namespace will have an enum class MessageID where you can
find all of its messages.
2019-08-03 16:19:14 +02:00
Andreas Kling
fae3091999
IPCCompiler: Typedef the response message types as "ResponseType"
...
Each message will now have a typedef called ResponseType as an alias
for the expected response type. This will aid in implementing the sync
messaging code.
2019-08-03 16:06:40 +02:00
Andreas Kling
016335edde
IPCCompiler: Generate endpoint and message classes
...
These are not entirely finished but it's starting to take shape. :^)
2019-08-03 15:50:16 +02:00
Andreas Kling
a40e763b2a
LibIPC: Start fleshing out a separate IPC library
...
This will be a place to put object serialization/deserialization logic,
message parsing, endpoint management, etc.
2019-08-03 15:29:40 +02:00
Andreas Kling
aa8a3d4a89
IPCCompiler: Start working on a simple IPC definition language
...
Instead of doing everything manually in C++, let's do some codegen.
This patch adds a crude but effective IPC definition parser, along
with two initial definition files for the AudioServer's client and
server endpoints.
2019-08-03 15:17:41 +02:00
Andreas Kling
c5903ec4bb
AK: Remove two redundant RefPtr constructors.
...
We already have constructors for "const T*" and "const T&" so we don't
need to have non-const variants.
2019-08-03 14:16:05 +02:00
Andreas Kling
69281c22d4
FontEditor(UI): Update the groupbox to have the right background color
2019-08-03 11:39:34 +02:00
Andreas Kling
47511b5930
GWidget: Implement set_backcolor() and set_forecolor()
...
These are set-color-from-string variants used by the VisualBuilder's
code generator.
2019-08-03 11:35:10 +02:00
Andreas Kling
54c77cb714
GVariant: Try to do color string parsing in GVariant::to_color()
...
If the underlying variant type is a String, try to parse out a color
when to_color() is called.
This makes VisualBuilder apply the saved colors when loading forms.
2019-08-03 11:34:02 +02:00
Andreas Kling
e43b27a3fa
LibDraw: Add Color::from_string(StringView)
...
This parses hex colors in either #RRGGBBAA or #RRGGBB format.
No other formats are supported at the moment.
2019-08-03 11:33:34 +02:00