Loading services/surfaceflinger/DisplayDevice.cpp +13 −1 Original line number Diff line number Diff line Loading @@ -182,11 +182,23 @@ void DisplayDevice::setPowerMode(hal::PowerMode mode) { getCompositionDisplay()->applyDisplayBrightness(true); } mPowerMode = mode; if (mPowerMode) { *mPowerMode = mode; } else { mPowerMode.emplace("PowerMode -" + to_string(getId()), mode); } getCompositionDisplay()->setCompositionEnabled(isPoweredOn()); } void DisplayDevice::tracePowerMode() { // assign the same value for tracing if (mPowerMode) { const hal::PowerMode powerMode = *mPowerMode; *mPowerMode = powerMode; } } void DisplayDevice::enableLayerCaching(bool enable) { getCompositionDisplay()->setLayerCachingEnabled(enable); } Loading services/surfaceflinger/DisplayDevice.h +3 −1 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ public: std::optional<hardware::graphics::composer::hal::PowerMode> getPowerMode() const; void setPowerMode(hardware::graphics::composer::hal::PowerMode mode); bool isPoweredOn() const; void tracePowerMode(); // Enables layer caching on this DisplayDevice void enableLayerCaching(bool enable); Loading Loading @@ -276,7 +277,8 @@ private: static ui::Transform::RotationFlags sPrimaryDisplayRotationFlags; // Allow nullopt as initial power mode. std::optional<hardware::graphics::composer::hal::PowerMode> mPowerMode; using TracedPowerMode = TracedOrdinal<hardware::graphics::composer::hal::PowerMode>; std::optional<TracedPowerMode> mPowerMode; std::optional<float> mStagedBrightness; std::optional<float> mBrightness; Loading services/surfaceflinger/SurfaceFlinger.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -2563,6 +2563,7 @@ void SurfaceFlinger::composite(TimePoint frameTime, VsyncId vsyncId) if (!dropFrame) { refreshArgs.outputs.push_back(display->getCompositionDisplay()); } display->tracePowerMode(); displayIds.push_back(display->getId()); } mPowerAdvisor->setDisplays(displayIds); Loading services/surfaceflinger/TracedOrdinal.h +17 −11 Original line number Diff line number Diff line Loading @@ -24,16 +24,24 @@ #include <cutils/compiler.h> #include <utils/Trace.h> namespace std { namespace android { namespace { template <class Rep, class Period> bool signbit(std::chrono::duration<Rep, Period> v) { return signbit(std::chrono::duration_cast<std::chrono::nanoseconds>(v).count()); return std::signbit(std::chrono::duration_cast<std::chrono::nanoseconds>(v).count()); } } // namespace std namespace android { template <typename Enum, typename std::enable_if<std::is_enum<Enum>::value>::type* = nullptr> bool signbit(Enum e) { return std::signbit(static_cast<typename std::underlying_type<Enum>::type>(e)); } template <typename T, typename std::enable_if<!std::is_enum<T>::value>::type* = nullptr> bool signbit(T t) { return std::signbit(t); } namespace { template <typename T> int64_t to_int64(T v) { return int64_t(v); Loading @@ -49,14 +57,12 @@ template <typename T> class TracedOrdinal { public: static_assert(std::is_same<bool, T>() || (std::is_signed<T>() && std::is_integral<T>()) || std::is_same<std::chrono::nanoseconds, T>(), std::is_same<std::chrono::nanoseconds, T>() || std::is_enum<T>(), "Type is not supported. Please test it with systrace before adding " "it to the list."); TracedOrdinal(std::string name, T initialValue) : mName(std::move(name)), mHasGoneNegative(std::signbit(initialValue)), mData(initialValue) { : mName(std::move(name)), mHasGoneNegative(signbit(initialValue)), mData(initialValue) { trace(); } Loading @@ -66,7 +72,7 @@ public: TracedOrdinal& operator=(T other) { mData = other; mHasGoneNegative = mHasGoneNegative || std::signbit(mData); mHasGoneNegative = mHasGoneNegative || signbit(mData); trace(); return *this; } Loading @@ -81,7 +87,7 @@ private: mNameNegative = mName + "Negative"; } if (!std::signbit(mData)) { if (!signbit(mData)) { ATRACE_INT64(mName.c_str(), to_int64(mData)); if (mHasGoneNegative) { ATRACE_INT64(mNameNegative.c_str(), 0); Loading Loading
services/surfaceflinger/DisplayDevice.cpp +13 −1 Original line number Diff line number Diff line Loading @@ -182,11 +182,23 @@ void DisplayDevice::setPowerMode(hal::PowerMode mode) { getCompositionDisplay()->applyDisplayBrightness(true); } mPowerMode = mode; if (mPowerMode) { *mPowerMode = mode; } else { mPowerMode.emplace("PowerMode -" + to_string(getId()), mode); } getCompositionDisplay()->setCompositionEnabled(isPoweredOn()); } void DisplayDevice::tracePowerMode() { // assign the same value for tracing if (mPowerMode) { const hal::PowerMode powerMode = *mPowerMode; *mPowerMode = powerMode; } } void DisplayDevice::enableLayerCaching(bool enable) { getCompositionDisplay()->setLayerCachingEnabled(enable); } Loading
services/surfaceflinger/DisplayDevice.h +3 −1 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ public: std::optional<hardware::graphics::composer::hal::PowerMode> getPowerMode() const; void setPowerMode(hardware::graphics::composer::hal::PowerMode mode); bool isPoweredOn() const; void tracePowerMode(); // Enables layer caching on this DisplayDevice void enableLayerCaching(bool enable); Loading Loading @@ -276,7 +277,8 @@ private: static ui::Transform::RotationFlags sPrimaryDisplayRotationFlags; // Allow nullopt as initial power mode. std::optional<hardware::graphics::composer::hal::PowerMode> mPowerMode; using TracedPowerMode = TracedOrdinal<hardware::graphics::composer::hal::PowerMode>; std::optional<TracedPowerMode> mPowerMode; std::optional<float> mStagedBrightness; std::optional<float> mBrightness; Loading
services/surfaceflinger/SurfaceFlinger.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -2563,6 +2563,7 @@ void SurfaceFlinger::composite(TimePoint frameTime, VsyncId vsyncId) if (!dropFrame) { refreshArgs.outputs.push_back(display->getCompositionDisplay()); } display->tracePowerMode(); displayIds.push_back(display->getId()); } mPowerAdvisor->setDisplays(displayIds); Loading
services/surfaceflinger/TracedOrdinal.h +17 −11 Original line number Diff line number Diff line Loading @@ -24,16 +24,24 @@ #include <cutils/compiler.h> #include <utils/Trace.h> namespace std { namespace android { namespace { template <class Rep, class Period> bool signbit(std::chrono::duration<Rep, Period> v) { return signbit(std::chrono::duration_cast<std::chrono::nanoseconds>(v).count()); return std::signbit(std::chrono::duration_cast<std::chrono::nanoseconds>(v).count()); } } // namespace std namespace android { template <typename Enum, typename std::enable_if<std::is_enum<Enum>::value>::type* = nullptr> bool signbit(Enum e) { return std::signbit(static_cast<typename std::underlying_type<Enum>::type>(e)); } template <typename T, typename std::enable_if<!std::is_enum<T>::value>::type* = nullptr> bool signbit(T t) { return std::signbit(t); } namespace { template <typename T> int64_t to_int64(T v) { return int64_t(v); Loading @@ -49,14 +57,12 @@ template <typename T> class TracedOrdinal { public: static_assert(std::is_same<bool, T>() || (std::is_signed<T>() && std::is_integral<T>()) || std::is_same<std::chrono::nanoseconds, T>(), std::is_same<std::chrono::nanoseconds, T>() || std::is_enum<T>(), "Type is not supported. Please test it with systrace before adding " "it to the list."); TracedOrdinal(std::string name, T initialValue) : mName(std::move(name)), mHasGoneNegative(std::signbit(initialValue)), mData(initialValue) { : mName(std::move(name)), mHasGoneNegative(signbit(initialValue)), mData(initialValue) { trace(); } Loading @@ -66,7 +72,7 @@ public: TracedOrdinal& operator=(T other) { mData = other; mHasGoneNegative = mHasGoneNegative || std::signbit(mData); mHasGoneNegative = mHasGoneNegative || signbit(mData); trace(); return *this; } Loading @@ -81,7 +87,7 @@ private: mNameNegative = mName + "Negative"; } if (!std::signbit(mData)) { if (!signbit(mData)) { ATRACE_INT64(mName.c_str(), to_int64(mData)); if (mHasGoneNegative) { ATRACE_INT64(mNameNegative.c_str(), 0); Loading