On 10/01/12 08:22, Vincent Torri wrote:
maybe this could help you :
http://stackoverflow.com/questions/4226353/show-memory-and-cpu-in-c
Vincent
?
There is no problem when getting the frequency.
The only difference with linux is that instead
of displaying available frequencies (in the menu),
we display 25-50-75-100% - as we can only set
percents.
We unfortunately cannot get available levels, so
we don't know what is the max/min frequency
available for the processor, and it sometimes
causes problem with the speedcounter, which
doesn't know where to place the freq in the
counter.
PS: I forgot to mention that the freebsd support
is broken.
Here are patches again. This time it's really ok,
I also quickly modified the freebsd code.
--- e_mod_main.c Mon Oct 1 14:58:24 2012
+++ e_mod_main.c Mon Oct 1 14:41:45 2012
@@ -1,9 +1,8 @@
#include "e.h"
#include "e_mod_main.h"
-#ifdef __FreeBSD__
-#include <sys/types.h>
-#include <sys/sysctl.h>
+#if defined (__FreeBSD__) || defined (__OpenBSD__)
+# include <sys/sysctl.h>
#endif
/* gadcon requirements */
@@ -291,17 +290,29 @@
frequency = (long)l->data;
mi = e_menu_item_new(mo);
+
+#ifdef __OpenBSD__
+ snprintf(buf, sizeof(buf), "%i %%", frequency);
+#else
if (frequency < 1000000)
snprintf(buf, sizeof(buf), _("%i MHz"), frequency / 1000);
else
snprintf(buf, sizeof(buf), _("%'.1f GHz"),
frequency / 1000000.);
+#endif
+
buf[sizeof(buf) - 1] = 0;
e_menu_item_label_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
+
+#ifdef __OpenBSD__
+ if (cpufreq_config->status->cur_percent == frequency)
+ e_menu_item_toggle_set(mi, 1);
+#else
if (cpufreq_config->status->cur_frequency == frequency)
e_menu_item_toggle_set(mi, 1);
+#endif
e_menu_item_callback_set(mi, _cpufreq_menu_frequency,
l->data);
}
}
@@ -445,8 +456,10 @@
return;
}
- // change it to "userspace"
+#ifndef __OpenBSD__
+ /* OpenBSD doesn't have governors */
_cpufreq_set_governor("userspace");
+#endif
snprintf(buf, sizeof(buf),
"%s %s %i", cpufreq_config->set_exe_path, "frequency", frequency);
@@ -548,14 +561,45 @@
{
char buf[4096];
Eina_List *l;
- // FIXME: this sssumes all cores accept the same freqs/ might be wrong
-#ifdef __FreeBSD__
- int freq, i;
- size_t len = 0;
+ // FIXME: this assumes all cores accept the same freqs/ might be wrong
+
+#if defined (__OpenBSD__)
+ int freq, mib[] = {CTL_HW, HW_CPUSPEED};
+ size_t len = sizeof(freq);
+ int p;
+
+ if (sysctl(mib, 2, &freq, &len, NULL, 0) == 0)
+ {
+ if (s->frequencies)
+ {
+ eina_list_free(s->frequencies);
+ s->frequencies = NULL;
+ }
+
+ if (s->governors)
+ {
+ for (l = s->governors; l; l = l->next)
+ free(l->data);
+ eina_list_free(s->governors);
+ s->governors = NULL;
+ }
+
+ /* storing percents */
+ p = 100;
+ s->frequencies = eina_list_append(s->frequencies, (void *)p);
+ p = 75;
+ s->frequencies = eina_list_append(s->frequencies, (void *)p);
+ p = 50;
+ s->frequencies = eina_list_append(s->frequencies, (void *)p);
+ p = 25;
+ s->frequencies = eina_list_append(s->frequencies, (void *)p);
+ }
+#elif defined (__FreeBSD__)
+ int freq;
+ size_t len = sizeof(buf);
char *freqs, *pos, *q;
/* read freq_levels sysctl and store it in freq */
- len = sizeof(buf);
if (sysctlbyname("dev.cpu.0.freq_levels", buf, &len, NULL, 0) == 0)
{
/* sysctl returns 0 on success */
@@ -665,18 +709,37 @@
static int
_cpufreq_status_check_current(Status *s)
{
- char buf[4096];
- int i;
- FILE *f;
int ret = 0;
int frequency = 0;
- int frequency_min = 0x7fffffff;
- int frequency_max = 0;
- int freqtot = 0;
-#ifdef __FreeBSD__
- int len = 4;
+#if defined (__OpenBSD__)
+ size_t len = sizeof(frequency);
+ int percent, mib[] = {CTL_HW, HW_CPUSPEED};
s->active = 0;
+
+ _cpufreq_status_check_available(s);
+
+ if (sysctl(mib, 2, &frequency, &len, NULL, 0) == 0)
+ {
+ frequency *= 1000;
+ if (frequency != s->cur_frequency) ret = 1;
+ s->cur_frequency = frequency;
+ s->active = 1;
+ }
+
+ mib[1] = HW_SETPERF;
+
+ if (sysctl(mib, 2, &percent, &len, NULL, 0) == 0)
+ {
+ s->cur_percent = percent;
+ }
+
+ s->can_set_frequency = 1;
+ s->cur_governor = NULL;
+#elif defined (__FreeBSD__)
+ size_t len = sizeof(frequency);
+ s->active = 0;
+
/* frequency is stored in dev.cpu.0.freq */
if (sysctlbyname("dev.cpu.0.freq", &frequency, &len, NULL, 0) == 0)
{
@@ -690,6 +753,13 @@
s->can_set_frequency = 1;
s->cur_governor = NULL;
#else
+ char buf[4096];
+ FILE *f;
+ int frequency_min = 0x7fffffff;
+ int frequency_max = 0;
+ int freqtot = 0;
+ int i;
+
s->active = 0;
_cpufreq_status_check_available(s);
@@ -724,7 +794,7 @@
// printf("%i | %i %i\n", frequency, frequency_min, frequency_max);
- // FIXME: this sssumes all cores are on the same governor
+ // FIXME: this assumes all cores are on the same governor
f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "r");
if (f)
{
--- e_mod_main.h Mon Oct 1 15:01:29 2012
+++ e_mod_main.h Mon Oct 1 14:33:10 2012
@@ -11,6 +11,9 @@
Eina_List *frequencies;
Eina_List *governors;
int cur_frequency;
+#ifdef __OpenBSD__
+ int cur_percent;
+#endif
int cur_min_frequency;
int cur_max_frequency;
int can_set_frequency;
--- freqset.c Mon Oct 1 07:59:21 2012
+++ freqset.c Mon Oct 1 07:46:15 2012
@@ -5,10 +5,15 @@
#include <string.h>
#ifdef __FreeBSD__
-#include <sys/types.h>
-#include <sys/sysctl.h>
+# include <sys/sysctl.h>
#endif
+#ifdef __OpenBSD__
+# include <sys/param.h>
+# include <sys/resource.h>
+# include <sys/sysctl.h>
+#endif
+
static int sys_cpu_setall(const char *control, const char *value);
static int sys_cpufreq_set(const char *control, const char *value);
@@ -25,9 +30,29 @@
if (seteuid(0))
{
fprintf(stderr, "Unable to assume root privileges\n");
+ return 1;
}
-#ifdef __FreeBSD__
+#if defined __OpenBSD__
+ if (!strcmp(argv[1], "frequency"))
+ {
+ int mib[] = {CTL_HW, HW_SETPERF};
+ int new_perf = atoi(argv[2]);
+ size_t len = sizeof(new_perf);
+
+ if (sysctl(mib, 2, NULL, 0, &new_perf, len) == -1)
+ {
+ return 1;
+ }
+
+ return 0;
+ }
+ else
+ {
+ fprintf(stderr, "Unknown command (%s %s).\n", argv[1], argv[2]);
+ return 1;
+ }
+#elif defined __FreeBSD__
if (!strcmp(argv[1], "frequency"))
{
int new_frequency = atoi(argv[2]);
------------------------------------------------------------------------------
Got visibility?
Most devs has no idea what their production app looks like.
Find out how fast your code is with AppDynamics Lite.
http://ad.doubleclick.net/clk;262219671;13503038;y?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel