summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ady Abraham <adyabr@google.com> 2024-06-14 13:41:12 -0700
committer Ady Abraham <adyabr@google.com> 2024-06-14 20:45:45 +0000
commit1d0cae97cd67a455563a92f1f11086dd1f030877 (patch)
treee49fc1a36c79189a36a0a1180a152cf8aa8d1600
parent8c9cd3c537f7d4781862e2d95b32247fa5bb3d66 (diff)
SF: trace the render rate of an app
Add a trace point for both SF and apps when the render rate is overridden. Bug: 347314033 Test: manual Change-Id: I87dc9b17a4c1f97fa43b025cfa684f43c20c5a25
-rw-r--r--libs/gui/Android.bp5
-rw-r--r--libs/gui/DisplayEventDispatcher.cpp13
-rw-r--r--libs/gui/libgui_flags.aconfig17
-rw-r--r--services/surfaceflinger/Scheduler/RefreshRateSelector.cpp5
-rw-r--r--services/surfaceflinger/common/Android.bp4
-rw-r--r--services/surfaceflinger/common/FlagManager.cpp4
-rw-r--r--services/surfaceflinger/common/include/common/FlagManager.h1
7 files changed, 45 insertions, 4 deletions
diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp
index 2547297ff8..9ef0eacfce 100644
--- a/libs/gui/Android.bp
+++ b/libs/gui/Android.bp
@@ -41,6 +41,11 @@ cc_aconfig_library {
aconfig_declarations: "libgui_flags",
}
+cc_aconfig_library {
+ name: "libguiflags_no_apex",
+ aconfig_declarations: "libgui_flags",
+}
+
cc_library_headers {
name: "libgui_headers",
vendor_available: true,
diff --git a/libs/gui/DisplayEventDispatcher.cpp b/libs/gui/DisplayEventDispatcher.cpp
index f3de96d2cd..c46f9c50ef 100644
--- a/libs/gui/DisplayEventDispatcher.cpp
+++ b/libs/gui/DisplayEventDispatcher.cpp
@@ -15,6 +15,7 @@
*/
#define LOG_TAG "DisplayEventDispatcher"
+#define ATRACE_TAG ATRACE_TAG_GRAPHICS
#include <cinttypes>
#include <cstdint>
@@ -23,10 +24,13 @@
#include <gui/DisplayEventReceiver.h>
#include <utils/Log.h>
#include <utils/Looper.h>
-
#include <utils/Timers.h>
+#include <utils/Trace.h>
+
+#include <com_android_graphics_libgui_flags.h>
namespace android {
+using namespace com::android::graphics::libgui;
// Number of events to read at a time from the DisplayEventDispatcher pipe.
// The value should be large enough that we can quickly drain the pipe
@@ -171,6 +175,13 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp,
*outDisplayId = ev.header.displayId;
*outCount = ev.vsync.count;
*outVsyncEventData = ev.vsync.vsyncData;
+
+ // Trace the RenderRate for this app
+ if (ATRACE_ENABLED() && flags::trace_frame_rate_override()) {
+ const auto frameInterval = ev.vsync.vsyncData.frameInterval;
+ int fps = frameInterval > 0 ? 1e9f / frameInterval : 0;
+ ATRACE_INT("RenderRate", fps);
+ }
break;
case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG:
if (ev.hotplug.connectionError == 0) {
diff --git a/libs/gui/libgui_flags.aconfig b/libs/gui/libgui_flags.aconfig
index a902a8c5cb..792966fd5e 100644
--- a/libs/gui/libgui_flags.aconfig
+++ b/libs/gui/libgui_flags.aconfig
@@ -7,7 +7,7 @@ flag {
description: "This flag controls plumbing setFrameRate thru BufferQueue"
bug: "281695725"
is_fixed_read_only: true
-}
+} # bq_setframerate
flag {
name: "frametimestamps_previousrelease"
@@ -15,7 +15,7 @@ flag {
description: "Controls a fence fixup for timestamp apis"
bug: "310927247"
is_fixed_read_only: true
-}
+} # frametimestamps_previousrelease
flag {
name: "bq_extendedallocate"
@@ -23,4 +23,15 @@ flag {
description: "Add BQ support for allocate with extended options"
bug: "268382490"
is_fixed_read_only: true
-}
+} # bq_extendedallocate
+
+flag {
+ name: "trace_frame_rate_override"
+ namespace: "core_graphics"
+ description: "Trace FrameRateOverride fps"
+ bug: "347314033"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+} # trace_frame_rate_override
diff --git a/services/surfaceflinger/Scheduler/RefreshRateSelector.cpp b/services/surfaceflinger/Scheduler/RefreshRateSelector.cpp
index 2c664928ee..846727b1d5 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateSelector.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateSelector.cpp
@@ -1066,6 +1066,11 @@ auto RefreshRateSelector::getFrameRateOverrides(const std::vector<LayerRequireme
ALOGV("%s: overriding to %s for uid=%d", __func__, to_string(overrideFps).c_str(), uid);
ATRACE_FORMAT_INSTANT("%s: overriding to %s for uid=%d", __func__,
to_string(overrideFps).c_str(), uid);
+ if (ATRACE_ENABLED() && FlagManager::getInstance().trace_frame_rate_override()) {
+ std::stringstream ss;
+ ss << "FrameRateOverride " << uid;
+ ATRACE_INT(ss.str().c_str(), overrideFps.getIntValue());
+ }
frameRateOverrides.emplace(uid, overrideFps);
}
diff --git a/services/surfaceflinger/common/Android.bp b/services/surfaceflinger/common/Android.bp
index c3594bcf55..bcf18869f8 100644
--- a/services/surfaceflinger/common/Android.bp
+++ b/services/surfaceflinger/common/Android.bp
@@ -38,6 +38,7 @@ cc_library_static {
"libsurfaceflingerflags",
"android.os.flags-aconfig-cc",
"android.server.display.flags-aconfig-cc",
+ "libguiflags_no_apex",
],
}
@@ -50,6 +51,7 @@ cc_library_static {
"libsurfaceflingerflags_test",
"android.os.flags-aconfig-cc-test",
"android.server.display.flags-aconfig-cc",
+ "libguiflags_no_apex",
],
}
@@ -64,6 +66,7 @@ cc_defaults {
"libsurfaceflingerflags",
"android.os.flags-aconfig-cc",
"android.server.display.flags-aconfig-cc",
+ "libguiflags_no_apex",
],
}
@@ -78,5 +81,6 @@ cc_defaults {
"libsurfaceflingerflags_test",
"android.os.flags-aconfig-cc-test",
"android.server.display.flags-aconfig-cc",
+ "libguiflags_no_apex",
],
}
diff --git a/services/surfaceflinger/common/FlagManager.cpp b/services/surfaceflinger/common/FlagManager.cpp
index 4216771515..2e3273c579 100644
--- a/services/surfaceflinger/common/FlagManager.cpp
+++ b/services/surfaceflinger/common/FlagManager.cpp
@@ -27,6 +27,7 @@
#include <cinttypes>
#include <android_os.h>
+#include <com_android_graphics_libgui_flags.h>
#include <com_android_graphics_surfaceflinger_flags.h>
#include <com_android_server_display_feature_flags.h>
@@ -151,6 +152,7 @@ void FlagManager::dump(std::string& result) const {
DUMP_READ_ONLY_FLAG(flush_buffer_slots_to_uncache);
DUMP_READ_ONLY_FLAG(force_compile_graphite_renderengine);
DUMP_READ_ONLY_FLAG(single_hop_screenshot);
+ DUMP_READ_ONLY_FLAG(trace_frame_rate_override);
#undef DUMP_READ_ONLY_FLAG
#undef DUMP_SERVER_FLAG
@@ -264,5 +266,7 @@ FLAG_MANAGER_SERVER_FLAG_IMPORTED(adpf_use_fmq_channel, "", android::os)
FLAG_MANAGER_READ_ONLY_FLAG_IMPORTED(idle_screen_refresh_rate_timeout, "",
com::android::server::display::feature::flags)
FLAG_MANAGER_READ_ONLY_FLAG_IMPORTED(adpf_use_fmq_channel_fixed, "", android::os)
+FLAG_MANAGER_READ_ONLY_FLAG_IMPORTED(trace_frame_rate_override, "",
+ com::android::graphics::libgui::flags);
} // namespace android
diff --git a/services/surfaceflinger/common/include/common/FlagManager.h b/services/surfaceflinger/common/include/common/FlagManager.h
index 22118ab585..ab7a474d2c 100644
--- a/services/surfaceflinger/common/include/common/FlagManager.h
+++ b/services/surfaceflinger/common/include/common/FlagManager.h
@@ -90,6 +90,7 @@ public:
bool flush_buffer_slots_to_uncache() const;
bool force_compile_graphite_renderengine() const;
bool single_hop_screenshot() const;
+ bool trace_frame_rate_override() const;
protected:
// overridden for unit tests