Profile the time it takes to source a file
`:source` command will now generate timings if profile is enabled in the debug option, to help find which script can be slow to load. This should help for #1823
This commit is contained in:
parent
e41b4ee65d
commit
90c16d2b0d
|
@ -1208,6 +1208,10 @@ const CommandDesc source_cmd = {
|
||||||
filename_completer,
|
filename_completer,
|
||||||
[](const ParametersParser& parser, Context& context, const ShellContext&)
|
[](const ParametersParser& parser, Context& context, const ShellContext&)
|
||||||
{
|
{
|
||||||
|
const DebugFlags debug_flags = context.options()["debug"].get<DebugFlags>();
|
||||||
|
const bool profile = debug_flags & DebugFlags::Profile;
|
||||||
|
auto start_time = profile ? Clock::now() : Clock::time_point{};
|
||||||
|
|
||||||
String path = real_path(parse_filename(parser[0]));
|
String path = real_path(parse_filename(parser[0]));
|
||||||
String file_content = read_file(path, true);
|
String file_content = read_file(path, true);
|
||||||
try
|
try
|
||||||
|
@ -1220,6 +1224,11 @@ const CommandDesc source_cmd = {
|
||||||
write_to_debug_buffer(format("{}:{}", parser[0], err.what()));
|
write_to_debug_buffer(format("{}:{}", parser[0], err.what()));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using namespace std::chrono;
|
||||||
|
if (profile)
|
||||||
|
write_to_debug_buffer(format("sourcing '{}' took {} us", parser[0],
|
||||||
|
(size_t)duration_cast<microseconds>(Clock::now() - start_time).count()));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user