flok 0.0.38 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/drivers/chrome/src/dispatch.js +41 -6
- data/app/drivers/chrome/src/persist.js +1 -10
- data/app/kern/dispatch.js +17 -23
- data/app/kern/gen_id.js +8 -0
- data/app/kern/macro.rb +20 -18
- data/app/kern/pagers/pg_spec0.js +20 -0
- data/app/kern/services/vm.rb +176 -30
- data/docs/client_api.md +3 -1
- data/docs/compilation.md +1 -1
- data/docs/dispatch.md +91 -0
- data/docs/kernel_api.md +3 -2
- data/docs/messaging.md +6 -1
- data/docs/mod/persist.md +4 -3
- data/docs/project_layout.md +2 -2
- data/docs/services/vm.md +116 -41
- data/docs/services/vm/pagers.md +38 -46
- data/lib/flok.rb +1 -0
- data/lib/flok/build.rb +3 -4
- data/lib/flok/macro.rb +27 -0
- data/lib/flok/services_compiler.rb +12 -8
- data/lib/flok/user_compiler.rb +131 -4
- data/lib/flok/version.rb +1 -1
- data/spec/env/kern.rb +71 -0
- data/spec/etc/macro_spec.rb +3 -8
- data/spec/etc/service_compiler/service3.rb +27 -0
- data/spec/etc/services_compiler_spec.rb +35 -27
- data/spec/iface/driver/dispatch_spec.rb +20 -0
- data/spec/iface/driver/persist_spec.rb +9 -24
- data/spec/iface/kern/ping_spec.rb +3 -24
- data/spec/kern/assets/vm/config4.rb +12 -0
- data/spec/kern/assets/vm/controller10.rb +26 -0
- data/spec/kern/assets/vm/controller11.rb +33 -0
- data/spec/kern/assets/vm/controller12.rb +45 -0
- data/spec/kern/assets/vm/controller13.rb +40 -0
- data/spec/kern/assets/vm/controller14.rb +14 -0
- data/spec/kern/assets/vm/controller15.rb +15 -0
- data/spec/kern/assets/vm/controller16.rb +29 -0
- data/spec/kern/assets/vm/controller17.rb +30 -0
- data/spec/kern/assets/vm/controller18.rb +28 -0
- data/spec/kern/assets/vm/controller19.rb +14 -0
- data/spec/kern/assets/vm/controller19b.rb +15 -0
- data/spec/kern/assets/vm/controller20.rb +19 -0
- data/spec/kern/assets/vm/controller21.rb +40 -0
- data/spec/kern/assets/vm/controller7.rb +18 -0
- data/spec/kern/assets/vm/controller8.rb +38 -0
- data/spec/kern/assets/vm/controller8b.rb +18 -0
- data/spec/kern/assets/vm/controller9.rb +20 -0
- data/spec/kern/assets/vm/controller_exc_2watch.rb +15 -0
- data/spec/kern/assets/vm/controller_exc_ewatch.rb +14 -0
- data/spec/kern/assets/vm/macros/copy_page_c.rb +23 -0
- data/spec/kern/assets/vm/macros/entry_del_c.rb +18 -0
- data/spec/kern/assets/vm/macros/entry_insert_c.rb +21 -0
- data/spec/kern/assets/vm/macros/entry_mutable_c.rb +33 -0
- data/spec/kern/assets/vm/macros/new_page_c.rb +7 -0
- data/spec/kern/assets/vm/macros/new_page_c2.rb +7 -0
- data/spec/kern/assets/vm/macros/set_page_head_c.rb +18 -0
- data/spec/kern/assets/vm/macros/set_page_next_c.rb +18 -0
- data/spec/kern/controller_macro_spec.rb +186 -0
- data/spec/kern/dispatch_spec.rb +125 -0
- data/spec/kern/functions_spec.rb +15 -0
- data/spec/kern/vm_service_spec.rb +874 -173
- metadata +70 -5
- data/docs/scheduling.md +0 -46
- data/spec/kern/rest_service_spec.rb +0 -45
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flok
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.39
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- seo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: execjs
|
@@ -296,6 +296,7 @@ files:
|
|
296
296
|
- app/kern/controller.js
|
297
297
|
- app/kern/crc32.js
|
298
298
|
- app/kern/dispatch.js
|
299
|
+
- app/kern/gen_id.js
|
299
300
|
- app/kern/macro.rb
|
300
301
|
- app/kern/mod/controller.js
|
301
302
|
- app/kern/mod/debug.js
|
@@ -308,6 +309,7 @@ files:
|
|
308
309
|
- app/kern/mod/ui.js
|
309
310
|
- app/kern/net_cb.js
|
310
311
|
- app/kern/pagers/mem_pager.js
|
312
|
+
- app/kern/pagers/pg_spec0.js
|
311
313
|
- app/kern/pagers/sockio_pager.js
|
312
314
|
- app/kern/pagers/spec0.js
|
313
315
|
- app/kern/pagers/spec1.js
|
@@ -325,6 +327,7 @@ files:
|
|
325
327
|
- docs/controllers.md
|
326
328
|
- docs/datatypes.md
|
327
329
|
- docs/debug_server.md
|
330
|
+
- docs/dispatch.md
|
328
331
|
- docs/drivers.md
|
329
332
|
- docs/environmentals.md
|
330
333
|
- docs/images/flok_arch.png
|
@@ -347,7 +350,6 @@ files:
|
|
347
350
|
- docs/project.md
|
348
351
|
- docs/project_layout.md
|
349
352
|
- docs/rakefile.md
|
350
|
-
- docs/scheduling.md
|
351
353
|
- docs/services.md
|
352
354
|
- docs/services/rest.md
|
353
355
|
- docs/services/vm.md
|
@@ -357,6 +359,7 @@ files:
|
|
357
359
|
- lib/flok.rb
|
358
360
|
- lib/flok/build.rb
|
359
361
|
- lib/flok/interactive.rb
|
362
|
+
- lib/flok/macro.rb
|
360
363
|
- lib/flok/platform.rb
|
361
364
|
- lib/flok/project.rb
|
362
365
|
- lib/flok/project_template/Gemfile.erb
|
@@ -394,6 +397,7 @@ files:
|
|
394
397
|
- spec/etc/service_compiler/config2.rb
|
395
398
|
- spec/etc/service_compiler/service0.rb
|
396
399
|
- spec/etc/service_compiler/service1.rb
|
400
|
+
- spec/etc/service_compiler/service3.rb
|
397
401
|
- spec/etc/service_compiler/service_bad_type.rb
|
398
402
|
- spec/etc/services_compiler_spec.rb
|
399
403
|
- spec/etc/transition_compiler/trans0.rb
|
@@ -1115,6 +1119,7 @@ files:
|
|
1115
1119
|
- spec/iface/driver/controller_spec.rb
|
1116
1120
|
- spec/iface/driver/debug_socketio_spec.rb
|
1117
1121
|
- spec/iface/driver/debug_spec.rb
|
1122
|
+
- spec/iface/driver/dispatch_spec.rb
|
1118
1123
|
- spec/iface/driver/net_spec.rb
|
1119
1124
|
- spec/iface/driver/persist_spec.rb
|
1120
1125
|
- spec/iface/driver/ping_spec.rb
|
@@ -1160,22 +1165,51 @@ files:
|
|
1160
1165
|
- spec/kern/assets/vm/config1.rb
|
1161
1166
|
- spec/kern/assets/vm/config2.rb
|
1162
1167
|
- spec/kern/assets/vm/config3.rb
|
1168
|
+
- spec/kern/assets/vm/config4.rb
|
1163
1169
|
- spec/kern/assets/vm/controller0.rb
|
1164
1170
|
- spec/kern/assets/vm/controller1.rb
|
1171
|
+
- spec/kern/assets/vm/controller10.rb
|
1172
|
+
- spec/kern/assets/vm/controller11.rb
|
1173
|
+
- spec/kern/assets/vm/controller12.rb
|
1174
|
+
- spec/kern/assets/vm/controller13.rb
|
1175
|
+
- spec/kern/assets/vm/controller14.rb
|
1176
|
+
- spec/kern/assets/vm/controller15.rb
|
1177
|
+
- spec/kern/assets/vm/controller16.rb
|
1178
|
+
- spec/kern/assets/vm/controller17.rb
|
1179
|
+
- spec/kern/assets/vm/controller18.rb
|
1180
|
+
- spec/kern/assets/vm/controller19.rb
|
1181
|
+
- spec/kern/assets/vm/controller19b.rb
|
1165
1182
|
- spec/kern/assets/vm/controller2.rb
|
1183
|
+
- spec/kern/assets/vm/controller20.rb
|
1184
|
+
- spec/kern/assets/vm/controller21.rb
|
1166
1185
|
- spec/kern/assets/vm/controller3.rb
|
1167
1186
|
- spec/kern/assets/vm/controller4.rb
|
1168
1187
|
- spec/kern/assets/vm/controller5.rb
|
1169
1188
|
- spec/kern/assets/vm/controller6.rb
|
1189
|
+
- spec/kern/assets/vm/controller7.rb
|
1190
|
+
- spec/kern/assets/vm/controller8.rb
|
1191
|
+
- spec/kern/assets/vm/controller8b.rb
|
1192
|
+
- spec/kern/assets/vm/controller9.rb
|
1193
|
+
- spec/kern/assets/vm/controller_exc_2watch.rb
|
1194
|
+
- spec/kern/assets/vm/controller_exc_ewatch.rb
|
1195
|
+
- spec/kern/assets/vm/macros/copy_page_c.rb
|
1196
|
+
- spec/kern/assets/vm/macros/entry_del_c.rb
|
1197
|
+
- spec/kern/assets/vm/macros/entry_insert_c.rb
|
1198
|
+
- spec/kern/assets/vm/macros/entry_mutable_c.rb
|
1199
|
+
- spec/kern/assets/vm/macros/new_page_c.rb
|
1200
|
+
- spec/kern/assets/vm/macros/new_page_c2.rb
|
1201
|
+
- spec/kern/assets/vm/macros/set_page_head_c.rb
|
1202
|
+
- spec/kern/assets/vm/macros/set_page_next_c.rb
|
1170
1203
|
- spec/kern/assets/vm/service0.rb
|
1171
1204
|
- spec/kern/assets/vm/service_controller0.rb
|
1172
1205
|
- spec/kern/callout_spec.rb
|
1206
|
+
- spec/kern/controller_macro_spec.rb
|
1173
1207
|
- spec/kern/controller_spec.rb
|
1174
1208
|
- spec/kern/debug_spec.rb
|
1175
1209
|
- spec/kern/debug_ui_spec.rb
|
1210
|
+
- spec/kern/dispatch_spec.rb
|
1176
1211
|
- spec/kern/functions_spec.rb
|
1177
1212
|
- spec/kern/net_spec.rb
|
1178
|
-
- spec/kern/rest_service_spec.rb
|
1179
1213
|
- spec/kern/service_controller_spec.rb
|
1180
1214
|
- spec/kern/vm_service_spec.rb
|
1181
1215
|
- spec/lib/helpers.rb
|
@@ -1222,6 +1256,7 @@ test_files:
|
|
1222
1256
|
- spec/etc/service_compiler/config2.rb
|
1223
1257
|
- spec/etc/service_compiler/service0.rb
|
1224
1258
|
- spec/etc/service_compiler/service1.rb
|
1259
|
+
- spec/etc/service_compiler/service3.rb
|
1225
1260
|
- spec/etc/service_compiler/service_bad_type.rb
|
1226
1261
|
- spec/etc/services_compiler_spec.rb
|
1227
1262
|
- spec/etc/transition_compiler/trans0.rb
|
@@ -1943,6 +1978,7 @@ test_files:
|
|
1943
1978
|
- spec/iface/driver/controller_spec.rb
|
1944
1979
|
- spec/iface/driver/debug_socketio_spec.rb
|
1945
1980
|
- spec/iface/driver/debug_spec.rb
|
1981
|
+
- spec/iface/driver/dispatch_spec.rb
|
1946
1982
|
- spec/iface/driver/net_spec.rb
|
1947
1983
|
- spec/iface/driver/persist_spec.rb
|
1948
1984
|
- spec/iface/driver/ping_spec.rb
|
@@ -1988,22 +2024,51 @@ test_files:
|
|
1988
2024
|
- spec/kern/assets/vm/config1.rb
|
1989
2025
|
- spec/kern/assets/vm/config2.rb
|
1990
2026
|
- spec/kern/assets/vm/config3.rb
|
2027
|
+
- spec/kern/assets/vm/config4.rb
|
1991
2028
|
- spec/kern/assets/vm/controller0.rb
|
1992
2029
|
- spec/kern/assets/vm/controller1.rb
|
2030
|
+
- spec/kern/assets/vm/controller10.rb
|
2031
|
+
- spec/kern/assets/vm/controller11.rb
|
2032
|
+
- spec/kern/assets/vm/controller12.rb
|
2033
|
+
- spec/kern/assets/vm/controller13.rb
|
2034
|
+
- spec/kern/assets/vm/controller14.rb
|
2035
|
+
- spec/kern/assets/vm/controller15.rb
|
2036
|
+
- spec/kern/assets/vm/controller16.rb
|
2037
|
+
- spec/kern/assets/vm/controller17.rb
|
2038
|
+
- spec/kern/assets/vm/controller18.rb
|
2039
|
+
- spec/kern/assets/vm/controller19.rb
|
2040
|
+
- spec/kern/assets/vm/controller19b.rb
|
1993
2041
|
- spec/kern/assets/vm/controller2.rb
|
2042
|
+
- spec/kern/assets/vm/controller20.rb
|
2043
|
+
- spec/kern/assets/vm/controller21.rb
|
1994
2044
|
- spec/kern/assets/vm/controller3.rb
|
1995
2045
|
- spec/kern/assets/vm/controller4.rb
|
1996
2046
|
- spec/kern/assets/vm/controller5.rb
|
1997
2047
|
- spec/kern/assets/vm/controller6.rb
|
2048
|
+
- spec/kern/assets/vm/controller7.rb
|
2049
|
+
- spec/kern/assets/vm/controller8.rb
|
2050
|
+
- spec/kern/assets/vm/controller8b.rb
|
2051
|
+
- spec/kern/assets/vm/controller9.rb
|
2052
|
+
- spec/kern/assets/vm/controller_exc_2watch.rb
|
2053
|
+
- spec/kern/assets/vm/controller_exc_ewatch.rb
|
2054
|
+
- spec/kern/assets/vm/macros/copy_page_c.rb
|
2055
|
+
- spec/kern/assets/vm/macros/entry_del_c.rb
|
2056
|
+
- spec/kern/assets/vm/macros/entry_insert_c.rb
|
2057
|
+
- spec/kern/assets/vm/macros/entry_mutable_c.rb
|
2058
|
+
- spec/kern/assets/vm/macros/new_page_c.rb
|
2059
|
+
- spec/kern/assets/vm/macros/new_page_c2.rb
|
2060
|
+
- spec/kern/assets/vm/macros/set_page_head_c.rb
|
2061
|
+
- spec/kern/assets/vm/macros/set_page_next_c.rb
|
1998
2062
|
- spec/kern/assets/vm/service0.rb
|
1999
2063
|
- spec/kern/assets/vm/service_controller0.rb
|
2000
2064
|
- spec/kern/callout_spec.rb
|
2065
|
+
- spec/kern/controller_macro_spec.rb
|
2001
2066
|
- spec/kern/controller_spec.rb
|
2002
2067
|
- spec/kern/debug_spec.rb
|
2003
2068
|
- spec/kern/debug_ui_spec.rb
|
2069
|
+
- spec/kern/dispatch_spec.rb
|
2004
2070
|
- spec/kern/functions_spec.rb
|
2005
2071
|
- spec/kern/net_spec.rb
|
2006
|
-
- spec/kern/rest_service_spec.rb
|
2007
2072
|
- spec/kern/service_controller_spec.rb
|
2008
2073
|
- spec/kern/vm_service_spec.rb
|
2009
2074
|
- spec/lib/helpers.rb
|
data/docs/scheduling.md
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
#Scheduling
|
2
|
-
**This document has incorrect information. It is a document still under development**
|
3
|
-
Flok is capable of loading 10k images simultaneously while maintaining 1ms response time on typical JS environments for UI. This is all accomplished through its scheduling system.
|
4
|
-
|
5
|
-
##History
|
6
|
-
Traditional operating systems have a *scheduler* which puts *tasks* into a *runnable* state based on the amount of *CPU* resources that task has used. Task *fairness*, which is the amount of CPU time a task is granted, is a [heated debate](http://yarchive.net/comp/linux/fairness.html). Our scheduler is based on the concepts of the `ULE` scheduler from [FreeBSD](freebsd.org)
|
7
|
-
|
8
|
-
##Not CPU time slices. Resources.
|
9
|
-
The first departure from a traditional operating system scheduler is that *Flok* schedules **resources**, a super-set of **cpu time slices**. Additionally, Flok schedules with an evented system that does not rely on a timer (as many modern OS schedulers are moving to).
|
10
|
-
|
11
|
-
##The standard Flok resources are defined with the labels:
|
12
|
-
0. `main` - User-interface displaying, etc.
|
13
|
-
1. `net` - Downloading, Uploading, Get requests, etc.
|
14
|
-
2. `disk` - Transferring things to/from disk
|
15
|
-
3. `cpu` - Tasks that tax the cpu
|
16
|
-
4. `gpu` - Tasks that tax the gpu
|
17
|
-
5. `async` - Tasks that shouldn't run on the main thread, but are not scheduled limited.
|
18
|
-
|
19
|
-
##Flok also has two priority classes (Does not effect `main` queue):
|
20
|
-
* `high` - Things that need to happen soon.
|
21
|
-
* `low` - Things that can probably wait.
|
22
|
-
|
23
|
-
Despite the similarities among these classes, there are three distinct groups of classes. `rt` is a queue that is **never** deferred. it has the lowest latency response time and is used for UI operations. `high`, `norm`, and `low` are all **asynchronous** queues. They are **always** deferred. `idle` is also, **always** deferred, but `idle` tasks *only* run when **nothing** else is running.
|
24
|
-
|
25
|
-
##Flok tasks
|
26
|
-
Each `task` in flok is a transaction to the native device that contains a call-back and or fixed-run-time. Each `task` belongs to *N* labels and `1` class.
|
27
|
-
|
28
|
-
##Sharing the pie
|
29
|
-
Scheduling is tricky because you can't write a scheduler that just ignores everything that isn't a *high* task if there are *high* tasks queud. That kind of scheduler will never execute other tasks, even if they are of lower importance. Like `ULE`, `Flok` cuts the scheduling groups up into a pie so that a higher percentage of `high` tasks are given simultaneously and a low percentage of `med`, and lowest for `low` are given.
|
30
|
-
|
31
|
-
##Messages from the server
|
32
|
-
Messages sent via `if_dispatch` to the server have a special format that looks like this:
|
33
|
-
```javascript
|
34
|
-
msg = [
|
35
|
-
[0, 0, "ping", 1, "ping2", "hello"], => <main queue>: [0, "ping"] and [1, "ping2", "hello"]
|
36
|
-
[1, 1, "download_image", "http://testimage.com/test.png"],
|
37
|
-
[4, 1, "blur_button", 23]
|
38
|
-
]
|
39
|
-
```
|
40
|
-
|
41
|
-
The message is broken up into *3* distinct queues. The first queue, queue 0, is the **main** queue. Each queue should be interpreted in order. That
|
42
|
-
means the *main* queue will always be synchronously executed before the rest of the queues are asynchronously dispatched. The `download_image` is
|
43
|
-
apart of the `net` queue, and the *gpu* is part of queue 4. Look above at *Resource Labels* to see what each queue is.
|
44
|
-
|
45
|
-
## message queue count
|
46
|
-
Each time a message is sent, the queue the message to belongs to is decremented by 1.
|
@@ -1,45 +0,0 @@
|
|
1
|
-
#Anything and everything to do with view controllers (not directly UI) above the driver level
|
2
|
-
|
3
|
-
Dir.chdir File.join File.dirname(__FILE__), '../../'
|
4
|
-
require './spec/env/kern.rb'
|
5
|
-
require './spec/lib/helpers.rb'
|
6
|
-
require './spec/lib/io_extensions.rb'
|
7
|
-
require './spec/lib/rspec_extensions.rb'
|
8
|
-
|
9
|
-
RSpec.describe "kern:rest_service_spec" do
|
10
|
-
include_context "kern"
|
11
|
-
|
12
|
-
#Can initialize a controller via embed and have the correct if_dispatch messages
|
13
|
-
it "Can initiate a controller via _embed" do
|
14
|
-
#Compile the controller
|
15
|
-
ctx = flok_new_user File.read('./spec/kern/assets/rest_service.rb')
|
16
|
-
|
17
|
-
#Run the embed function
|
18
|
-
ctx.eval %{
|
19
|
-
//Call embed on main root view
|
20
|
-
base = _embed("my_controller", 0, {}, null);
|
21
|
-
|
22
|
-
//Drain queue with a test event
|
23
|
-
int_dispatch([3, "int_event", base, "start_request", {}]);
|
24
|
-
}
|
25
|
-
|
26
|
-
base = ctx.eval("base")
|
27
|
-
|
28
|
-
@driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "hello", "world"]])
|
29
|
-
@driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
|
30
|
-
@driver.mexpect("if_attach_view", [base+1, 0])
|
31
|
-
@driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "my_action"}])
|
32
|
-
|
33
|
-
#Emulate the if_net driver
|
34
|
-
if_net_req = @driver.get("if_net_req", 1) #1 is the network queue
|
35
|
-
|
36
|
-
#int_net_cb(tp, success, info)
|
37
|
-
secret = SecureRandom.hex
|
38
|
-
@driver.int "int_net_cb", [if_net_req[3], true, {:secret => secret}] #if_net_req[3] is the telepointer
|
39
|
-
|
40
|
-
#Now we expect to have 'response' set as the controller event handler "request_response"
|
41
|
-
#should have been called
|
42
|
-
response = JSON.parse(ctx.eval("JSON.stringify(response)"))
|
43
|
-
expect(response).to eq({"success"=> true, "info" => {"secret" => secret}})
|
44
|
-
end
|
45
|
-
end
|