flok 0.0.38 → 0.0.39
Sign up to get free protection for your applications and to get access to all the features.
- 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
|