15 |
15 |
16 signature ISABELLE_PROCESS = |
16 signature ISABELLE_PROCESS = |
17 sig |
17 sig |
18 val is_active: unit -> bool |
18 val is_active: unit -> bool |
19 val protocol_command: string -> (string list -> unit) -> unit |
19 val protocol_command: string -> (string list -> unit) -> unit |
20 val tracing_limit: int Unsynchronized.ref; |
20 val tracing_messages: int Unsynchronized.ref; |
21 val reset_tracing_limits: unit -> unit |
21 val reset_tracing: unit -> unit |
22 val crashes: exn list Synchronized.var |
22 val crashes: exn list Synchronized.var |
23 val init_fifos: string -> string -> unit |
23 val init_fifos: string -> string -> unit |
24 val init_socket: string -> unit |
24 val init_socket: string -> unit |
25 end; |
25 end; |
26 |
26 |
61 ML_Compiler.exn_message exn))); |
61 ML_Compiler.exn_message exn))); |
62 |
62 |
63 end; |
63 end; |
64 |
64 |
65 |
65 |
66 (* tracing limit *) |
66 (* restricted tracing messages *) |
67 |
67 |
68 val tracing_limit = Unsynchronized.ref 1000000; |
68 val tracing_messages = Unsynchronized.ref 100; |
69 |
69 |
70 val tracing_limits = Synchronized.var "tracing_limits" (Inttab.empty: int Inttab.table); |
70 val command_tracing_messages = |
71 |
71 Synchronized.var "command_tracing_messages" (Inttab.empty: int Inttab.table); |
72 fun reset_tracing_limits () = Synchronized.change tracing_limits (K Inttab.empty); |
72 |
73 |
73 fun reset_tracing () = |
74 fun update_tracing_limits msg = |
74 Synchronized.change command_tracing_messages (K Inttab.empty); |
|
75 |
|
76 fun update_tracing () = |
75 (case Position.get_id (Position.thread_data ()) of |
77 (case Position.get_id (Position.thread_data ()) of |
76 NONE => () |
78 NONE => () |
77 | SOME id => |
79 | SOME id => |
78 Synchronized.change tracing_limits (fn tab => |
80 let |
79 let |
81 val i = Markup.parse_int id; |
80 val i = Markup.parse_int id; |
82 val (n, ok) = |
81 val n = the_default 0 (Inttab.lookup tab i) + size msg; |
83 Synchronized.change_result command_tracing_messages (fn tab => |
82 val _ = if n > ! tracing_limit then raise Output.TRACING_LIMIT n else (); |
84 let |
83 in Inttab.update (i, n) tab end)); |
85 val n = the_default 0 (Inttab.lookup tab i) + 1; |
|
86 val ok = n <= ! tracing_messages; |
|
87 in ((n, ok), Inttab.update (i, n) tab) end); |
|
88 in |
|
89 if ok then () |
|
90 else |
|
91 let |
|
92 val (text, promise) = Active.dialog_text (); |
|
93 val _ = |
|
94 writeln ("Tracing paused. " ^ text "Stop" ^ ", or continue with next " ^ |
|
95 text "10" ^ ", " ^ text "100" ^ ", " ^ text "1000" ^ " messages?") |
|
96 val m = Markup.parse_int (Future.join promise) |
|
97 handle Fail _ => error "Stopped"; |
|
98 in |
|
99 Synchronized.change command_tracing_messages |
|
100 (Inttab.map_default (i, 0) (fn k => k - m)) |
|
101 end |
|
102 end); |
84 |
103 |
85 |
104 |
86 (* message channels *) |
105 (* message channels *) |
87 |
106 |
88 local |
107 local |
129 Output.Private_Hooks.result_fn := |
148 Output.Private_Hooks.result_fn := |
130 (fn (i, s) => standard_message mbox (SOME i) Markup.resultN s); |
149 (fn (i, s) => standard_message mbox (SOME i) Markup.resultN s); |
131 Output.Private_Hooks.writeln_fn := |
150 Output.Private_Hooks.writeln_fn := |
132 (fn s => standard_message mbox (SOME (serial ())) Markup.writelnN s); |
151 (fn s => standard_message mbox (SOME (serial ())) Markup.writelnN s); |
133 Output.Private_Hooks.tracing_fn := |
152 Output.Private_Hooks.tracing_fn := |
134 (fn s => (update_tracing_limits s; standard_message mbox (SOME (serial ())) Markup.tracingN s)); |
153 (fn s => (update_tracing (); standard_message mbox (SOME (serial ())) Markup.tracingN s)); |
135 Output.Private_Hooks.warning_fn := |
154 Output.Private_Hooks.warning_fn := |
136 (fn s => standard_message mbox (SOME (serial ())) Markup.warningN s); |
155 (fn s => standard_message mbox (SOME (serial ())) Markup.warningN s); |
137 Output.Private_Hooks.error_fn := |
156 Output.Private_Hooks.error_fn := |
138 (fn (i, s) => standard_message mbox (SOME i) Markup.errorN s); |
157 (fn (i, s) => standard_message mbox (SOME i) Markup.errorN s); |
139 Output.Private_Hooks.protocol_message_fn := message true mbox Markup.protocolN; |
158 Output.Private_Hooks.protocol_message_fn := message true mbox Markup.protocolN; |
224 Multithreading.max_threads := Options.int options "threads"; |
243 Multithreading.max_threads := Options.int options "threads"; |
225 if Multithreading.max_threads_value () < 2 |
244 if Multithreading.max_threads_value () < 2 |
226 then Multithreading.max_threads := 2 else (); |
245 then Multithreading.max_threads := 2 else (); |
227 Goal.parallel_proofs := (if Options.int options "parallel_proofs" > 0 then 4 else 0); |
246 Goal.parallel_proofs := (if Options.int options "parallel_proofs" > 0 then 4 else 0); |
228 Goal.parallel_proofs_threshold := Options.int options "parallel_proofs_threshold"; |
247 Goal.parallel_proofs_threshold := Options.int options "parallel_proofs_threshold"; |
229 tracing_limit := |
248 tracing_messages := Options.int options "editor_tracing_messages" |
230 Real.round (Options.real options "editor_tracing_limit_MB" * 1024.0 * 1024.0) |
|
231 end); |
249 end); |
232 |
250 |
233 end; |
251 end; |
234 |
252 |