From c55320e9e2a8916e911bcd39ab37b79e3a7d03b2 Mon Sep 17 00:00:00 2001 From: Daniel Lange Date: Mon, 11 Jan 2021 20:43:27 +0100 Subject: New upstream version 3.0.5 --- Settings.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'Settings.c') diff --git a/Settings.c b/Settings.c index 0b4d0ed..ef607f0 100644 --- a/Settings.c +++ b/Settings.c @@ -96,10 +96,10 @@ static void readFields(ProcessField* fields, uint32_t* flags, const char* line) free(trim); int i, j; *flags = 0; - for (j = 0, i = 0; i < Platform_numberOfFields && ids[i]; i++) { + for (j = 0, i = 0; i < LAST_PROCESSFIELD && ids[i]; i++) { // This "+1" is for compatibility with the older enum format. int id = atoi(ids[i]) + 1; - if (id > 0 && id < Platform_numberOfFields && Process_fields[id].name) { + if (id > 0 && id < LAST_PROCESSFIELD && Process_fields[id].name) { fields[j] = id; *flags |= Process_fields[id].flags; j++; @@ -137,10 +137,17 @@ static bool Settings_read(Settings* this, const char* fileName, int initialCpuCo } else if (String_eq(option[0], "sort_key")) { // This "+1" is for compatibility with the older enum format. this->sortKey = atoi(option[1]) + 1; + } else if (String_eq(option[0], "tree_sort_key")) { + // This "+1" is for compatibility with the older enum format. + this->treeSortKey = atoi(option[1]) + 1; } else if (String_eq(option[0], "sort_direction")) { this->direction = atoi(option[1]); + } else if (String_eq(option[0], "tree_sort_direction")) { + this->treeDirection = atoi(option[1]); } else if (String_eq(option[0], "tree_view")) { this->treeView = atoi(option[1]); + } else if (String_eq(option[0], "tree_view_always_by_pid")) { + this->treeViewAlwaysByPID = atoi(option[1]); } else if (String_eq(option[0], "hide_kernel_threads")) { this->hideKernelThreads = atoi(option[1]); } else if (String_eq(option[0], "hide_userland_threads")) { @@ -214,6 +221,8 @@ static bool Settings_read(Settings* this, const char* fileName, int initialCpuCo } else if (String_eq(option[0], "right_meter_modes")) { Settings_readMeterModes(this, option[1], 1); didReadMeters = true; + } else if (String_eq(option[0], "hide_function_bar")) { + this->hideFunctionBar = atoi(option[1]); #ifdef HAVE_LIBHWLOC } else if (String_eq(option[0], "topology_affinity")) { this->topologyAffinity = !!atoi(option[1]); @@ -273,6 +282,8 @@ bool Settings_write(Settings* this) { // This "-1" is for compatibility with the older enum format. fprintf(fd, "sort_key=%d\n", (int) this->sortKey - 1); fprintf(fd, "sort_direction=%d\n", (int) this->direction); + fprintf(fd, "tree_sort_key=%d\n", (int) this->treeSortKey - 1); + fprintf(fd, "tree_sort_direction=%d\n", (int) this->treeDirection); fprintf(fd, "hide_kernel_threads=%d\n", (int) this->hideKernelThreads); fprintf(fd, "hide_userland_threads=%d\n", (int) this->hideUserlandThreads); fprintf(fd, "shadow_other_users=%d\n", (int) this->shadowOtherUsers); @@ -287,6 +298,7 @@ bool Settings_write(Settings* this) { fprintf(fd, "strip_exe_from_cmdline=%d\n", (int) this->stripExeFromCmdline); fprintf(fd, "show_merged_command=%d\n", (int) this->showMergedCommand); fprintf(fd, "tree_view=%d\n", (int) this->treeView); + fprintf(fd, "tree_view_always_by_pid=%d\n", (int) this->treeViewAlwaysByPID); fprintf(fd, "header_margin=%d\n", (int) this->headerMargin); fprintf(fd, "detailed_cpu_time=%d\n", (int) this->detailedCPUTime); fprintf(fd, "cpu_count_from_one=%d\n", (int) this->countCPUsFromOne); @@ -305,6 +317,7 @@ bool Settings_write(Settings* this) { fprintf(fd, "left_meter_modes="); writeMeterModes(this, fd, 0); fprintf(fd, "right_meters="); writeMeters(this, fd, 1); fprintf(fd, "right_meter_modes="); writeMeterModes(this, fd, 1); + fprintf(fd, "hide_function_bar=%d\n", (int) this->hideFunctionBar); #ifdef HAVE_LIBHWLOC fprintf(fd, "topology_affinity=%d\n", (int) this->topologyAffinity); #endif @@ -316,7 +329,9 @@ Settings* Settings_new(int initialCpuCount) { Settings* this = xCalloc(1, sizeof(Settings)); this->sortKey = PERCENT_CPU; + this->treeSortKey = PID; this->direction = 1; + this->treeDirection = 1; this->shadowOtherUsers = false; this->showThreadNames = false; this->hideKernelThreads = false; @@ -340,14 +355,15 @@ Settings* Settings_new(int initialCpuCount) { this->findCommInCmdline = true; this->stripExeFromCmdline = true; this->showMergedCommand = false; + this->hideFunctionBar = 0; #ifdef HAVE_LIBHWLOC this->topologyAffinity = false; #endif - this->fields = xCalloc(Platform_numberOfFields + 1, sizeof(ProcessField)); + this->fields = xCalloc(LAST_PROCESSFIELD + 1, sizeof(ProcessField)); // TODO: turn 'fields' into a Vector, // (and ProcessFields into proper objects). this->flags = 0; - ProcessField* defaults = Platform_defaultFields; + const ProcessField* defaults = Platform_defaultFields; for (int i = 0; defaults[i]; i++) { this->fields[i] = defaults[i]; this->flags |= Process_fields[defaults[i]].flags; @@ -427,9 +443,17 @@ Settings* Settings_new(int initialCpuCount) { } void Settings_invertSortOrder(Settings* this) { - if (this->direction == 1) { - this->direction = -1; - } else { + int* attr = (this->treeView) ? &(this->treeDirection) : &(this->direction); + *attr = (*attr == 1) ? -1 : 1; +} + +void Settings_setSortKey(Settings* this, ProcessField sortKey) { + if (this->treeViewAlwaysByPID || !this->treeView) { + this->sortKey = sortKey; this->direction = 1; + this->treeView = false; + } else { + this->treeSortKey = sortKey; + this->treeDirection = 1; } } -- cgit v1.2.3