package eio
Effect-based direct-style IO API for OCaml
Install
Dune Dependency
Authors
Maintainers
Sources
eio-0.13.tbz
sha256=82537ee1c5b1829fde8207614a4e39f560bd582332841290ed5ef76691f3af70
sha512=69fc509e5ed34da64c3c26fa22558ce7f0cb42afa65c864c57dbb05948e12c0f4f6ab7b77a07f8b292ea3a18748ed46deb9da6af74852115da5e938177b3bf18
doc/src/eio.runtime_events/eio_runtime_events.ml.html
Source file eio_runtime_events.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
type id = int type ty = | Fiber | Promise | Semaphore | Switch | Stream | Mutex let ty_to_uint8 = function | Fiber -> 1 | Promise -> 15 | Semaphore -> 16 | Switch -> 17 | Stream -> 18 | Mutex -> 19 let ty_of_uint8 = function | 1 -> Fiber | 15 -> Promise | 16 -> Semaphore | 17 -> Switch | 18 -> Stream | 19 -> Mutex | _ -> assert false let ty_to_string (t : ty) = match t with | Fiber -> "fiber" | Promise -> "promise" | Semaphore -> "semaphore" | Switch -> "switch" | Stream -> "stream" | Mutex -> "mutex" let string = let encode buf s = let len = min (Bytes.length buf) (String.length s) in Bytes.blit_string s 0 buf 0 len; len in let decode buf len = Bytes.sub_string buf 0 len in Runtime_events.Type.register ~encode ~decode let id_ty_type = let encode buf (id, ty) = Bytes.set_int64_le buf 0 (Int64.of_int id); Bytes.set_int8 buf 8 (ty_to_uint8 ty); 9 in let decode buf _size = let id = Bytes.get_int64_le buf 0 |> Int64.to_int in let ty = ty_of_uint8 (Bytes.get_int8 buf 8) in (id, ty) in Runtime_events.Type.register ~encode ~decode let id_string_type = let encode buf (id, msg) = (* Check size of buf and use smallest size which means we may have to truncate the label. *) let available_buf_len = Bytes.length buf - 8 in let msg_len = String.length msg in let data_len = min available_buf_len msg_len in Bytes.set_int64_le buf 0 (Int64.of_int id); Bytes.blit_string msg 0 buf 8 data_len; data_len + 8 in let decode buf size = let id = Bytes.get_int64_le buf 0 |> Int64.to_int in (id, Bytes.sub_string buf 8 (size - 8)) in Runtime_events.Type.register ~encode ~decode let exn_type = let encode buf (id, exn) = (* Check size of buf and use smallest size which means we may have to truncate the label. *) let available_buf_len = Bytes.length buf - 8 in let msg = Printexc.to_string exn in let msg_len = String.length msg in let data_len = min available_buf_len msg_len in Bytes.set_int64_le buf 0 (Int64.of_int id); Bytes.blit_string msg 0 buf 8 data_len; data_len + 8 in let decode buf size = let id = Bytes.get_int64_le buf 0 |> Int64.to_int in (id, Failure (Bytes.sub_string buf 8 (size - 8))) in Runtime_events.Type.register ~encode ~decode (* Runtime events registration *) type Runtime_events.User.tag += Create let create = Runtime_events.User.register "eio.create" Create id_ty_type type Runtime_events.User.tag += Read let read = Runtime_events.User.register "eio.read" Read Runtime_events.Type.int type Runtime_events.User.tag += Try_read let try_read = Runtime_events.User.register "eio.try_read" Try_read Runtime_events.Type.int type Runtime_events.User.tag += Resolve | Resolve_error let resolve = Runtime_events.User.register "eio.resolve" Resolve Runtime_events.Type.int let resolve_error = Runtime_events.User.register "eio.resolve_error" Resolve_error exn_type type Runtime_events.User.tag += Name let name = Runtime_events.User.register "eio.name" Name id_string_type type Runtime_events.User.tag += Log let log = Runtime_events.User.register "eio.log" Log string type Runtime_events.User.tag += Fiber let fiber = Runtime_events.User.register "eio.fiber" Fiber Runtime_events.Type.int type Runtime_events.User.tag += Signal let signal = Runtime_events.User.register "eio.signal" Signal Runtime_events.Type.int type Runtime_events.User.tag += Suspend let suspend = Runtime_events.User.register "eio.suspend" Suspend Runtime_events.Type.span type 'a handler = int -> Runtime_events.Timestamp.t -> 'a -> unit let ignore_event : _ handler = fun _ring_id _ts _data -> () let add_callbacks ?(create=ignore_event) ?(read=ignore_event) ?(try_read=ignore_event) ?(resolve=ignore_event) ?(resolve_error=ignore_event) ?(name=ignore_event) ?(log=ignore_event) ?(fiber=ignore_event) ?(signal=ignore_event) ?(suspend=ignore_event) x = let create_event ring_id ts ev v = match Runtime_events.User.tag ev with | Create -> create ring_id ts v | _ -> assert false in let int_event ring_id ts ev v = match Runtime_events.User.tag ev with | Read -> read ring_id ts v | Try_read -> try_read ring_id ts v | Resolve -> resolve ring_id ts v | Fiber -> fiber ring_id ts v | Signal -> signal ring_id ts v | _ -> () in let span_event ring_id ts ev v = match Runtime_events.User.tag ev with | Suspend -> suspend ring_id ts v | _ -> () in let int_exn_event ring_id ts ev (id, ex) = match Runtime_events.User.tag ev, ex with | Resolve_error, Failure msg -> resolve_error ring_id ts (id, msg) | _ -> () in let id_string_event ring_id ts ev v = match Runtime_events.User.tag ev with | Name -> name ring_id ts v | _ -> () in let string_event ring_id ts ev v = match Runtime_events.User.tag ev with | Log -> log ring_id ts v | _ -> () in x |> Runtime_events.Callbacks.add_user_event id_ty_type create_event |> Runtime_events.Callbacks.add_user_event Runtime_events.Type.int int_event |> Runtime_events.Callbacks.add_user_event exn_type int_exn_event |> Runtime_events.Callbacks.add_user_event string string_event |> Runtime_events.Callbacks.add_user_event id_string_type id_string_event |> Runtime_events.Callbacks.add_user_event Runtime_events.Type.span span_event
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>