mirror of
https://github.com/penpot/penpot.git
synced 2026-04-28 20:58:06 +00:00
⚡ Remove several not necessary allocations from set-grid-layout-cells
This commit is contained in:
parent
4237ef572e
commit
33d6f543a1
@ -5,7 +5,8 @@
|
||||
;; Copyright (c) KALEIDOS INC
|
||||
|
||||
(ns app.common.buffer
|
||||
"A collection of helpers and macros for work with byte buffers"
|
||||
"A collection of helpers and macros for work with byte
|
||||
buffer (ByteBuffer on JVM and DataView on JS)."
|
||||
(:refer-clojure :exclude [clone])
|
||||
(:require
|
||||
[app.common.uuid :as uuid])
|
||||
@ -81,6 +82,13 @@
|
||||
(let [target (with-meta target {:tag 'java.nio.ByteBuffer})]
|
||||
`(.put ~target ~offset (unchecked-byte ~value)))))
|
||||
|
||||
(defmacro write-u8
|
||||
[target offset value]
|
||||
(if (:ns &env)
|
||||
`(.setUint8 ~target ~offset ~value true)
|
||||
(let [target (with-meta target {:tag 'java.nio.ByteBuffer})]
|
||||
`(.put ~target ~offset (unchecked-byte ~value)))))
|
||||
|
||||
(defmacro write-bool
|
||||
[target offset value]
|
||||
(if (:ns &env)
|
||||
@ -102,6 +110,11 @@
|
||||
(let [target (with-meta target {:tag 'java.nio.ByteBuffer})]
|
||||
`(.putInt ~target ~offset (unchecked-int ~value)))))
|
||||
|
||||
(defmacro write-i32
|
||||
"Idiomatic alias for `write-int`"
|
||||
[target offset value]
|
||||
`(write-int ~target ~offset ~value))
|
||||
|
||||
(defmacro write-float
|
||||
[target offset value]
|
||||
(if (:ns &env)
|
||||
@ -109,6 +122,11 @@
|
||||
(let [target (with-meta target {:tag 'java.nio.ByteBuffer})]
|
||||
`(.putFloat ~target ~offset (unchecked-float ~value)))))
|
||||
|
||||
(defmacro write-f32
|
||||
"Idiomatic alias for `write-float`."
|
||||
[target offset value]
|
||||
`(write-float ~target ~offset ~value))
|
||||
|
||||
(defmacro write-uuid
|
||||
[target offset value]
|
||||
(if (:ns &env)
|
||||
|
||||
@ -496,51 +496,50 @@
|
||||
|
||||
(defn set-grid-layout-cells
|
||||
[cells]
|
||||
(let [entries (vals cells)
|
||||
size (mem/get-alloc-size cells GRID-LAYOUT-CELL-U8-SIZE)
|
||||
(let [size (mem/get-alloc-size cells GRID-LAYOUT-CELL-U8-SIZE)
|
||||
offset (mem/alloc size)
|
||||
heap (-> (mem/get-heap-u8)
|
||||
(mem/view offset size))]
|
||||
dview (mem/get-data-view)]
|
||||
|
||||
(loop [entries (seq entries)
|
||||
current-offset 0]
|
||||
(when-not (empty? entries)
|
||||
(let [cell (first entries)]
|
||||
(reduce-kv (fn [offset _ cell]
|
||||
;; row: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 0) (get cell :row))
|
||||
|
||||
;; row: [u8; 4],
|
||||
(.set heap (sr/i32->u8 (:row cell)) (+ current-offset 0))
|
||||
;; row_span: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 4) (get cell :row-span))
|
||||
|
||||
;; row_span: [u8; 4],
|
||||
(.set heap (sr/i32->u8 (:row-span cell)) (+ current-offset 4))
|
||||
;; column: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 8) (get cell :column))
|
||||
|
||||
;; column: [u8; 4],
|
||||
(.set heap (sr/i32->u8 (:column cell)) (+ current-offset 8))
|
||||
;; column_span: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 12) (get cell :column-span))
|
||||
|
||||
;; column_span: [u8; 4],
|
||||
(.set heap (sr/i32->u8 (:column-span cell)) (+ current-offset 12))
|
||||
;; has_align_self: u8,
|
||||
(mem/write-bool dview (+ offset 16) (some? (get cell :align-self)))
|
||||
|
||||
;; has_align_self: u8,
|
||||
(.set heap (sr/bool->u8 (some? (:align-self cell))) (+ current-offset 16))
|
||||
;; align_self: u8,
|
||||
(mem/write-u8 dview (+ offset 17) (get cell :align-self))
|
||||
|
||||
;; align_self: u8,
|
||||
(.set heap (sr/u8 (sr/translate-align-self (:align-self cell))) (+ current-offset 17))
|
||||
;; has_justify_self: u8,
|
||||
(mem/write-bool dview (+ offset 18) (get cell :justify-self))
|
||||
|
||||
;; has_justify_self: u8,
|
||||
(.set heap (sr/bool->u8 (some? (:justify-self cell))) (+ current-offset 18))
|
||||
;; justify_self: u8,
|
||||
(mem/write-u8 dview (+ offset 19) (sr/translate-justify-self (get cell :justify-self)))
|
||||
|
||||
;; justify_self: u8,
|
||||
(.set heap (sr/u8 (sr/translate-justify-self (:justify-self cell))) (+ current-offset 19))
|
||||
(let [shape-id (-> (get cell :shapes) first)]
|
||||
;; has_shape_id: u8,
|
||||
;; (.set heap (sr/bool->u8 (d/not-empty? (:shapes cell))) (+ current-offset 20))
|
||||
(mem/write-u8 dview (+ offset 20) (some? shape-id))
|
||||
|
||||
;; has_shape_id: u8,
|
||||
(.set heap (sr/bool->u8 (d/not-empty? (:shapes cell))) (+ current-offset 20))
|
||||
;; shape_id_a: [u8; 4],
|
||||
;; shape_id_b: [u8; 4],
|
||||
;; shape_id_c: [u8; 4],
|
||||
;; shape_id_d: [u8; 4],
|
||||
(mem/write-uuid dview (+ offset 21) (d/nilv shape-id uuid/zero)))
|
||||
|
||||
;; shape_id_a: [u8; 4],
|
||||
;; shape_id_b: [u8; 4],
|
||||
;; shape_id_c: [u8; 4],
|
||||
;; shape_id_d: [u8; 4],
|
||||
(.set heap (sr/uuid->u8 (or (-> cell :shapes first) uuid/zero)) (+ current-offset 21))
|
||||
(+ offset GRID-LAYOUT-CELL-U8-SIZE))
|
||||
|
||||
(recur (rest entries) (+ current-offset GRID-LAYOUT-CELL-U8-SIZE)))))
|
||||
offset
|
||||
cells)
|
||||
|
||||
(h/call wasm/internal-module "_set_grid_cells")))
|
||||
|
||||
|
||||
@ -81,9 +81,24 @@
|
||||
(defn write-u8
|
||||
"Write unsigned int8. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-byte target offset value))
|
||||
(buf/write-u8 target offset value))
|
||||
|
||||
(defn write-f32
|
||||
"Write float32. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-float target offset value))
|
||||
(buf/write-f32 target offset value))
|
||||
|
||||
(defn write-i32
|
||||
"Write int32. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-i32 target offset value))
|
||||
|
||||
(defn write-bool
|
||||
"Write int32. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-bool target offset value))
|
||||
|
||||
(defn write-uuid
|
||||
"Write uuid. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-uuid target offset value))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user