diff options
author | Steven Laver <lavers@google.com> | 2019-05-08 06:18:42 -0700 |
---|---|---|
committer | Steven Laver <lavers@google.com> | 2019-05-08 06:18:42 -0700 |
commit | 4a30c150e58ec67edb92a7bec5ea48cebd6b90d4 (patch) | |
tree | 6d902794d7e59acd54f54ef235feb75becfb01e3 /libs/hwui/renderthread/RenderThread.cpp | |
parent | a6c7c402af360214e509d15980957e74fc673f42 (diff) | |
parent | e4f4eabc31685c001c2b46d8fa87b443f4af5b21 (diff) |
Merge QP1A.190501.001
Change-Id: I0f9f887d6a33702a6988709d8296731cfdb8f73d
Diffstat (limited to 'libs/hwui/renderthread/RenderThread.cpp')
-rw-r--r-- | libs/hwui/renderthread/RenderThread.cpp | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index eca7d88e4e48..41cb8fdc66bd 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -60,8 +60,10 @@ static JVMAttachHook gOnStartHook = nullptr; class DisplayEventReceiverWrapper : public VsyncSource { public: - DisplayEventReceiverWrapper(std::unique_ptr<DisplayEventReceiver>&& receiver) - : mDisplayEventReceiver(std::move(receiver)) {} + DisplayEventReceiverWrapper(std::unique_ptr<DisplayEventReceiver>&& receiver, + const std::function<void()>& onDisplayConfigChanged) + : mDisplayEventReceiver(std::move(receiver)) + , mOnDisplayConfigChanged(onDisplayConfigChanged) {} virtual void requestNextVsync() override { status_t status = mDisplayEventReceiver->requestNextVsync(); @@ -79,6 +81,9 @@ public: case DisplayEventReceiver::DISPLAY_EVENT_VSYNC: latest = ev.header.timestamp; break; + case DisplayEventReceiver::DISPLAY_EVENT_CONFIG_CHANGED: + mOnDisplayConfigChanged(); + break; } } } @@ -90,6 +95,7 @@ public: private: std::unique_ptr<DisplayEventReceiver> mDisplayEventReceiver; + std::function<void()> mOnDisplayConfigChanged; }; class DummyVsyncSource : public VsyncSource { @@ -160,22 +166,29 @@ void RenderThread::initializeDisplayEventReceiver() { // Register the FD mLooper->addFd(receiver->getFd(), 0, Looper::EVENT_INPUT, RenderThread::displayEventReceiverCallback, this); - mVsyncSource = new DisplayEventReceiverWrapper(std::move(receiver)); + mVsyncSource = new DisplayEventReceiverWrapper(std::move(receiver), [this] { + DeviceInfo::get()->onDisplayConfigChanged(); + setupFrameInterval(); + }); } else { mVsyncSource = new DummyVsyncSource(this); } } void RenderThread::initThreadLocals() { - mDisplayInfo = DeviceInfo::get()->displayInfo(); - nsecs_t frameIntervalNanos = static_cast<nsecs_t>(1000000000 / mDisplayInfo.fps); - mTimeLord.setFrameInterval(frameIntervalNanos); - mDispatchFrameDelay = static_cast<nsecs_t>(frameIntervalNanos * .25f); + setupFrameInterval(); initializeDisplayEventReceiver(); mEglManager = new EglManager(); mRenderState = new RenderState(*this); mVkManager = new VulkanManager(); - mCacheManager = new CacheManager(mDisplayInfo); + mCacheManager = new CacheManager(DeviceInfo::get()->displayInfo()); +} + +void RenderThread::setupFrameInterval() { + auto& displayInfo = DeviceInfo::get()->displayInfo(); + nsecs_t frameIntervalNanos = static_cast<nsecs_t>(1000000000 / displayInfo.fps); + mTimeLord.setFrameInterval(frameIntervalNanos); + mDispatchFrameDelay = static_cast<nsecs_t>(frameIntervalNanos * .25f); } void RenderThread::requireGlContext() { |