diff --git a/libobs/obs-nix.c b/libobs/obs-nix.c
index 0099b0064..8cbc3eb36 100644
--- a/libobs/obs-nix.c
+++ b/libobs/obs-nix.c
@@ -16,6 +16,9 @@
along with this program. If not, see .
******************************************************************************/
+#if defined(__FreeBSD__)
+#define _GNU_SOURCE
+#endif
#include
#include
#include
@@ -87,55 +90,105 @@ char *find_libobs_data_file(const char *file)
static void log_processor_cores(void)
{
- blog(LOG_INFO, "Processor: %lu logical cores",
- sysconf(_SC_NPROCESSORS_ONLN));
+ blog(LOG_INFO, "Physical Cores: %d, Logical Cores: %d",
+ os_get_physical_cores(), os_get_logical_cores());
}
#if defined(__linux__)
static void log_processor_info(void)
{
- FILE *fp;
int physical_id = -1;
int last_physical_id = -1;
char *line = NULL;
size_t linecap = 0;
- struct dstr processor;
+
+ FILE *fp;
+ struct dstr proc_name;
+ struct dstr proc_speed;
fp = fopen("/proc/cpuinfo", "r");
if (!fp)
return;
- dstr_init(&processor);
+ dstr_init(&proc_name);
+ dstr_init(&proc_speed);
while (getline(&line, &linecap, fp) != -1) {
if (!strncmp(line, "model name", 10)) {
char *start = strchr(line, ':');
if (!start || *(++start) == '\0')
continue;
- dstr_copy(&processor, start);
- dstr_resize(&processor, processor.len - 1);
- dstr_depad(&processor);
+
+ dstr_copy(&proc_name, start);
+ dstr_resize(&proc_name, proc_name.len - 1);
+ dstr_depad(&proc_name);
}
if (!strncmp(line, "physical id", 11)) {
char *start = strchr(line, ':');
if (!start || *(++start) == '\0')
continue;
+
physical_id = atoi(start);
}
+ if (!strncmp(line, "cpu MHz", 7)) {
+ char *start = strchr(line, ':');
+ if (!start || *(++start) == '\0')
+ continue;
+
+ dstr_copy(&proc_speed, start);
+ dstr_resize(&proc_speed, proc_speed.len - 1);
+ dstr_depad(&proc_speed);
+ }
+
if (*line == '\n' && physical_id != last_physical_id) {
last_physical_id = physical_id;
- blog(LOG_INFO, "Processor: %s", processor.array);
+ blog(LOG_INFO, "CPU Name: %s", proc_name.array);
+ blog(LOG_INFO, "CPU Speed: %sMHz", proc_speed.array);
}
}
fclose(fp);
- dstr_free(&processor);
+ dstr_free(&proc_name);
+ dstr_free(&proc_speed);
free(line);
}
#elif defined(__FreeBSD__)
-static void log_processor_info(void)
+static void log_processor_speed(void)
+{
+ char *line = NULL;
+ size_t linecap = 0;
+ FILE *fp;
+ struct dstr proc_speed;
+
+ fp = fopen("/var/run/dmesg.boot", "r");
+ if (!fp) {
+ blog(LOG_INFO, "CPU: Missing /var/run/dmesg.boot !");
+ return;
+ }
+
+ dstr_init(&proc_speed);
+
+ while (getline(&line, &linecap, fp) != -1) {
+ if (!strncmp(line, "CPU: ", 5)) {
+ char *start = strrchr(line, '(');
+ if (!start || *(++start) == '\0')
+ continue;
+
+ size_t len = strcspn(start, "-");
+ dstr_ncopy(&proc_speed, start, len);
+ }
+ }
+
+ blog(LOG_INFO, "CPU Speed: %sMHz", proc_speed.array);
+
+ fclose(fp);
+ dstr_free(&proc_speed);
+ free(line);
+}
+
+static void log_processor_name(void)
{
int mib[2];
size_t len;
@@ -150,10 +203,16 @@ static void log_processor_info(void)
return;
sysctl(mib, 2, proc, &len, NULL, 0);
- blog(LOG_INFO, "Processor: %s", proc);
+ blog(LOG_INFO, "CPU Name: %s", proc);
bfree(proc);
}
+
+static void log_processor_info(void)
+{
+ log_processor_name();
+ log_processor_speed();
+}
#endif
static void log_memory_info(void)
@@ -162,8 +221,10 @@ static void log_memory_info(void)
if (sysinfo(&info) < 0)
return;
- blog(LOG_INFO, "Physical Memory: %"PRIu64"MB Total",
- (uint64_t)info.totalram * info.mem_unit / 1024 / 1024);
+ blog(LOG_INFO, "Physical Memory: %"PRIu64"MB Total, %"PRIu64"MB Free",
+ (uint64_t)info.totalram * info.mem_unit / 1024 / 1024,
+ ((uint64_t)info.freeram + (uint64_t)info.bufferram) *
+ info.mem_unit / 1024 / 1024);
}
static void log_kernel_version(void)
@@ -222,10 +283,10 @@ static void log_distribution_info(void)
void log_system_info(void)
{
- log_processor_cores();
#if defined(__linux__) || defined(__FreeBSD__)
log_processor_info();
#endif
+ log_processor_cores();
log_memory_info();
log_kernel_version();
#if defined(__linux__)