Skip to content

Commit

Permalink
Add memory print that support details for macro interpreter (#11644)
Browse files Browse the repository at this point in the history
  • Loading branch information
yuxiaomao authored Apr 26, 2024
1 parent 6e4fd96 commit 088afdc
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 9 deletions.
71 changes: 63 additions & 8 deletions src/context/memory.ml
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,9 @@ let get_memory_json (cs : CompilationCache.t) mreq =
"context",cc#get_json;
"size",jint (mem_size cc);
]) contexts in
let mem_size_2 v exclude =
Objsize.size_with_headers (Objsize.objsize v exclude [])
in
jobject [
"contexts",jarray j_contexts;
"memory",jobject [
Expand All @@ -121,14 +124,66 @@ let get_memory_json (cs : CompilationCache.t) mreq =
"haxelibCache",jint (mem_size cache_mem.(1));
"directoryCache",jint (mem_size cache_mem.(2));
"nativeLibCache",jint (mem_size cache_mem.(3));
"additionalSizes",jarray [
jobject ["name",jstring "macro interpreter";"size",jint (mem_size (MacroContext.macro_interp_cache))];
(* jobject ["name",jstring "macro stdlib";"size",jint (mem_size (EvalContext.GlobalState.stdlib))];
jobject ["name",jstring "macro macro_lib";"size",jint (mem_size (EvalContext.GlobalState.macro_lib))]; *)
jobject ["name",jstring "last completion result";"size",jint (mem_size (DisplayException.last_completion_result))];
jobject ["name",jstring "Lexer file cache";"size",jint (mem_size (Lexer.all_files))];
jobject ["name",jstring "GC heap words";"size",jint (int_of_float size)];
];
"additionalSizes",jarray (
(match !MacroContext.macro_interp_cache with
| Some interp ->
jobject ["name",jstring "macro interpreter";"size",jint (mem_size MacroContext.macro_interp_cache);"child",jarray [
jobject ["name",jstring "builtins";"size",jint (mem_size_2 interp.builtins [Obj.repr interp])];
jobject ["name",jstring "debug";"size",jint (mem_size_2 interp.debug [Obj.repr interp])];
jobject ["name",jstring "curapi";"size",jint (mem_size_2 interp.curapi [Obj.repr interp])];
jobject ["name",jstring "type_cache";"size",jint (mem_size_2 interp.type_cache [Obj.repr interp])];
jobject ["name",jstring "overrides";"size",jint (mem_size_2 interp.overrides [Obj.repr interp])];
jobject ["name",jstring "array_prototype";"size",jint (mem_size_2 interp.array_prototype [Obj.repr interp])];
jobject ["name",jstring "string_prototype";"size",jint (mem_size_2 interp.string_prototype [Obj.repr interp])];
jobject ["name",jstring "vector_prototype";"size",jint (mem_size_2 interp.vector_prototype [Obj.repr interp])];
jobject ["name",jstring "instance_prototypes";"size",jint (mem_size_2 interp.instance_prototypes [Obj.repr interp])];
jobject ["name",jstring "static_prototypes";"size",jint (mem_size_2 interp.static_prototypes [Obj.repr interp])];
jobject ["name",jstring "constructors";"size",jint (mem_size_2 interp.constructors [Obj.repr interp])];
jobject ["name",jstring "file_keys";"size",jint (mem_size_2 interp.file_keys [Obj.repr interp])];
jobject ["name",jstring "toplevel";"size",jint (mem_size_2 interp.toplevel [Obj.repr interp])];
jobject ["name",jstring "eval";"size",jint (mem_size_2 interp.eval [Obj.repr interp]);"child", jarray [
(match interp.eval.env with
| Some env ->
jobject ["name",jstring "env";"size",jint (mem_size_2 interp.eval.env [Obj.repr interp; Obj.repr interp.eval]);"child", jarray [
jobject ["name",jstring "env_info";"size",jint (mem_size_2 env.env_info [Obj.repr interp; Obj.repr interp.eval; Obj.repr env])];
jobject ["name",jstring "env_debug";"size",jint (mem_size_2 env.env_debug [Obj.repr interp; Obj.repr interp.eval; Obj.repr env])];
jobject ["name",jstring "env_locals";"size",jint (mem_size_2 env.env_locals [Obj.repr interp; Obj.repr interp.eval; Obj.repr env])];
jobject ["name",jstring "env_captures";"size",jint (mem_size_2 env.env_captures [Obj.repr interp; Obj.repr interp.eval; Obj.repr env])];
jobject ["name",jstring "env_extra_locals";"size",jint (mem_size_2 env.env_extra_locals [Obj.repr interp; Obj.repr interp.eval; Obj.repr env])];
jobject ["name",jstring "env_parent";"size",jint (mem_size_2 env.env_parent [Obj.repr interp; Obj.repr interp.eval; Obj.repr env])];
jobject ["name",jstring "env_eval";"size",jint (mem_size_2 env.env_eval [Obj.repr interp; Obj.repr interp.eval; Obj.repr env])];
]];
| None ->
jobject ["name",jstring "env";"size",jint (mem_size_2 interp.eval.env [Obj.repr interp; Obj.repr interp.eval])];
);
jobject ["name",jstring "thread";"size",jint (mem_size_2 interp.eval.thread [Obj.repr interp; Obj.repr interp.eval]);"child", jarray [
jobject ["name",jstring "tthread";"size",jint (mem_size_2 interp.eval.thread.tthread [Obj.repr interp; Obj.repr interp.eval; Obj.repr interp.eval.thread])];
jobject ["name",jstring "tdeque";"size",jint (mem_size_2 interp.eval.thread.tdeque [Obj.repr interp; Obj.repr interp.eval; Obj.repr interp.eval.thread])];
jobject ["name",jstring "tevents";"size",jint (mem_size_2 interp.eval.thread.tevents [Obj.repr interp; Obj.repr interp.eval; Obj.repr interp.eval.thread])];
jobject ["name",jstring "tstorage";"size",jint (mem_size_2 interp.eval.thread.tstorage [Obj.repr interp; Obj.repr interp.eval; Obj.repr interp.eval.thread])];
]];
jobject ["name",jstring "debug_state";"size",jint (mem_size_2 interp.eval.debug_state [Obj.repr interp; Obj.repr interp.eval])];
jobject ["name",jstring "breakpoint";"size",jint (mem_size_2 interp.eval.breakpoint [Obj.repr interp; Obj.repr interp.eval])];
jobject ["name",jstring "caught_types";"size",jint (mem_size_2 interp.eval.caught_types [Obj.repr interp; Obj.repr interp.eval])];
jobject ["name",jstring "caught_exception";"size",jint (mem_size_2 interp.eval.caught_exception [Obj.repr interp; Obj.repr interp.eval])];
jobject ["name",jstring "last_return";"size",jint (mem_size_2 interp.eval.last_return [Obj.repr interp; Obj.repr interp.eval])];
jobject ["name",jstring "debug_channel";"size",jint (mem_size_2 interp.eval.debug_channel [Obj.repr interp; Obj.repr interp.eval])];
]];
jobject ["name",jstring "evals";"size",jint (mem_size_2 interp.evals [Obj.repr interp])];
jobject ["name",jstring "exception_stack";"size",jint (mem_size_2 interp.exception_stack [Obj.repr interp])];
]];
| None ->
jobject ["name",jstring "macro interpreter";"size",jint (mem_size MacroContext.macro_interp_cache)];
)
::
[
(* jobject ["name",jstring "macro stdlib";"size",jint (mem_size (EvalContext.GlobalState.stdlib))];
jobject ["name",jstring "macro macro_lib";"size",jint (mem_size (EvalContext.GlobalState.macro_lib))]; *)
jobject ["name",jstring "last completion result";"size",jint (mem_size (DisplayException.last_completion_result))];
jobject ["name",jstring "Lexer file cache";"size",jint (mem_size (Lexer.all_files))];
jobject ["name",jstring "GC heap words";"size",jint (int_of_float size)];
]
);
]
]
| MContext sign ->
Expand Down
8 changes: 7 additions & 1 deletion std/haxe/display/Server.hx
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,12 @@ typedef JsonServerFile = {
final moduleName:Null<String>;
}

typedef AdditionalSize = {
final name:String;
final size:Int;
final child:Array<AdditionalSize>;
}

/* Memory */
typedef HaxeMemoryResult = {
final contexts:Array<{
Expand All @@ -123,7 +129,7 @@ typedef HaxeMemoryResult = {
final haxelibCache:Int;
final directoryCache:Int;
final nativeLibCache:Int;
final ?additionalSizes:Array<{name:String, size:Int}>;
final ?additionalSizes:Array<AdditionalSize>;
}
}

Expand Down

0 comments on commit 088afdc

Please sign in to comment.