This reduces duplicate code.
Change-Id: I450d80d957e79f093c37747a233507a95cefe182
if (!hwc) return;
+ e_fps_tracker_destroy(hwc->fps_tracker);
+
if (hwc->target_hwc_window)
{
e_hwc_windows_target_window_del(hwc->target_hwc_window);
#include "e_intern.h"
#include "e_hwc.h"
+#include "e_fps_tracker_intern.h"
typedef struct _E_Hwc_Window_Buffer E_Hwc_Window_Buffer;
typedef struct _E_Hwc_Window_Target E_Hwc_Window_Target;
int norender;
/* for fps */
- double fps;
- double old_fps;
- double frametime;
- double time;
- double lapse;
- int cframes;
- int flapse;
+ E_Fps_Tracker *fps_tracker;
Eina_Bool present_sync;
E_Comp *comp = e_comp_get();
if (comp->calc_fps)
{
- double dt;
- double tim = ecore_time_get();
-
- dt = tim - hwc_window->fps.frametime;
- hwc_window->fps.frametime = tim;
-
- hwc_window->fps.time += dt;
- hwc_window->fps.cframes++;
-
- if (hwc_window->fps.lapse == 0.0)
+ if (!hwc_window->fps_tracker)
{
- hwc_window->fps.lapse = tim;
- hwc_window->fps.flapse = hwc_window->fps.cframes;
- }
- else if ((tim - hwc_window->fps.lapse) >= 0.5)
- {
- hwc_window->fps.fps = (hwc_window->fps.cframes - hwc_window->fps.flapse) /
- (tim - hwc_window->fps.lapse);
- hwc_window->fps.lapse = tim;
- hwc_window->fps.flapse = hwc_window->fps.cframes;
- hwc_window->fps.time = 0.0;
+ hwc_window->fps_tracker = e_fps_tracker_create();
+ if (!hwc_window->fps_tracker)
+ return;
}
+
+ e_fps_tracker_update(hwc_window->fps_tracker);
}
}
EHWINF("Free", NULL, hwc_window->hwc, hwc_window);
+ e_fps_tracker_destroy(hwc_window->fps_tracker);
+
hwc = hwc_window->hwc;
if (hwc)
hwc->hwc_windows = eina_list_remove(hwc->hwc_windows, hwc_window);
{
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
- if (hwc_window->fps.old_fps == hwc_window->fps.fps)
+ if (!hwc_window->fps_tracker)
return EINA_FALSE;
- if (hwc_window->fps.fps > 0.0)
- {
- *fps = hwc_window->fps.fps;
- hwc_window->fps.old_fps = hwc_window->fps.fps;
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
+ return e_fps_tracker_fps_get(hwc_window->fps_tracker, fps);
}
EINTERN void
#include "e_hwc_intern.h"
#include "e_egl_sync_intern.h"
#include "e_view_rect.h"
+#include "e_fps_tracker_intern.h"
#define E_HWC_WINDOW_TYPE (int)0xE0b11003
#define E_HWC_WINDOW_ZPOS_NONE -999
} cursor;
struct wl_listener cursor_buffer_destroy_listener;
- struct
- {
- /* for fps */
- double fps;
- double old_fps;
- double frametime;
- double time;
- double lapse;
- int cframes;
- int flapse;
- } fps;
+ E_Fps_Tracker *fps_tracker;
int constraints;
E_Comp *comp = e_comp_get();
if (comp->calc_fps)
{
- double dt;
- double tim = ecore_time_get();
-
- dt = tim - hwc->frametime;
- hwc->frametime = tim;
-
- hwc->time += dt;
- hwc->cframes++;
-
- if (hwc->lapse == 0.0)
+ if (!hwc->fps_tracker)
{
- hwc->lapse = tim;
- hwc->flapse = hwc->cframes;
- }
- else if ((tim - hwc->lapse) >= 0.5)
- {
- hwc->fps = (hwc->cframes - hwc->flapse) / (tim - hwc->lapse);
- hwc->lapse = tim;
- hwc->flapse = hwc->cframes;
- hwc->time = 0.0;
+ hwc->fps_tracker = e_fps_tracker_create();
+ if (!hwc->fps_tracker)
+ return;
}
+
+ e_fps_tracker_update(hwc->fps_tracker);
}
}
{
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, EINA_FALSE);
- if (hwc->old_fps == hwc->fps)
+ if (!hwc->fps_tracker)
return EINA_FALSE;
- if (hwc->fps > 0.0)
- {
- *fps = hwc->fps;
- hwc->old_fps = hwc->fps;
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
+ return e_fps_tracker_fps_get(hwc->fps_tracker, fps);
}
EINTERN Eina_Bool
#include "e_surface_fps_tracker_intern.h"
#include "e_compositor_private.h"
+#include "e_fps_tracker_intern.h"
#include <stdlib.h>
#include <wayland-util.h>
struct _E_Surface_Fps_Tracker
{
- double fps;
- double old_fps;
- double frametime;
- double time;
- double lapse;
- int cframes;
- int flapse;
+ E_Fps_Tracker *fps_tracker;
struct wl_listener surface_destroy;
struct wl_listener commit;
{
E_Surface_Fps_Tracker *tracker = wl_container_of(listener, tracker, surface_destroy);
+ e_fps_tracker_destroy(tracker->fps_tracker);
wl_list_remove(&tracker->surface_destroy.link);
wl_list_remove(&tracker->commit.link);
free(tracker);
return wl_container_of(listener, tracker, surface_destroy);
}
-static void
-_tracker_fps_update(E_Surface_Fps_Tracker *tracker)
-{
- double dt;
- double tim;
-
- tim = ecore_time_get();
-
- dt = tim - tracker->frametime;
-
- tracker->frametime = tim;
- tracker->time += dt;
- tracker->cframes++;
-
- if (tracker->lapse == 0.0)
- {
- tracker->lapse = tim;
- tracker->flapse = tracker->cframes;
- }
- else if ((tim - tracker->lapse) >= 0.5)
- {
- tracker->fps = (tracker->cframes - tracker->flapse) /
- (tim - tracker->lapse);
- tracker->lapse = tim;
- tracker->flapse = tracker->cframes;
- tracker->time = 0.0;
- }
-}
-
static void
_tracker_cb_commit(struct wl_listener *listener, void *data)
{
E_Surface_Event_Commit *event = data;
if (event->committed & E_SURFACE_STATE_BUFFER)
- _tracker_fps_update(tracker);
+ e_fps_tracker_update(tracker->fps_tracker);
}
static E_Surface_Fps_Tracker *
if (!tracker)
return NULL;
+ tracker->fps_tracker = e_fps_tracker_create();
+ if (!tracker->fps_tracker)
+ {
+ free(tracker);
+ return NULL;
+ }
+
tracker->surface_destroy.notify = _tracker_cb_surface_destroy;
e_surface_destroy_listener_add(surface, &tracker->surface_destroy);
EINTERN Eina_Bool
e_surface_fps_tracker_fps_get(E_Surface_Fps_Tracker *tracker, double *fps)
{
- if (tracker->old_fps == tracker->fps)
- return EINA_FALSE;
-
- if (tracker->fps > 0.0)
- {
- *fps = tracker->fps;
- tracker->old_fps = tracker->fps;
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
+ return e_fps_tracker_fps_get(tracker->fps_tracker, fps);
}