Apply E_Fps_Tracker 62/320562/1
authorSeunghun Lee <shiin.lee@samsung.com>
Tue, 4 Mar 2025 06:45:49 +0000 (15:45 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 5 Mar 2025 02:17:28 +0000 (11:17 +0900)
This reduces duplicate code.

Change-Id: I450d80d957e79f093c37747a233507a95cefe182

src/bin/displaymgr/e_hwc.c
src/bin/displaymgr/e_hwc_intern.h
src/bin/displaymgr/e_hwc_window.c
src/bin/displaymgr/e_hwc_window_intern.h
src/bin/displaymgr/e_hwc_windows.c
src/bin/server/e_surface_fps_tracker.c

index 40ccdeba76372f25a9bf1668a0f61a767c879a8c..74bd5d8f46b8332c84c3a7bb54b93216cae524e2 100644 (file)
@@ -213,6 +213,8 @@ e_hwc_del(E_Hwc *hwc)
 
    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);
index 738f7caebe7461a4c5040e96c75b02371f3c2aea..203161ca723449875a3f7f2dffdb107b3594d0b3 100644 (file)
@@ -3,6 +3,7 @@
 
 #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;
@@ -103,13 +104,7 @@ struct _E_Hwc
    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;
 
index 14b82c27c5580608c97cadc24af8d97d9f65a425..103f06a546f45e1569b473c14fa69d138d3ddb46 100644 (file)
@@ -512,28 +512,14 @@ _e_hwc_window_update_fps(E_Hwc_Window *hwc_window)
    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);
      }
 }
 
@@ -607,6 +593,8 @@ _e_hwc_window_free(E_Hwc_Window *hwc_window)
 
    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);
@@ -3406,17 +3394,10 @@ e_hwc_window_fps_get(E_Hwc_Window *hwc_window, double *fps)
 {
    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
index 86d1857c04feaf74339451d36af19b7b9c5e23ec..15d342d83039aa0e79c8786a181a40093ffb3019 100644 (file)
@@ -5,6 +5,7 @@
 #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
@@ -126,17 +127,7 @@ struct _E_Hwc_Window
    } 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;
 
index 93aa0b9fd61c0c614dddd72760c9695ad0810ac9..579d5878e9e0dff9b5bddafca918cf8006767e01 100644 (file)
@@ -115,27 +115,14 @@ _e_hwc_windows_update_fps(E_Hwc *hwc)
    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);
      }
 }
 
@@ -3563,17 +3550,10 @@ e_hwc_windows_fps_get(E_Hwc *hwc, double *fps)
 {
    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
index 513aa42ba2ab03ccaf6acb3cebd856c701404bd6..0abe15a6a2703e00d14466784d5ca158ff07ac64 100644 (file)
@@ -1,18 +1,13 @@
 #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;
@@ -23,6 +18,7 @@ _tracker_cb_surface_destroy(struct wl_listener *listener, void *data)
 {
    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);
@@ -41,35 +37,6 @@ _tracker_try_from_surface(E_Surface *surface)
    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)
 {
@@ -77,7 +44,7 @@ _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 *
@@ -89,6 +56,13 @@ _tracker_create(E_Surface *surface)
    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);
 
@@ -113,15 +87,5 @@ e_surface_fps_tracker_get_or_create(E_Surface *surface)
 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);
 }