diff --git a/aosp/frameworks/native/libs/gui/Android.bp b/aosp/frameworks/native/libs/gui/Android.bp index 73f2147deb05352aa6b2e0ea5bf52117edb42711..bc62279f487fe976cb811128f000a297a7bc4ee8 100644 --- a/aosp/frameworks/native/libs/gui/Android.bp +++ b/aosp/frameworks/native/libs/gui/Android.bp @@ -142,6 +142,10 @@ cc_library_shared { "android.hardware.configstore-utils", ], + static_libs: [ + "libgui_vendor", + ], + // bufferhub is not used when building libgui for vendors target: { vendor: { diff --git a/aosp/frameworks/native/libs/gui/BufferHubConsumer.cpp b/aosp/frameworks/native/libs/gui/BufferHubConsumer.cpp index b5cdeb280a40f9150b2e7f1632ffc2e9ac7d2f0f..e6d55bb147bb73b3772d1139cd343152b3ef0ae1 100644 --- a/aosp/frameworks/native/libs/gui/BufferHubConsumer.cpp +++ b/aosp/frameworks/native/libs/gui/BufferHubConsumer.cpp @@ -38,6 +38,11 @@ sp BufferHubConsumer::Create(const std::shared_ptr +#include namespace android { @@ -50,10 +51,16 @@ BufferQueueConsumer::BufferQueueConsumer(const sp& core) : BufferQueueConsumer::~BufferQueueConsumer() {} +status_t BufferQueueConsumer::setBufferSyncPeriod(nsecs_t bufferSyncPeriod) { + Mutex::Autolock lock(mCore->mMutex); + mCore->mBufferSyncPeriod = hwUpdateBufferSyncPeriod(bufferSyncPeriod); + return NO_ERROR; +} + status_t BufferQueueConsumer::acquireBuffer(BufferItem* outBuffer, nsecs_t expectedPresent, uint64_t maxFrameNumber) { ATRACE_CALL(); - + mCore->mEnableBufferSync = hwUpdateBufferSyncState(outBuffer->mEnableBufferSync); int numDroppedBuffers = 0; sp listener; { diff --git a/aosp/frameworks/native/libs/gui/BufferQueueCore.cpp b/aosp/frameworks/native/libs/gui/BufferQueueCore.cpp index bb703da3dd83bb429d6f6cfec609bce3eea400dd..06ba10cc315c6ee682906bb6297910c4a016b251 100644 --- a/aosp/frameworks/native/libs/gui/BufferQueueCore.cpp +++ b/aosp/frameworks/native/libs/gui/BufferQueueCore.cpp @@ -95,7 +95,9 @@ BufferQueueCore::BufferQueueCore() : mSharedBufferCache(Rect::INVALID_RECT, 0, NATIVE_WINDOW_SCALING_MODE_FREEZE, HAL_DATASPACE_UNKNOWN), mLastQueuedSlot(INVALID_BUFFER_SLOT), - mUniqueId(getUniqueId()) + mUniqueId(getUniqueId()), + mEnableBufferSync(false), + mBufferSyncPeriod(0) { int numStartingBuffers = getMaxBufferCountLocked(); for (int s = 0; s < numStartingBuffers; s++) { diff --git a/aosp/frameworks/native/libs/gui/BufferQueueProducer.cpp b/aosp/frameworks/native/libs/gui/BufferQueueProducer.cpp index c8021e4d54d778aad2ba674d0fe97a81fa24b94e..c8981a03bb94041eaf0f7877eb7de5844e6d8cd6 100644 --- a/aosp/frameworks/native/libs/gui/BufferQueueProducer.cpp +++ b/aosp/frameworks/native/libs/gui/BufferQueueProducer.cpp @@ -40,6 +40,7 @@ #include #include +#include namespace android { @@ -58,7 +59,8 @@ BufferQueueProducer::BufferQueueProducer(const sp& core, mNextCallbackTicket(0), mCurrentCallbackTicket(0), mCallbackCondition(), - mDequeueTimeout(-1) {} + mDequeueTimeout(-1), + mDequeueTime(0) {} BufferQueueProducer::~BufferQueueProducer() {} @@ -352,6 +354,7 @@ status_t BufferQueueProducer::dequeueBuffer(int* outSlot, sp* ou uint64_t usage, uint64_t* outBufferAge, FrameEventHistoryDelta* outTimestamps) { ATRACE_CALL(); + mDequeueTime = hwUpdateDequeueTime(mCore->mEnableBufferSync, mDequeueTime, static_cast(mCore->mBufferSyncPeriod)); { // Autolock scope Mutex::Autolock lock(mCore->mMutex); mConsumerName = mCore->mConsumerName; diff --git a/aosp/frameworks/native/libs/gui/ConsumerBase.cpp b/aosp/frameworks/native/libs/gui/ConsumerBase.cpp index f9e292e19920705df9186bfdd9f97272f68b70d2..628bcaad8ef9043aa2a819c4e8252bd35546f4a6 100644 --- a/aosp/frameworks/native/libs/gui/ConsumerBase.cpp +++ b/aosp/frameworks/native/libs/gui/ConsumerBase.cpp @@ -368,6 +368,10 @@ status_t ConsumerBase::acquireBufferLocked(BufferItem *item, return OK; } +status_t ConsumerBase::setBufferSyncPeriod(nsecs_t bufferSyncPeriod) { + return mConsumer->setBufferSyncPeriod(bufferSyncPeriod); +} + status_t ConsumerBase::addReleaseFence(int slot, const sp graphicBuffer, const sp& fence) { Mutex::Autolock lock(mMutex); diff --git a/aosp/frameworks/native/libs/gui/IGraphicBufferConsumer.cpp b/aosp/frameworks/native/libs/gui/IGraphicBufferConsumer.cpp index c705d3926d77d9c32cc8ca38ac3dbbaa33208cb4..9c46e394f06afbbbc5380444bf89023078567557 100644 --- a/aosp/frameworks/native/libs/gui/IGraphicBufferConsumer.cpp +++ b/aosp/frameworks/native/libs/gui/IGraphicBufferConsumer.cpp @@ -51,6 +51,7 @@ enum class Tag : uint32_t { GET_SIDEBAND_STREAM, GET_OCCUPANCY_HISTORY, DISCARD_FREE_BUFFERS, + SET_BUFFER_SYNC_PERIOD, DUMP_STATE, LAST = DUMP_STATE, }; @@ -163,6 +164,11 @@ public: Tag::DISCARD_FREE_BUFFERS); } + status_t setBufferSyncPeriod(nsecs_t bufferSyncPeriod) { + using Signature = decltype(&IGraphicBufferConsumer::setBufferSyncPeriod); + return callRemote(Tag::SET_BUFFER_SYNC_PERIOD, bufferSyncPeriod); + } + status_t dumpState(const String8& prefix, String8* outResult) const override { using Signature = status_t (IGraphicBufferConsumer::*)(const String8&, String8*) const; return callRemote(Tag::DUMP_STATE, prefix, outResult); @@ -220,6 +226,8 @@ status_t BnGraphicBufferConsumer::onTransact(uint32_t code, const Parcel& data, return callLocal(data, reply, &IGraphicBufferConsumer::getOccupancyHistory); case Tag::DISCARD_FREE_BUFFERS: return callLocal(data, reply, &IGraphicBufferConsumer::discardFreeBuffers); + case Tag::SET_BUFFER_SYNC_PERIOD: + return callLocal(data, reply, &IGraphicBufferConsumer::setBufferSyncPeriod); case Tag::DUMP_STATE: { using Signature = status_t (IGraphicBufferConsumer::*)(const String8&, String8*) const; return callLocal(data, reply, &IGraphicBufferConsumer::dumpState); diff --git a/aosp/frameworks/native/libs/gui/include/gui/BufferHubConsumer.h b/aosp/frameworks/native/libs/gui/include/gui/BufferHubConsumer.h index d38077014b45a6e4be7eea8dc92df71e14f0af37..e804da62d26ecdc874c1bf4d04a9066b88373a29 100644 --- a/aosp/frameworks/native/libs/gui/include/gui/BufferHubConsumer.h +++ b/aosp/frameworks/native/libs/gui/include/gui/BufferHubConsumer.h @@ -33,6 +33,8 @@ public: // object and is guaranteed to succeed if parcelable object is valid. static sp Create(dvr::ConsumerQueueParcelable parcelable); + status_t setBufferSyncPeriod(nsecs_t bufferSyncPeriod); + // See |IGraphicBufferConsumer::acquireBuffer| status_t acquireBuffer(BufferItem* buffer, nsecs_t presentWhen, uint64_t maxFrameNumber = 0) override; diff --git a/aosp/frameworks/native/libs/gui/include/gui/BufferItem.h b/aosp/frameworks/native/libs/gui/include/gui/BufferItem.h index 218bb424fbe94a3a7f2df65bdc9e2724bf086d90..1c78bbb9992b65ad740a69a39291297a3ae10f6d 100644 --- a/aosp/frameworks/native/libs/gui/include/gui/BufferItem.h +++ b/aosp/frameworks/native/libs/gui/include/gui/BufferItem.h @@ -130,6 +130,8 @@ class BufferItem : public Flattenable { // Indicates the API (NATIVE_WINDOW_API_xxx) that queues the buffer. int mApi; + + bool mEnableBufferSync; }; } // namespace android diff --git a/aosp/frameworks/native/libs/gui/include/gui/BufferQueueConsumer.h b/aosp/frameworks/native/libs/gui/include/gui/BufferQueueConsumer.h index d1081207777ee0371a74274bbd5f930ba0bea5c7..ba33586b7df74e109273423f131546662f61d2ee 100644 --- a/aosp/frameworks/native/libs/gui/include/gui/BufferQueueConsumer.h +++ b/aosp/frameworks/native/libs/gui/include/gui/BufferQueueConsumer.h @@ -34,6 +34,7 @@ public: BufferQueueConsumer(const sp& core); ~BufferQueueConsumer() override; + virtual status_t setBufferSyncPeriod(nsecs_t bufferSyncPeriod); // acquireBuffer attempts to acquire ownership of the next pending buffer in // the BufferQueue. If no buffer is pending then it returns // NO_BUFFER_AVAILABLE. If a buffer is successfully acquired, the diff --git a/aosp/frameworks/native/libs/gui/include/gui/BufferQueueCore.h b/aosp/frameworks/native/libs/gui/include/gui/BufferQueueCore.h index 537c9577469d14ece7c8bbd2c9c96b8da0e55864..6a71e2fff51df18e31091593df8b7845fcba1272 100644 --- a/aosp/frameworks/native/libs/gui/include/gui/BufferQueueCore.h +++ b/aosp/frameworks/native/libs/gui/include/gui/BufferQueueCore.h @@ -336,6 +336,8 @@ private: const uint64_t mUniqueId; + bool mEnableBufferSync; + nsecs_t mBufferSyncPeriod; }; // class BufferQueueCore } // namespace android diff --git a/aosp/frameworks/native/libs/gui/include/gui/BufferQueueProducer.h b/aosp/frameworks/native/libs/gui/include/gui/BufferQueueProducer.h index 5c7ffb416daf992a6939395166137dd76b9cccca..e0114d859a446a55b2ab6f91478d40eec9b65b4d 100644 --- a/aosp/frameworks/native/libs/gui/include/gui/BufferQueueProducer.h +++ b/aosp/frameworks/native/libs/gui/include/gui/BufferQueueProducer.h @@ -251,6 +251,8 @@ private: // slot is not yet available. nsecs_t mDequeueTimeout; + uint64_t mDequeueTime; + }; // class BufferQueueProducer } // namespace android diff --git a/aosp/frameworks/native/libs/gui/include/gui/ConsumerBase.h b/aosp/frameworks/native/libs/gui/include/gui/ConsumerBase.h index 366ced380b7ca63a14cf8d9771d84cb14010bdf8..36709d059a205e53a070b646d228617d6faf82f5 100644 --- a/aosp/frameworks/native/libs/gui/include/gui/ConsumerBase.h +++ b/aosp/frameworks/native/libs/gui/include/gui/ConsumerBase.h @@ -190,6 +190,7 @@ protected: virtual status_t acquireBufferLocked(BufferItem *item, nsecs_t presentWhen, uint64_t maxFrameNumber = 0); + virtual status_t setBufferSyncPeriod(nsecs_t bufferSyncPeriod); // releaseBufferLocked relinquishes control over a buffer, returning that // control to the BufferQueue. // diff --git a/aosp/frameworks/native/libs/gui/include/gui/IGraphicBufferConsumer.h b/aosp/frameworks/native/libs/gui/include/gui/IGraphicBufferConsumer.h index 9fb75809121b98c5b3d20ff89952a807a2332726..cabac38900b8b8ea33f84569ec9caeb59cff7a88 100644 --- a/aosp/frameworks/native/libs/gui/include/gui/IGraphicBufferConsumer.h +++ b/aosp/frameworks/native/libs/gui/include/gui/IGraphicBufferConsumer.h @@ -271,6 +271,7 @@ public: // call to free up any of its locally cached buffers. virtual status_t discardFreeBuffers() = 0; + virtual status_t setBufferSyncPeriod(nsecs_t bufferSyncPeriod) = 0; // dump state into a string virtual status_t dumpState(const String8& prefix, String8* outResult) const = 0; diff --git a/aosp/frameworks/native/services/surfaceflinger/BufferLayer.cpp b/aosp/frameworks/native/services/surfaceflinger/BufferLayer.cpp index fda79067449301495d74f44e1bc4e4bf9eb74031..d1354b912c33f814265f751f2abc716e61fb1c2d 100644 --- a/aosp/frameworks/native/services/surfaceflinger/BufferLayer.cpp +++ b/aosp/frameworks/native/services/surfaceflinger/BufferLayer.cpp @@ -48,6 +48,8 @@ #include #include +#include + namespace android { BufferLayer::BufferLayer(SurfaceFlinger* flinger, const sp& client, const String8& name, @@ -376,6 +378,10 @@ void BufferLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { } } +void BufferLayer::setBufferSyncPeriod(nsecs_t bufferSyncPeriod) { + mConsumer->setBufferSyncPeriod(hwGetBufferSyncPeriod(bufferSyncPeriod)); +} + Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime) { ATRACE_CALL(); @@ -394,6 +400,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime return getTransform().transform(Region(Rect(s.active.w, s.active.h))); } + mConsumer->setBufferSyncEnabled(hwUpdateBufferSyncState(SurfaceFlinger::layerNumber)); Region outDirtyRegion; if (mQueuedFrames <= 0 && !mAutoRefresh) { return outDirtyRegion; diff --git a/aosp/frameworks/native/services/surfaceflinger/BufferLayer.h b/aosp/frameworks/native/services/surfaceflinger/BufferLayer.h index bf0ca69253f32de56cb57b1b7d379339ae1e89f3..570a17ca44f7fdf03db37010b63db3670e68a026 100644 --- a/aosp/frameworks/native/services/surfaceflinger/BufferLayer.h +++ b/aosp/frameworks/native/services/surfaceflinger/BufferLayer.h @@ -119,6 +119,7 @@ public: // If a buffer was replaced this frame, release the former buffer void releasePendingBuffer(nsecs_t dequeueReadyTime); + void setBufferSyncPeriod(nsecs_t bufferSyncPeriod); /* * latchBuffer - called each time the screen is redrawn and returns whether * the visible regions need to be recomputed (this is a fairly heavy diff --git a/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.cpp b/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.cpp index 87333d0ffd19fd3e5d42e328779ed2cf23423f80..981cda857c2b3b66577cc31f9aa9abee5f0b4978 100644 --- a/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.cpp +++ b/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.cpp @@ -46,6 +46,8 @@ #include #include +#include + namespace android { // Macros for including the BufferLayerConsumer name in log messages @@ -76,7 +78,8 @@ BufferLayerConsumer::BufferLayerConsumer(const sp& bq, mRE(engine), mTexName(tex), mLayer(layer), - mCurrentTexture(BufferQueue::INVALID_BUFFER_SLOT) { + mCurrentTexture(BufferQueue::INVALID_BUFFER_SLOT), + mEnableBufferSync(false) { BLC_LOGV("BufferLayerConsumer"); memcpy(mCurrentTransformMatrix, mtxIdentity.asArray(), sizeof(mCurrentTransformMatrix)); @@ -168,6 +171,8 @@ status_t BufferLayerConsumer::updateTexImage(BufferRejecter* rejecter, const Dis BufferItem item; + item.mEnableBufferSync = hwGetEnableBufferSyncState(mEnableBufferSync); + // Acquire the next buffer. // In asynchronous mode the list is guaranteed to be one buffer // deep, while in synchronous mode we use the oldest buffer. @@ -280,6 +285,10 @@ status_t BufferLayerConsumer::acquireBufferLocked(BufferItem* item, nsecs_t pres return NO_ERROR; } +status_t BufferLayerConsumer::setBufferSyncPeriod(nsecs_t bufferSyncPeriod) { + return ConsumerBase::setBufferSyncPeriod(bufferSyncPeriod); +} + bool BufferLayerConsumer::canUseImageCrop(const Rect& crop) const { // If the crop rect is not at the origin, we can't set the crop on the // EGLImage because that's not allowed by the EGL_ANDROID_image_crop @@ -427,6 +436,10 @@ void BufferLayerConsumer::setFilteringEnabled(bool enabled) { } } +void BufferLayerConsumer::setBufferSyncEnabled(bool enabled) { + mEnableBufferSync = hwGetEnableBufferSyncState(enabled); +} + void BufferLayerConsumer::computeCurrentTransformMatrixLocked() { BLC_LOGV("computeCurrentTransformMatrixLocked"); sp buf = diff --git a/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.h b/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.h index f81cdb1d9120006e39729b3c719ff209a2d5e264..91bcbb5b350c295a814643434293c73e87df5423 100644 --- a/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.h +++ b/aosp/frameworks/native/services/surfaceflinger/BufferLayerConsumer.h @@ -177,6 +177,10 @@ public: // DEFAULT_USAGE_FLAGS to usage. status_t setConsumerUsageBits(uint64_t usage); + void setBufferSyncEnabled(bool enabled); + + status_t setBufferSyncPeriod(nsecs_t bufferSyncPeriod); + protected: // abandonLocked overrides the ConsumerBase method to clear // mCurrentTextureImage in addition to the ConsumerBase behavior. @@ -384,6 +388,8 @@ private: // A release that is pending on the receipt of a new release fence from // presentDisplay PendingRelease mPendingRelease; + + bool mEnableBufferSync; }; // ---------------------------------------------------------------------------- diff --git a/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.cpp b/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.cpp index edd2f8df1305f674850c001e8fcca6a090a48f07..5fe674a6aea71dcc264d333b3f914773384bf9e0 100644 --- a/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.cpp +++ b/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.cpp @@ -796,6 +796,10 @@ void DisplayDevice::getBestColorMode(Dataspace dataspace, RenderIntent intent, } } +void DisplayDevice::updateBufferSyncFlag(uint64_t &layerNum) { + layerNum = hwUpdateBufferSyncFlag(mType, DisplayType::DISPLAY_PRIMARY, layerNum, mVisibleLayersSortedByZ.size()); +} + std::atomic DisplayDeviceState::nextDisplayId(1); DisplayDeviceState::DisplayDeviceState(DisplayDevice::DisplayType type, bool isSecure) diff --git a/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.h b/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.h index 1262209773694e12e44c70879c8f1c2bb40bd6ae..d888f46ea96cda5aac4165d46dd968ece4557891 100644 --- a/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.h +++ b/aosp/frameworks/native/services/surfaceflinger/DisplayDevice.h @@ -187,6 +187,8 @@ public: const sp& getClientTargetAcquireFence() const; + void updateBufferSyncFlag(uint64_t &layerNum); + /* ------------------------------------------------------------------------ * Display power mode management. */ diff --git a/aosp/frameworks/native/services/surfaceflinger/MessageQueue.cpp b/aosp/frameworks/native/services/surfaceflinger/MessageQueue.cpp index 056d381eb9e5150f84eb38e0605dd7ffba5953ef..679d0b175977d7e0539b5eab3765c9ba2e451792 100644 --- a/aosp/frameworks/native/services/surfaceflinger/MessageQueue.cpp +++ b/aosp/frameworks/native/services/surfaceflinger/MessageQueue.cpp @@ -31,6 +31,8 @@ #include "MessageQueue.h" #include "SurfaceFlinger.h" +#include + namespace android { // --------------------------------------------------------------------------- @@ -134,7 +136,11 @@ status_t MessageQueue::postMessage(const sp& messageHandler, nsecs_ } void MessageQueue::invalidate() { - mEvents->requestNextVsync(); + if (hwGetEnableBufferSyncState(SurfaceFlinger::layerNumber)) { + mHandler->dispatchInvalidate(); + } else { + mEvents->requestNextVsync(); + } } void MessageQueue::refresh() { diff --git a/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp b/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp index 4834e6446b9c0c6d090fac536ba1de07e7c47b85..51cfaf18d6d5729f27532ca43a57e2798cd14548 100644 --- a/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp +++ b/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp @@ -147,7 +147,8 @@ bool SurfaceFlinger::useVrFlinger; int64_t SurfaceFlinger::maxFrameBufferAcquiredBuffers; // TODO(courtneygo): Rename hasWideColorDisplay to clarify its actual meaning. bool SurfaceFlinger::hasWideColorDisplay; - +uint64_t SurfaceFlinger::layerNumber = 0; +nsecs_t SurfaceFlinger::bufferSyncPeriodTime = 0; std::string getHwcServiceName() { char value[PROPERTY_VALUE_MAX] = {}; @@ -1290,6 +1291,7 @@ void SurfaceFlinger::resyncToHardwareVsync(bool makeAvailable) { const auto& activeConfig = getBE().mHwc->getActiveConfig(HWC_DISPLAY_PRIMARY); const nsecs_t period = activeConfig->getVsyncPeriod(); + SurfaceFlinger::bufferSyncPeriodTime = hwGetSyncPeriod(period); mPrimaryDispSync.reset(); mPrimaryDispSync.setPeriod(period); @@ -1878,6 +1880,8 @@ void SurfaceFlinger::rebuildLayerStacks() { }); } displayDevice->setVisibleLayersSortedByZ(layersSortedByZ); + displayDevice->updateBufferSyncFlag(SurfaceFlinger::layerNumber); + displayDevice->setLayersNeedingFences(layersNeedingFences); displayDevice->undefinedRegion.set(bounds); displayDevice->undefinedRegion.subtractSelf( @@ -3647,6 +3651,7 @@ status_t SurfaceFlinger::createBufferLayer(const sp& client, } sp layer = new BufferLayer(this, client, name, w, h, flags); + layer->setBufferSyncPeriod(hwGetSyncPeriod(SurfaceFlinger::bufferSyncPeriodTime)); status_t err = layer->setBuffers(w, h, format, flags); if (err == NO_ERROR) { *handle = layer->getHandle(); diff --git a/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.h b/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.h index 3fbc1e7da870713c6526fbcb19447cb239e6cc22..1c32734b2724e88b1deb7fb6846767c94e5d4e7b 100644 --- a/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.h +++ b/aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.h @@ -235,6 +235,10 @@ public: SurfaceFlingerBE& getBE() { return mBE; } const SurfaceFlingerBE& getBE() const { return mBE; } + static uint64_t layerNumber; + + static nsecs_t bufferSyncPeriodTime; + // This is the phase offset in nanoseconds of the software vsync event // relative to the vsync event reported by HWComposer. The software vsync // event is when SurfaceFlinger and Choreographer-based applications run each diff --git a/aosp/vendor/common/android/cph/frameworks/native/libs/Android.bp b/aosp/vendor/common/android/cph/frameworks/native/libs/Android.bp index ab8aa31817cb47333a910ae879a592c1d5a4881c..6c30fb7ff012c3f84147f24e294483b20f772706 100644 --- a/aosp/vendor/common/android/cph/frameworks/native/libs/Android.bp +++ b/aosp/vendor/common/android/cph/frameworks/native/libs/Android.bp @@ -15,3 +15,20 @@ cc_prebuilt_library_static { none: true, }, } + +cc_prebuilt_library_static { + name: "libgui_vendor", + compile_multilib: "both", + export_include_dirs: ["./include"], + multilib: { + lib64: { + srcs: ["lib64/libgui_vendor_impl.a"], + }, + lib32: { + srcs: ["lib/libgui_vendor_impl.a"], + }, + }, + strip : { + none: true, + }, +} \ No newline at end of file diff --git a/aosp/vendor/common/android/cph/frameworks/native/libs/include/HwBufferQueueConsumer.h b/aosp/vendor/common/android/cph/frameworks/native/libs/include/HwBufferQueueConsumer.h new file mode 100644 index 0000000000000000000000000000000000000000..ff334c931d85b0a56261c407a9b03678bdaf9302 --- /dev/null +++ b/aosp/vendor/common/android/cph/frameworks/native/libs/include/HwBufferQueueConsumer.h @@ -0,0 +1,8 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. + * Description: binder helper function +*/ + +nsecs_t hwUpdateBufferSyncPeriod(nsecs_t); + +bool hwUpdateBufferSyncState(bool); diff --git a/aosp/vendor/common/android/cph/frameworks/native/libs/include/HwBufferQueueProducer.h b/aosp/vendor/common/android/cph/frameworks/native/libs/include/HwBufferQueueProducer.h new file mode 100644 index 0000000000000000000000000000000000000000..31c724f21049b8f8529c7224d5434d78b35348b6 --- /dev/null +++ b/aosp/vendor/common/android/cph/frameworks/native/libs/include/HwBufferQueueProducer.h @@ -0,0 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. + * Description: binder helper function + */ + +uint64_t hwUpdateDequeueTime(bool, uint64_t, uint64_t); diff --git a/aosp/vendor/common/android/cph/frameworks/native/libs/lib/libgui_vendor_impl.a b/aosp/vendor/common/android/cph/frameworks/native/libs/lib/libgui_vendor_impl.a new file mode 100644 index 0000000000000000000000000000000000000000..72635673c042c55b39dd076bffe30d526be45758 Binary files /dev/null and b/aosp/vendor/common/android/cph/frameworks/native/libs/lib/libgui_vendor_impl.a differ diff --git a/aosp/vendor/common/android/cph/frameworks/native/libs/lib64/libgui_vendor_impl.a b/aosp/vendor/common/android/cph/frameworks/native/libs/lib64/libgui_vendor_impl.a new file mode 100644 index 0000000000000000000000000000000000000000..f4b7151dd487a5377972318c32eef206730001e7 Binary files /dev/null and b/aosp/vendor/common/android/cph/frameworks/native/libs/lib64/libgui_vendor_impl.a differ diff --git a/aosp/vendor/common/android/cph/frameworks/native/services/include/HwBufferLayer.h b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwBufferLayer.h new file mode 100644 index 0000000000000000000000000000000000000000..d406e710c4ce5899690e735bf2157c023dcdd924 --- /dev/null +++ b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwBufferLayer.h @@ -0,0 +1,8 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. + * Description: binder helper function + */ + +bool hwUpdateBufferSyncState(uint64_t); + +nsecs_t hwGetBufferSyncPeriod(nsecs_t); \ No newline at end of file diff --git a/aosp/vendor/common/android/cph/frameworks/native/services/include/HwBufferLayerConsumer.h b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwBufferLayerConsumer.h new file mode 100644 index 0000000000000000000000000000000000000000..f06b714980749e92e76e0916574a39746ff8d6e3 --- /dev/null +++ b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwBufferLayerConsumer.h @@ -0,0 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. + * Description: binder helper function + */ + +bool hwGetEnableBufferSyncState(bool); \ No newline at end of file diff --git a/aosp/vendor/common/android/cph/frameworks/native/services/include/HwDisplayDevice.h b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwDisplayDevice.h index 9990e96265ce8076d5248bd3d3abbf847fead86e..f7237a8ad8b8f163def1399e93a4974c4e604bbd 100644 --- a/aosp/vendor/common/android/cph/frameworks/native/services/include/HwDisplayDevice.h +++ b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwDisplayDevice.h @@ -3,4 +3,8 @@ * Description: surfaceflinger helper function */ +#include + void hwSetProjection(int, int); + +uint64_t hwUpdateBufferSyncFlag(int, int, uint64_t, int); \ No newline at end of file diff --git a/aosp/vendor/common/android/cph/frameworks/native/services/include/HwMessageQueue.h b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwMessageQueue.h new file mode 100644 index 0000000000000000000000000000000000000000..df753640fcf227baefae94760701c20ba838a61f --- /dev/null +++ b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwMessageQueue.h @@ -0,0 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. + * Description: binder helper function + */ + +bool hwGetEnableBufferSyncState(uint64_t); \ No newline at end of file diff --git a/aosp/vendor/common/android/cph/frameworks/native/services/include/HwSurfaceFlinger.h b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwSurfaceFlinger.h index b79ea34e7a4d0d76597b23dd028e45aefc5c4d95..b9f2705a3783ca58bb5c4abfe9269b335000ad3b 100644 --- a/aosp/vendor/common/android/cph/frameworks/native/services/include/HwSurfaceFlinger.h +++ b/aosp/vendor/common/android/cph/frameworks/native/services/include/HwSurfaceFlinger.h @@ -7,4 +7,5 @@ bool hwCheckFps(); int64_t hwGetAppVsync(int64_t); int64_t hwGetSfVsync(int64_t); int hwGetTransactionTimeout(int); - +nsecs_t hwGetSyncPeriod(nsecs_t); +uint64_t hwGetBufferSyncFlag(uint64_t); \ No newline at end of file diff --git a/aosp/vendor/common/android/cph/frameworks/native/services/lib/libsurfaceflinger_vendor_impl.a b/aosp/vendor/common/android/cph/frameworks/native/services/lib/libsurfaceflinger_vendor_impl.a index 371ca031e6de649ff8f6fbdbbf8003d842c5ce76..135812852882df2f00c816d31d9a67c55f8c70f1 100644 Binary files a/aosp/vendor/common/android/cph/frameworks/native/services/lib/libsurfaceflinger_vendor_impl.a and b/aosp/vendor/common/android/cph/frameworks/native/services/lib/libsurfaceflinger_vendor_impl.a differ diff --git a/aosp/vendor/common/android/cph/frameworks/native/services/lib64/libsurfaceflinger_vendor_impl.a b/aosp/vendor/common/android/cph/frameworks/native/services/lib64/libsurfaceflinger_vendor_impl.a index 8e87a858c71b631dc8ec417f9cb8639cdbe5315a..3601fbe34859e4f8452d2bb49b3e0b771558a52e 100644 Binary files a/aosp/vendor/common/android/cph/frameworks/native/services/lib64/libsurfaceflinger_vendor_impl.a and b/aosp/vendor/common/android/cph/frameworks/native/services/lib64/libsurfaceflinger_vendor_impl.a differ diff --git a/aosp/vendor/common/products/product_prebuilts.mk b/aosp/vendor/common/products/product_prebuilts.mk index 6fde788cc4cee528678d7f16653a9f3bb80b2c65..652d5fc8063811659f288cb6730e02b44eb9fc35 100644 --- a/aosp/vendor/common/products/product_prebuilts.mk +++ b/aosp/vendor/common/products/product_prebuilts.mk @@ -44,7 +44,10 @@ PRODUCT_PACKAGES += \ libxcoder \ wget \ cell.db \ - sensor.db + sensor.db \ + libmCODEC \ + libmCODECNetINT \ + android.hardware.nidec@1.0-impl PRODUCT_COPY_FILES += \ vendor/common/android/prebuilts/system/etc/mediaEngine/config.json:system/etc/mediaEngine/config.json \