diff options
-rw-r--r-- | libs/gui/Android.bp | 5 | ||||
-rw-r--r-- | libs/gui/DisplayEventDispatcher.cpp | 13 | ||||
-rw-r--r-- | libs/gui/libgui_flags.aconfig | 17 | ||||
-rw-r--r-- | services/surfaceflinger/Scheduler/RefreshRateSelector.cpp | 5 | ||||
-rw-r--r-- | services/surfaceflinger/common/Android.bp | 4 | ||||
-rw-r--r-- | services/surfaceflinger/common/FlagManager.cpp | 4 | ||||
-rw-r--r-- | services/surfaceflinger/common/include/common/FlagManager.h | 1 |
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 |