raster pushed a commit to branch master.

commit 83e7883ec946f05ac772ea6f99054ac6cb7b3228
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Aug 24 19:22:39 2013 +0900

    allow cpufreq config to be accessed without a gadget - pstate necessity
---
 po/POTFILES.in                     |   1 +
 src/modules/Makefile_cpufreq.am    |   3 +-
 src/modules/cpufreq/e_mod_config.c | 155 +++++++++++++++++++++++++++++++++++++
 src/modules/cpufreq/e_mod_main.c   |  37 +++++++--
 src/modules/cpufreq/e_mod_main.h   |   7 ++
 5 files changed, 196 insertions(+), 7 deletions(-)

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 9909b53..25864b0 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -215,6 +215,7 @@ src/modules/conf_window_remembers/e_int_config_remembers.c
 src/modules/conf_window_remembers/e_mod_main.c
 src/modules/connman/e_mod_main.c
 src/modules/cpufreq/e_mod_main.c
+src/modules/cpufreq/e_mod_config.c
 src/modules/cpufreq/freqset.c
 src/modules/everything/e_mod_main.c
 src/modules/everything/evry.c
diff --git a/src/modules/Makefile_cpufreq.am b/src/modules/Makefile_cpufreq.am
index 2d2bb96..bee9e15 100644
--- a/src/modules/Makefile_cpufreq.am
+++ b/src/modules/Makefile_cpufreq.am
@@ -8,7 +8,8 @@ cpufreqpkgdir = $(MDIR)/cpufreq/$(MODULE_ARCH)
 cpufreqpkg_LTLIBRARIES = cpufreq/module.la
 
 cpufreq_module_la_SOURCES  = cpufreq/e_mod_main.h \
-                            cpufreq/e_mod_main.c
+                            cpufreq/e_mod_main.c \
+                             cpufreq/e_mod_config.c
 
 freqsetdir = $(cpufreqpkgdir)
 freqset_PROGRAMS = cpufreq/freqset
diff --git a/src/modules/cpufreq/e_mod_config.c 
b/src/modules/cpufreq/e_mod_config.c
new file mode 100644
index 0000000..a6ac0ca
--- /dev/null
+++ b/src/modules/cpufreq/e_mod_config.c
@@ -0,0 +1,155 @@
+#include "e.h"
+#include "e_mod_main.h"
+
+struct _E_Config_Dialog_Data
+{
+   int poll_interval;
+   int restore_governor;
+   int auto_powersave;
+   char *powersave_governor;
+   char *governor;
+   int pstate_min;
+   int pstate_max;
+};
+
+/* Protos */
+static void        *_create_data(E_Config_Dialog *cfd);
+static void         _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
+static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
+static int          _basic_apply_data(E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata);
+static int          _basic_check_changed(E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata);
+
+E_Config_Dialog *
+e_int_config_cpufreq_module(E_Container *con, const char *params __UNUSED__)
+{
+   E_Config_Dialog *cfd;
+   E_Config_Dialog_View *v;
+   char buf[PATH_MAX];
+
+   v = E_NEW(E_Config_Dialog_View, 1);
+   v->create_cfdata = _create_data;
+   v->free_cfdata = _free_data;
+   v->basic.apply_cfdata = _basic_apply_data;
+   v->basic.create_widgets = _basic_create_widgets;
+   v->basic.check_changed = _basic_check_changed;
+
+   snprintf(buf, sizeof(buf), "%s/e-module-cpufreq.edj",
+            e_module_dir_get(cpufreq_config->module));
+   cfd = e_config_dialog_new(con, _("Cpu Frequency Control Settings"),
+                             "E", "_e_mod_cpufreq_config_dialog",
+                             buf, 0, v, NULL);
+   cpufreq_config->config_dialog = cfd;
+   return cfd;
+}
+
+static void
+_fill_data(E_Config_Dialog_Data *cfdata)
+{
+   if (!cpufreq_config) return;
+   cfdata->poll_interval = cpufreq_config->poll_interval;
+   cfdata->restore_governor = cpufreq_config->restore_governor;
+   cfdata->auto_powersave = cpufreq_config->auto_powersave;
+   cfdata->pstate_min = cpufreq_config->pstate_min - 1;
+   cfdata->pstate_max = cpufreq_config->pstate_max - 1;
+   if (cpufreq_config->powersave_governor)
+     cfdata->powersave_governor = strdup(cpufreq_config->powersave_governor);
+   if (cpufreq_config->governor)
+     cfdata->governor = strdup(cpufreq_config->governor);
+}
+
+static void *
+_create_data(E_Config_Dialog *cfd __UNUSED__)
+{
+   E_Config_Dialog_Data *cfdata;
+
+   cfdata = E_NEW(E_Config_Dialog_Data, 1);
+   _fill_data(cfdata);
+   return cfdata;
+}
+
+static void
+_free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
+{
+   if (!cpufreq_config) return;
+   cpufreq_config->config_dialog = NULL;
+   E_FREE(cfdata);
+}
+
+static Evas_Object *
+_basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, 
E_Config_Dialog_Data *cfdata)
+{
+   Evas_Object *o, *ob, *of;
+   E_Radio_Group *rg;
+   
+   o = e_widget_list_add(evas, 0, 0);
+   ob = e_widget_check_add(evas, _("Restore CPU Power Policy"), 
&cfdata->restore_governor);
+   e_widget_list_object_append(o, ob, 1, 0, 0.5);
+   
+   ob = e_widget_check_add(evas, _("Automatic powersaving"), 
&cfdata->auto_powersave);
+   e_widget_list_object_append(o, ob, 1, 0, 0.5);
+   
+   of = e_widget_framelist_add(evas, _("Update poll interval"), 0);
+   rg = e_widget_radio_group_new(&cfdata->poll_interval);
+   ob = e_widget_radio_add(evas, _("Fast (4 ticks)"), 4, rg);
+   e_widget_framelist_object_append(of, ob);
+   ob = e_widget_radio_add(evas, _("Medium (8 ticks)"), 8, rg);
+   e_widget_framelist_object_append(of, ob);
+   ob = e_widget_radio_add(evas, _("Normal (32 ticks)"), 32, rg);
+   e_widget_framelist_object_append(of, ob);
+   ob = e_widget_radio_add(evas, _("Slow (64 ticks)"), 64, rg);
+   e_widget_framelist_object_append(of, ob);
+   ob = e_widget_radio_add(evas, _("Very Slow (256 ticks)"), 256, rg);
+   e_widget_framelist_object_append(of, ob);
+   e_widget_list_object_append(o, of, 1, 0, 0.5);
+
+   if ((cpufreq_config->status) && (cpufreq_config->status->pstate))
+     {
+        ob = e_widget_label_add(evas, _("Minimum Power State"));
+        e_widget_list_object_append(o, ob, 1, 0, 0.5);
+        ob = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 0, 100,
+                                 1, 0, NULL, &cfdata->pstate_min, 100);
+        e_widget_list_object_append(o, ob, 1, 0, 0.5);
+
+        ob = e_widget_label_add(evas, _("Maximum Power State"));
+        e_widget_list_object_append(o, ob, 1, 0, 0.5);
+        ob = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 2, 100,
+                                 1, 0, NULL, &cfdata->pstate_max, 100);
+        e_widget_list_object_append(o, ob, 1, 0, 0.5);
+     }
+   else
+     {
+        // XXX: list governors
+     }
+   return o;
+}
+
+static int
+_basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data 
*cfdata)
+{
+   if (!cpufreq_config) return 0;
+   cpufreq_config->poll_interval = cfdata->poll_interval;
+   cpufreq_config->restore_governor = cfdata->restore_governor;
+   cpufreq_config->auto_powersave = cfdata->auto_powersave;
+   cpufreq_config->pstate_min = cfdata->pstate_min + 1;
+   cpufreq_config->pstate_max = cfdata->pstate_max + 1;
+   eina_stringshare_replace(&cpufreq_config->powersave_governor, 
cfdata->powersave_governor);
+   eina_stringshare_replace(&cpufreq_config->governor, cfdata->governor);
+   _cpufreq_poll_interval_update();
+   if (cpufreq_config->governor)
+     _cpufreq_set_governor(cpufreq_config->governor);
+   if (cpufreq_config->pstate_max < cpufreq_config->pstate_min)
+     cpufreq_config->pstate_max = cpufreq_config->pstate_min;
+   if (cpufreq_config->pstate_min > cpufreq_config->pstate_max)
+     cpufreq_config->pstate_min = cpufreq_config->pstate_max;
+   _cpufreq_set_pstate(cpufreq_config->pstate_min - 1,
+                       cpufreq_config->pstate_max - 1, 1);
+   e_config_save_queue();
+   return 1;
+}
+
+static int
+_basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data 
*cfdata __UNUSED__)
+{
+   Eina_Bool ret = EINA_TRUE;
+   return ret;
+}
diff --git a/src/modules/cpufreq/e_mod_main.c b/src/modules/cpufreq/e_mod_main.c
index 943fd84..7183cb3 100644
--- a/src/modules/cpufreq/e_mod_main.c
+++ b/src/modules/cpufreq/e_mod_main.c
@@ -38,9 +38,7 @@ struct _Instance
 
 static void      _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void      _menu_cb_post(void *data, E_Menu *m);
-static void      _cpufreq_set_governor(const char *governor);
 static void      _cpufreq_set_frequency(int frequency);
-static void      _cpufreq_set_pstate(int min, int max, int turbo);
 static Eina_Bool _cpufreq_cb_check(void *data);
 static Status   *_cpufreq_status_new(void);
 static void      _cpufreq_status_free(Status *s);
@@ -65,7 +63,6 @@ static void      _cpufreq_menu_powersave_governor(void *data, 
E_Menu *m, E_Menu_
 static void      _cpufreq_menu_frequency(void *data, E_Menu *m, E_Menu_Item 
*mi);
 static void      _cpufreq_menu_pstate_min(void *data, E_Menu *m, E_Menu_Item 
*mi);
 static void      _cpufreq_menu_pstate_max(void *data, E_Menu *m, E_Menu_Item 
*mi);
-static void      _cpufreq_poll_interval_update(void);
 
 static E_Config_DD *conf_edd = NULL;
 
@@ -163,6 +160,14 @@ _gc_id_new(const E_Gadcon_Client_Class *client_class 
__UNUSED__)
 }
 
 static void
+_cpufreq_cb_menu_configure(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi 
__UNUSED__)
+{
+   if (!cpufreq_config) return;
+   if (cpufreq_config->config_dialog) return;
+   e_int_config_cpufreq_module(m->zone->container, NULL);
+}
+
+static void
 _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj 
__UNUSED__, void *event_info)
 {
    Instance *inst;
@@ -428,9 +433,16 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, 
Evas_Object *obj __UNUSED_
    else if (ev->button == 3)
      {
         E_Menu *m;
+        E_Menu_Item *mi;
         int cx, cy;
 
         m = e_menu_new();
+        
+        mi = e_menu_item_new(m);
+        e_menu_item_label_set(mi, _("Settings"));
+        e_util_menu_item_theme_icon_set(mi, "configure");
+        e_menu_item_callback_set(mi, _cpufreq_cb_menu_configure, NULL);
+        
         m = e_gadcon_client_util_menu_items_append(inst->gcc, m, 0);
 
         e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon,
@@ -474,7 +486,7 @@ _menu_cb_post(void *data, E_Menu *m __UNUSED__)
    cpufreq_config->menu_powersave = NULL;
 }
 
-static void
+void
 _cpufreq_set_governor(const char *governor)
 {
    char buf[4096];
@@ -558,7 +570,7 @@ _cpufreq_set_frequency(int frequency)
      }
 }
 
-static void
+void
 _cpufreq_set_pstate(int min, int max, int turbo)
 {
    char buf[4096];
@@ -1252,7 +1264,7 @@ _cpufreq_menu_pstate_max(void *data, E_Menu *m 
__UNUSED__, E_Menu_Item *mi __UNU
    e_config_save_queue();
 }
 
-static void
+void
 _cpufreq_poll_interval_update(void)
 {
    if (cpufreq_config->frequency_check_poller)
@@ -1364,12 +1376,21 @@ e_modapi_init(E_Module *m)
    cpufreq_config->module = m;
 
    e_gadcon_provider_register(&_gadcon_class);
+   
+   snprintf(buf, sizeof(buf), "%s/e-module-cpufreq.edj", e_module_dir_get(m));
+   e_configure_registry_category_add("advanced", 80, _("Advanced"), NULL,
+                                     "preferences-advanced");
+   e_configure_registry_item_add("advanced/cpufreq", 120, _("CPU Frequency"),
+                                 NULL, buf, e_int_config_cpufreq_module);
    return m;
 }
 
 EAPI int
 e_modapi_shutdown(E_Module *m __UNUSED__)
 {
+   e_configure_registry_item_del("advanced/cpufreq");
+   e_configure_registry_category_del("advanced");
+   
    e_gadcon_provider_unregister(&_gadcon_class);
 
    if (cpufreq_config->frequency_check_poller)
@@ -1408,6 +1429,10 @@ e_modapi_shutdown(E_Module *m __UNUSED__)
      eina_stringshare_del(cpufreq_config->governor);
    if (cpufreq_config->status) _cpufreq_status_free(cpufreq_config->status);
    E_FREE(cpufreq_config->set_exe_path);
+   
+   if (cpufreq_config->config_dialog)
+     e_object_del(E_OBJECT(cpufreq_config->config_dialog));
+   
    free(cpufreq_config);
    cpufreq_config = NULL;
    E_CONFIG_DD_FREE(conf_edd);
diff --git a/src/modules/cpufreq/e_mod_main.h b/src/modules/cpufreq/e_mod_main.h
index f462c9b..5879cb8 100644
--- a/src/modules/cpufreq/e_mod_main.h
+++ b/src/modules/cpufreq/e_mod_main.h
@@ -51,6 +51,7 @@ struct _Config
    char         *set_exe_path;
    Ecore_Poller *frequency_check_poller;
    Ecore_Event_Handler *handler;
+   E_Config_Dialog *config_dialog;
 };
 
 EAPI extern E_Module_Api e_modapi;
@@ -59,6 +60,12 @@ EAPI void *e_modapi_init     (E_Module *m);
 EAPI int   e_modapi_shutdown (E_Module *m);
 EAPI int   e_modapi_save     (E_Module *m);
 
+E_Config_Dialog *e_int_config_cpufreq_module(E_Container *con, const char 
*params);
+void _cpufreq_poll_interval_update(void);
+void _cpufreq_set_governor(const char *governor);
+void _cpufreq_set_pstate(int min, int max, int turbo);
+
+extern Config *cpufreq_config;
 
 /**
  * @addtogroup Optional_Gadgets

-- 

------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and 
AppDynamics. Performance Central is your source for news, insights, 
analysis and resources for efficient Application Performance Management. 
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk

Reply via email to