aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api/private/defs.h
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-06-08 22:02:02 +0200
committerbfredl <bjorn.linse@gmail.com>2022-06-20 12:44:56 +0200
commit5d6987210578f5f1c3151988b99a9411f9603374 (patch)
treec8d1b70ef948a4beafe82195431f1c6607fbe8b7 /src/nvim/api/private/defs.h
parentb2ed439bd5ab1b431bb61f8754554c48453495c5 (diff)
downloadrneovim-5d6987210578f5f1c3151988b99a9411f9603374.tar.gz
rneovim-5d6987210578f5f1c3151988b99a9411f9603374.tar.bz2
rneovim-5d6987210578f5f1c3151988b99a9411f9603374.zip
perf(ui): reduce allocation overhead when encoding "redraw" events
Note for external UIs: Nvim can now emit multiple "redraw" event batches before a final "flush" event is received. To retain existing behavior, clients should make sure to update visible state at an explicit "flush" event, not just the end of a "redraw" batch of event. * Get rid of copy_object() blizzard in the auto-generated ui_event layer * Special case "grid_line" by encoding screen state directly to msgpack events with no intermediate API events. * Get rid of the arcane notion of referring to the screen as the "shell" * Array and Dictionary are kvec_t:s, so define them as such. * Allow kvec_t:s, such as Arrays and Dictionaries, to be allocated with a predetermined size within an arena. * Eliminate redundant capacity checking when filling such kvec_t:s with values.
Diffstat (limited to 'src/nvim/api/private/defs.h')
-rw-r--r--src/nvim/api/private/defs.h15
1 files changed, 4 insertions, 11 deletions
diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h
index 396fab721d..b1e0dd364c 100644
--- a/src/nvim/api/private/defs.h
+++ b/src/nvim/api/private/defs.h
@@ -6,9 +6,10 @@
#include <string.h>
#include "nvim/func_attr.h"
+#include "nvim/lib/kvec.h"
#include "nvim/types.h"
-#define ARRAY_DICT_INIT { .size = 0, .capacity = 0, .items = NULL }
+#define ARRAY_DICT_INIT KV_INITIAL_VALUE
#define STRING_INIT { .data = NULL, .size = 0 }
#define OBJECT_INIT { .type = kObjectTypeNil }
#define ERROR_INIT { .type = kErrorTypeNone, .msg = NULL }
@@ -84,18 +85,10 @@ REMOTE_TYPE(Window);
REMOTE_TYPE(Tabpage);
typedef struct object Object;
-
-typedef struct {
- Object *items;
- size_t size, capacity;
-} Array;
+typedef kvec_t(Object) Array;
typedef struct key_value_pair KeyValuePair;
-
-typedef struct {
- KeyValuePair *items;
- size_t size, capacity;
-} Dictionary;
+typedef kvec_t(KeyValuePair) Dictionary;
typedef enum {
kObjectTypeNil = 0,