mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 07:28:34 +00:00
refactor: reduce some globals #27406
This commit is contained in:
@@ -978,9 +978,7 @@ EXTERN const char bot_top_msg[] INIT(= N_("search hit BOTTOM, continuing at TOP"
|
|||||||
|
|
||||||
EXTERN const char line_msg[] INIT(= N_(" line "));
|
EXTERN const char line_msg[] INIT(= N_(" line "));
|
||||||
|
|
||||||
EXTERN FILE *time_fd INIT(= NULL); // where to write startup timing
|
EXTERN FILE *time_fd INIT(= NULL); // Where to write --startuptime report.
|
||||||
#define STARTUP_TIME_BUF_SIZE 8192
|
|
||||||
EXTERN char *startuptime_buf INIT(= NULL); // --startuptime buffer
|
|
||||||
|
|
||||||
// Some compilers warn for not using a return value, but in some situations we
|
// Some compilers warn for not using a return value, but in some situations we
|
||||||
// can't do anything useful with the value. Assign to this variable to avoid
|
// can't do anything useful with the value. Assign to this variable to avoid
|
||||||
|
@@ -45,6 +45,7 @@ typedef struct {
|
|||||||
#define PRL_ITEM(si, idx) (((sn_prl_T *)(si)->sn_prl_ga.ga_data)[(idx)])
|
#define PRL_ITEM(si, idx) (((sn_prl_T *)(si)->sn_prl_ga.ga_data)[(idx)])
|
||||||
|
|
||||||
static proftime_T prof_wait_time;
|
static proftime_T prof_wait_time;
|
||||||
|
static char *startuptime_buf = NULL; // --startuptime buffer
|
||||||
|
|
||||||
/// Gets the current time.
|
/// Gets the current time.
|
||||||
///
|
///
|
||||||
@@ -945,29 +946,27 @@ void time_msg(const char *mesg, const proftime_T *start)
|
|||||||
fprintf(time_fd, ": %s\n", mesg);
|
fprintf(time_fd, ": %s\n", mesg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes the time time_fd stream used to write startup times
|
/// Initializes the `time_fd` stream for the --startuptime report.
|
||||||
///
|
///
|
||||||
/// @param startup_time_file the startuptime report file path
|
/// @param fname startuptime report file path
|
||||||
/// @param process_name the name of the current process to write in the report.
|
/// @param process_name name of the current Nvim process to write in the report.
|
||||||
void time_init(const char *startup_time_file, const char *process_name)
|
void time_init(const char *fname, const char *process_name)
|
||||||
{
|
{
|
||||||
time_fd = fopen(startup_time_file, "a");
|
const size_t bufsize = 8192; // Big enough for the entire --startuptime report.
|
||||||
|
time_fd = fopen(fname, "a");
|
||||||
if (time_fd == NULL) {
|
if (time_fd == NULL) {
|
||||||
semsg(_(e_notopen), startup_time_file);
|
semsg(_(e_notopen), fname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
startuptime_buf = xmalloc(sizeof(char) * (STARTUP_TIME_BUF_SIZE + 1));
|
startuptime_buf = xmalloc(sizeof(char) * (bufsize + 1));
|
||||||
// The startuptime file is (potentially) written by multiple nvim processes concurrently. So
|
// The startuptime file is (potentially) written by multiple Nvim processes concurrently. So each
|
||||||
// startuptime info is buffered, and flushed to disk only after startup completed. To achieve that
|
// report is buffered, and flushed to disk (`time_finish`) once after startup. `_IOFBF` mode
|
||||||
// we set a buffer big enough to store all startup times. The `_IOFBF` mode ensures the buffer is
|
// ensures the buffer is not auto-flushed ("controlled buffering").
|
||||||
// not auto-flushed ("controlled buffering").
|
int r = setvbuf(time_fd, startuptime_buf, _IOFBF, bufsize + 1);
|
||||||
// The times are flushed to disk manually when "time_finish" is called.
|
|
||||||
int r = setvbuf(time_fd, startuptime_buf, _IOFBF, STARTUP_TIME_BUF_SIZE + 1);
|
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
xfree(startuptime_buf);
|
XFREE_CLEAR(startuptime_buf);
|
||||||
fclose(time_fd);
|
fclose(time_fd);
|
||||||
time_fd = NULL;
|
time_fd = NULL;
|
||||||
// Might as well ELOG also I guess.
|
|
||||||
ELOG("time_init: setvbuf failed: %d %s", r, uv_err_name(r));
|
ELOG("time_init: setvbuf failed: %d %s", r, uv_err_name(r));
|
||||||
semsg("time_init: setvbuf failed: %d %s", r, uv_err_name(r));
|
semsg("time_init: setvbuf failed: %d %s", r, uv_err_name(r));
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user