diff options
| -rw-r--r-- | libs/gui/Android.bp | 4 | ||||
| -rw-r--r-- | libs/gui/FrameTimestamps.cpp | 14 | ||||
| -rw-r--r-- | libs/gui/include/gui/FrameTimestamps.h | 10 | ||||
| -rw-r--r-- | libs/gui/sysprop/Android.bp | 7 | ||||
| -rw-r--r-- | libs/gui/sysprop/LibGuiProperties.sysprop | 25 | ||||
| -rw-r--r-- | libs/gui/sysprop/api/LibGuiProperties-current.txt | 8 | ||||
| -rw-r--r-- | libs/gui/sysprop/api/LibGuiProperties-latest.txt | 8 |
7 files changed, 69 insertions, 7 deletions
diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp index ba3195a38e..f3d5aab089 100644 --- a/libs/gui/Android.bp +++ b/libs/gui/Android.bp @@ -166,6 +166,10 @@ cc_defaults { "bufferqueue/2.0/types.cpp", ], + whole_static_libs: [ + "LibGuiProperties", + ], + shared_libs: [ "android.hardware.graphics.bufferqueue@1.0", "android.hardware.graphics.bufferqueue@2.0", diff --git a/libs/gui/FrameTimestamps.cpp b/libs/gui/FrameTimestamps.cpp index c04d9072bb..3215eca50f 100644 --- a/libs/gui/FrameTimestamps.cpp +++ b/libs/gui/FrameTimestamps.cpp @@ -18,6 +18,7 @@ #define LOG_TAG "FrameEvents" +#include <LibGuiProperties.sysprop.h> #include <android-base/stringprintf.h> #include <cutils/compiler.h> // For CC_[UN]LIKELY #include <inttypes.h> @@ -167,6 +168,11 @@ struct FrameNumberEqual { } // namespace +const size_t FrameEventHistory::MAX_FRAME_HISTORY = + sysprop::LibGuiProperties::frame_event_history_size().value_or(8); + +FrameEventHistory::FrameEventHistory() : mFrames(std::vector<FrameEvents>(MAX_FRAME_HISTORY)) {} + FrameEventHistory::~FrameEventHistory() = default; FrameEvents* FrameEventHistory::getFrame(uint64_t frameNumber) { @@ -348,6 +354,9 @@ std::shared_ptr<FenceTime> ProducerFrameEventHistory::createFenceTime( // ConsumerFrameEventHistory // ============================================================================ +ConsumerFrameEventHistory::ConsumerFrameEventHistory() + : mFramesDirty(std::vector<FrameEventDirtyFields>(MAX_FRAME_HISTORY)) {} + ConsumerFrameEventHistory::~ConsumerFrameEventHistory() = default; void ConsumerFrameEventHistory::onDisconnect() { @@ -443,9 +452,8 @@ void ConsumerFrameEventHistory::addRelease(uint64_t frameNumber, mFramesDirty[mReleaseOffset].setDirty<FrameEvent::RELEASE>(); } -void ConsumerFrameEventHistory::getFrameDelta( - FrameEventHistoryDelta* delta, - const std::array<FrameEvents, MAX_FRAME_HISTORY>::iterator& frame) { +void ConsumerFrameEventHistory::getFrameDelta(FrameEventHistoryDelta* delta, + const std::vector<FrameEvents>::iterator& frame) { mProducerWantsEvents = true; size_t i = static_cast<size_t>(std::distance(mFrames.begin(), frame)); if (mFramesDirty[i].anyDirty()) { diff --git a/libs/gui/include/gui/FrameTimestamps.h b/libs/gui/include/gui/FrameTimestamps.h index df02494bf4..4670edda99 100644 --- a/libs/gui/include/gui/FrameTimestamps.h +++ b/libs/gui/include/gui/FrameTimestamps.h @@ -106,6 +106,7 @@ struct CompositorTiming { // producer via deltas. class FrameEventHistory { public: + FrameEventHistory(); virtual ~FrameEventHistory(); FrameEvents* getFrame(uint64_t frameNumber); @@ -113,10 +114,10 @@ public: void checkFencesForCompletion(); void dump(std::string& outString) const; - static constexpr size_t MAX_FRAME_HISTORY = 8; + static const size_t MAX_FRAME_HISTORY; protected: - std::array<FrameEvents, MAX_FRAME_HISTORY> mFrames; + std::vector<FrameEvents> mFrames; CompositorTiming mCompositorTiming; }; @@ -204,6 +205,7 @@ private: // The consumer's interface to FrameEventHistory class ConsumerFrameEventHistory : public FrameEventHistory { public: + ConsumerFrameEventHistory(); ~ConsumerFrameEventHistory() override; void onDisconnect(); @@ -224,9 +226,9 @@ public: private: void getFrameDelta(FrameEventHistoryDelta* delta, - const std::array<FrameEvents, MAX_FRAME_HISTORY>::iterator& frame); + const std::vector<FrameEvents>::iterator& frame); - std::array<FrameEventDirtyFields, MAX_FRAME_HISTORY> mFramesDirty; + std::vector<FrameEventDirtyFields> mFramesDirty; size_t mQueueOffset{0}; size_t mCompositionOffset{0}; diff --git a/libs/gui/sysprop/Android.bp b/libs/gui/sysprop/Android.bp new file mode 100644 index 0000000000..e7f7c1fc86 --- /dev/null +++ b/libs/gui/sysprop/Android.bp @@ -0,0 +1,7 @@ +sysprop_library { + name: "LibGuiProperties", + srcs: ["*.sysprop"], + api_packages: ["android.sysprop"], + property_owner: "Platform", + vendor_available: true, +} diff --git a/libs/gui/sysprop/LibGuiProperties.sysprop b/libs/gui/sysprop/LibGuiProperties.sysprop new file mode 100644 index 0000000000..0d54711095 --- /dev/null +++ b/libs/gui/sysprop/LibGuiProperties.sysprop @@ -0,0 +1,25 @@ +# Copyright (C) 2020 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +module: "android.sysprop.LibGuiProperties" +owner: Platform + +# Indicates how many elements should be present in the frame event histories. +prop { + api_name: "frame_event_history_size" + type: Integer + scope: Public + access: Readonly + prop_name: "ro.lib_gui.frame_event_history_size" +} diff --git a/libs/gui/sysprop/api/LibGuiProperties-current.txt b/libs/gui/sysprop/api/LibGuiProperties-current.txt new file mode 100644 index 0000000000..5b7f74e03e --- /dev/null +++ b/libs/gui/sysprop/api/LibGuiProperties-current.txt @@ -0,0 +1,8 @@ +props { + module: "android.sysprop.LibGuiProperties" + prop { + api_name: "frame_event_history_size" + type: Integer + prop_name: "ro.lib_gui.frame_event_history_size" + } +} diff --git a/libs/gui/sysprop/api/LibGuiProperties-latest.txt b/libs/gui/sysprop/api/LibGuiProperties-latest.txt new file mode 100644 index 0000000000..5b7f74e03e --- /dev/null +++ b/libs/gui/sysprop/api/LibGuiProperties-latest.txt @@ -0,0 +1,8 @@ +props { + module: "android.sysprop.LibGuiProperties" + prop { + api_name: "frame_event_history_size" + type: Integer + prop_name: "ro.lib_gui.frame_event_history_size" + } +} |