barbieri pushed a commit to branch master.

commit 0a9c78896b875c265c80177a6b5fde16b7820339
Author: Gustavo Sverzut Barbieri <[email protected]>
Date:   Thu Aug 8 20:09:37 2013 -0300

    ecore: add system-level events.
    
     - ECORE_EVENT_LOW_MEMORY: Low memory state changed
     - ECORE_EVENT_LOW_BATTERY: Low battery state changed
     - ECORE_EVENT_LOCALE_CHANGED:  Locale changed
     - ECORE_EVENT_HOSTNAME_CHANGED: Hostname changed
     - ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED: Time or Date changed
---
 src/lib/ecore/Ecore_Common.h | 102 ++++++++++++++++++++++++++++++++++++++++++-
 src/lib/ecore/ecore.c        |  34 +++++++++++++++
 2 files changed, 135 insertions(+), 1 deletion(-)

diff --git a/src/lib/ecore/Ecore_Common.h b/src/lib/ecore/Ecore_Common.h
index 3d794a8..c84921d 100644
--- a/src/lib/ecore/Ecore_Common.h
+++ b/src/lib/ecore/Ecore_Common.h
@@ -271,7 +271,12 @@ EAPI int ecore_thread_main_loop_end(void);
 #define ECORE_EVENT_SIGNAL_EXIT     3 /**< Exit signal event */
 #define ECORE_EVENT_SIGNAL_POWER    4 /**< Power signal event */
 #define ECORE_EVENT_SIGNAL_REALTIME 5 /**< Realtime signal event */
-#define ECORE_EVENT_COUNT           6
+#define ECORE_EVENT_LOW_MEMORY               6 /**< Low memory state changed, 
see ecore_low_memory_get() */
+#define ECORE_EVENT_LOW_BATTERY              7 /**< Low battery state changed, 
see ecore_low_battery_get() */
+#define ECORE_EVENT_LOCALE_CHANGED           8 /**< Locale changed */
+#define ECORE_EVENT_HOSTNAME_CHANGED         9 /**< Hostname changed */
+#define ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED 10 /**< Time or Date changed */
+#define ECORE_EVENT_COUNT                   11
 
 typedef struct _Ecore_Win32_Handler         Ecore_Win32_Handler;    /**< A 
handle for HANDLE handlers on Windows */
 typedef struct _Ecore_Event_Handler         Ecore_Event_Handler;    /**< A 
handle for an event handler */
@@ -510,6 +515,101 @@ EAPI void *ecore_event_current_event_get(void);
  */
 
 /**
+ * @defgroup Ecore_System_Events System Events
+ *
+ * Ecore is aware of some system events that one may be interested, they are 
described below:
+ *
+ * @li #ECORE_EVENT_LOW_MEMORY indicates system changed its free
+ *     memory status, going to or being back from "low memory"
+ *     state. When going to low memory state the libraries and
+ *     applications may help the system by reducing memory usage,
+ *     dropping caches and unused resources. The event carries no
+ *     information, the current state should be queried with
+ *     ecore_low_memory_get().
+ * @li #ECORE_EVENT_LOW_BATTERY indicates system changed its battery
+ *     level, going to or being back from "low battery" state. When
+ *     going to low battery state the libraries and applications may
+ *     help the system by reducing number of wake ups and processing,
+ *     increasing @ref Ecore_Animator frame time values, reducing the
+ *     number of @ref Ecore_Timer and @ref Ecore_Idler or even going
+ *     to extreme of trading quality over speed to finish tasks
+ *     sooner. The event carries no information, the current state
+ *     should be queried with ecore_low_battery_get().
+ * @li #ECORE_EVENT_LOCALE_CHANGED indicates the system locale and/or
+ *     language changed. This event carries no information and there
+ *     is no ecore specific call to get the new locale. It is advised
+ *     that the emitter of this event to set the new locale, for
+ *     instance in POSIX one should call setlocale() before adding the
+ *     event. Libraries and applications should then reload their
+ *     resources and reformat their strings to use the new values.
+ * @li #ECORE_EVENT_HOSTNAME_CHANGED indicates the system hostname
+ *     changed. This event carries no information and the new value
+ *     should be queried with platform specific calls, such as
+ *     gethostname() on POSIX.
+ * @li #ECORE_EVENT_SYSTEM_TIMEDATE_CHANGED indicates the system time
+ *     or date changed. This may happen as result of Daylight Saving
+ *     changes, NTP fixing the clock, changing timezones or user
+ *     setting a new date manually. This event carries no information
+ *     and the new value should be queried with ecore_time_unix_get()
+ *     or platform specific such as gettimeofday()
+ *
+ * @ingroup Ecore_Event_Group
+ * @{
+ */
+
+/**
+ * @brief Get the current status of low memory.
+ * @return #EINA_TRUE if low on memory, #EINA_FALSE if memory usage is under 
normal levels.
+ * @since 1.8
+ */
+EAPI Eina_Bool ecore_low_memory_get(void);
+
+/**
+ * @brief Set the low memory status.
+ * @param status #EINA_TRUE if low on memory, #EINA_FALSE if memory usage is 
under normal levels.
+ *
+ * This function will keep the information about the current low
+ * memory status and if it changed will automatically create an
+ * #ECORE_EVENT_LOW_MEMORY event.
+ *
+ * @note This function should not be called by user, instead a
+ * monitoring entity that is system dependent. Usually an ecore module
+ * that is platform-specific.
+ *
+ * @since 1.8
+ */
+EAPI void ecore_low_memory_set(Eina_Bool status);
+
+/**
+ * @brief Get the current status of low battery.
+ * @return #EINA_TRUE if low on battery, #EINA_FALSE if battery level is 
reasonable.
+ * @since 1.8
+ */
+EAPI Eina_Bool ecore_low_battery_get(void);
+
+/**
+ * @brief Set the low battery status.
+ * @param status #EINA_TRUE if low on battery, #EINA_FALSE if battery level is 
reasonable.
+ *
+ * This function will keep the information about the current low
+ * battery status and if it changed will automatically create an
+ * #ECORE_EVENT_LOW_BATTERY event.
+ *
+ * @note This function should not be called by user, instead a
+ * monitoring entity that is system dependent. Usually an ecore module
+ * that is platform-specific.
+ *
+ * @since 1.8
+ */
+EAPI void ecore_low_battery_set(Eina_Bool status);
+
+/**
+ * @}
+ */
+
+
+
+/**
  * @defgroup Ecore_Exe_Group Process Spawning Functions
  *
  * This module is responsible for managing portable processes using Ecore.
diff --git a/src/lib/ecore/ecore.c b/src/lib/ecore/ecore.c
index 879f130..28726a2 100644
--- a/src/lib/ecore/ecore.c
+++ b/src/lib/ecore/ecore.c
@@ -98,6 +98,9 @@ static int _thread_id = -1;
 static int _thread_id_max = 0;
 static int _thread_id_update = 0;
 
+static Eina_Bool _ecore_low_memory = EINA_FALSE;
+static Eina_Bool _ecore_low_battery = EINA_FALSE;
+
 #ifdef HAVE_SYSTEMD
 static Ecore_Timer *_systemd_watchdog = NULL;
 #endif
@@ -915,6 +918,37 @@ _thread_callback(void        *data EINA_UNUSED,
    _ecore_main_call_flush();
 }
 
+EAPI Eina_Bool
+ecore_low_memory_get(void)
+{
+   return _ecore_low_memory;
+}
+
+EAPI void
+ecore_low_memory_set(Eina_Bool status)
+{
+   status = !!status;
+   if (_ecore_low_memory == status) return;
+   _ecore_low_memory = status;
+   ecore_event_add(ECORE_EVENT_LOW_MEMORY, NULL, NULL, NULL);
+}
+
+EAPI Eina_Bool
+ecore_low_battery_get(void)
+{
+   return _ecore_low_battery;
+}
+
+EAPI void
+ecore_low_battery_set(Eina_Bool status)
+{
+   status = !!status;
+   if (_ecore_low_battery == status) return;
+   _ecore_low_battery = status;
+   ecore_event_add(ECORE_EVENT_LOW_BATTERY, NULL, NULL, NULL);
+}
+
+
 static const Eo_Class_Description parent_class_desc = {
      EO_VERSION,
      "ecore_parent",

-- 

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk

Reply via email to