flok 0.0.38 → 0.0.39

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/app/drivers/chrome/src/dispatch.js +41 -6
  3. data/app/drivers/chrome/src/persist.js +1 -10
  4. data/app/kern/dispatch.js +17 -23
  5. data/app/kern/gen_id.js +8 -0
  6. data/app/kern/macro.rb +20 -18
  7. data/app/kern/pagers/pg_spec0.js +20 -0
  8. data/app/kern/services/vm.rb +176 -30
  9. data/docs/client_api.md +3 -1
  10. data/docs/compilation.md +1 -1
  11. data/docs/dispatch.md +91 -0
  12. data/docs/kernel_api.md +3 -2
  13. data/docs/messaging.md +6 -1
  14. data/docs/mod/persist.md +4 -3
  15. data/docs/project_layout.md +2 -2
  16. data/docs/services/vm.md +116 -41
  17. data/docs/services/vm/pagers.md +38 -46
  18. data/lib/flok.rb +1 -0
  19. data/lib/flok/build.rb +3 -4
  20. data/lib/flok/macro.rb +27 -0
  21. data/lib/flok/services_compiler.rb +12 -8
  22. data/lib/flok/user_compiler.rb +131 -4
  23. data/lib/flok/version.rb +1 -1
  24. data/spec/env/kern.rb +71 -0
  25. data/spec/etc/macro_spec.rb +3 -8
  26. data/spec/etc/service_compiler/service3.rb +27 -0
  27. data/spec/etc/services_compiler_spec.rb +35 -27
  28. data/spec/iface/driver/dispatch_spec.rb +20 -0
  29. data/spec/iface/driver/persist_spec.rb +9 -24
  30. data/spec/iface/kern/ping_spec.rb +3 -24
  31. data/spec/kern/assets/vm/config4.rb +12 -0
  32. data/spec/kern/assets/vm/controller10.rb +26 -0
  33. data/spec/kern/assets/vm/controller11.rb +33 -0
  34. data/spec/kern/assets/vm/controller12.rb +45 -0
  35. data/spec/kern/assets/vm/controller13.rb +40 -0
  36. data/spec/kern/assets/vm/controller14.rb +14 -0
  37. data/spec/kern/assets/vm/controller15.rb +15 -0
  38. data/spec/kern/assets/vm/controller16.rb +29 -0
  39. data/spec/kern/assets/vm/controller17.rb +30 -0
  40. data/spec/kern/assets/vm/controller18.rb +28 -0
  41. data/spec/kern/assets/vm/controller19.rb +14 -0
  42. data/spec/kern/assets/vm/controller19b.rb +15 -0
  43. data/spec/kern/assets/vm/controller20.rb +19 -0
  44. data/spec/kern/assets/vm/controller21.rb +40 -0
  45. data/spec/kern/assets/vm/controller7.rb +18 -0
  46. data/spec/kern/assets/vm/controller8.rb +38 -0
  47. data/spec/kern/assets/vm/controller8b.rb +18 -0
  48. data/spec/kern/assets/vm/controller9.rb +20 -0
  49. data/spec/kern/assets/vm/controller_exc_2watch.rb +15 -0
  50. data/spec/kern/assets/vm/controller_exc_ewatch.rb +14 -0
  51. data/spec/kern/assets/vm/macros/copy_page_c.rb +23 -0
  52. data/spec/kern/assets/vm/macros/entry_del_c.rb +18 -0
  53. data/spec/kern/assets/vm/macros/entry_insert_c.rb +21 -0
  54. data/spec/kern/assets/vm/macros/entry_mutable_c.rb +33 -0
  55. data/spec/kern/assets/vm/macros/new_page_c.rb +7 -0
  56. data/spec/kern/assets/vm/macros/new_page_c2.rb +7 -0
  57. data/spec/kern/assets/vm/macros/set_page_head_c.rb +18 -0
  58. data/spec/kern/assets/vm/macros/set_page_next_c.rb +18 -0
  59. data/spec/kern/controller_macro_spec.rb +186 -0
  60. data/spec/kern/dispatch_spec.rb +125 -0
  61. data/spec/kern/functions_spec.rb +15 -0
  62. data/spec/kern/vm_service_spec.rb +874 -173
  63. metadata +70 -5
  64. data/docs/scheduling.md +0 -46
  65. 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.38
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-09 00:00:00.000000000 Z
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