Loading cmds/installd/InstalldNativeService.cpp +9 −10 Original line number Diff line number Diff line Loading @@ -1131,16 +1131,15 @@ binder::Status InstalldNativeService::fixupAppData(const std::optional<std::stri } static int32_t copy_directory_recursive(const char* from, const char* to) { char *argv[] = { (char*) kCpPath, char* argv[] = {(char*)kCpPath, (char*)"-F", /* delete any existing destination file first (--remove-destination) */ (char*) "-p", /* preserve timestamps, ownership, and permissions */ (char*)"--preserve=mode,ownership,timestamps,xattr", /* preserve properties */ (char*)"-R", /* recurse into subdirectories (DEST must be a directory) */ (char*)"-P", /* Do not follow symlinks [default] */ (char*)"-d", /* don't dereference symlinks */ (char*)from, (char*) to }; (char*)to}; LOG(DEBUG) << "Copying " << from << " to " << to; return logwrap_fork_execvp(ARRAY_SIZE(argv), argv, nullptr, false, LOG_ALOG, false, nullptr); Loading include/input/KeyCharacterMap.h +14 −4 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public: const std::string getLoadFileName() const; /* Combines this key character map with an overlay. */ /* Combines this key character map with the provided overlay. */ void combine(const KeyCharacterMap& overlay); /* Gets the keyboard type. */ Loading Loading @@ -144,6 +144,8 @@ public: bool operator==(const KeyCharacterMap& other) const; bool operator!=(const KeyCharacterMap& other) const; KeyCharacterMap(const KeyCharacterMap& other); virtual ~KeyCharacterMap(); Loading Loading @@ -230,11 +232,12 @@ private: KeyedVector<int32_t, Key*> mKeys; KeyboardType mType; std::string mLoadFileName; bool mLayoutOverlayApplied; KeyedVector<int32_t, int32_t> mKeysByScanCode; KeyedVector<int32_t, int32_t> mKeysByUsageCode; KeyCharacterMap(); KeyCharacterMap(const std::string& filename); bool getKey(int32_t keyCode, const Key** outKey) const; bool getKeyBehavior(int32_t keyCode, int32_t metaState, Loading @@ -243,8 +246,6 @@ private: bool findKey(char16_t ch, int32_t* outKeyCode, int32_t* outMetaState) const; static base::Result<std::shared_ptr<KeyCharacterMap>> load(Tokenizer* tokenizer, Format format); static void addKey(Vector<KeyEvent>& outEvents, int32_t deviceId, int32_t keyCode, int32_t metaState, bool down, nsecs_t time); static void addMetaKeys(Vector<KeyEvent>& outEvents, Loading @@ -264,6 +265,15 @@ private: int32_t deviceId, int32_t metaState, nsecs_t time, int32_t keyCode, int32_t keyMetaState, int32_t* currentMetaState); /* Clears all data stored in this key character map */ void clear(); /* Loads the KeyCharacterMap provided by the tokenizer into this instance. */ status_t load(Tokenizer* tokenizer, Format format); /* Reloads the data from mLoadFileName and unapplies any overlay. */ status_t reloadBaseFromFile(); }; } // namespace android Loading libs/gui/BLASTBufferQueue.cpp +6 −15 Original line number Diff line number Diff line Loading @@ -119,16 +119,11 @@ void BLASTBufferItemConsumer::getConnectionEvents(uint64_t frameNumber, bool* ne if (needsDisconnect != nullptr) *needsDisconnect = disconnect; } void BLASTBufferItemConsumer::setBlastBufferQueue(BLASTBufferQueue* blastbufferqueue) { std::scoped_lock lock(mBufferQueueMutex); mBLASTBufferQueue = blastbufferqueue; } void BLASTBufferItemConsumer::onSidebandStreamChanged() { std::scoped_lock lock(mBufferQueueMutex); if (mBLASTBufferQueue != nullptr) { sp<BLASTBufferQueue> bbq = mBLASTBufferQueue.promote(); if (bbq != nullptr) { sp<NativeHandle> stream = getSidebandStream(); mBLASTBufferQueue->setSidebandStream(stream); bbq->setSidebandStream(stream); } } Loading @@ -148,7 +143,7 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name) mBufferItemConsumer = new BLASTBufferItemConsumer(mConsumer, GraphicBuffer::USAGE_HW_COMPOSER | GraphicBuffer::USAGE_HW_TEXTURE, 1, false); 1, false, this); static int32_t id = 0; mName = name + "#" + std::to_string(id); auto consumerName = mName + "(BLAST Consumer)" + std::to_string(id); Loading @@ -157,7 +152,6 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name) mBufferItemConsumer->setName(String8(consumerName.c_str())); mBufferItemConsumer->setFrameAvailableListener(this); mBufferItemConsumer->setBufferFreedListener(this); mBufferItemConsumer->setBlastBufferQueue(this); ComposerService::getComposerService()->getMaxAcquiredBufferCount(&mMaxAcquiredBuffers); mBufferItemConsumer->setMaxAcquiredBufferCount(mMaxAcquiredBuffers); Loading @@ -174,7 +168,6 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, const sp<SurfaceCont } BLASTBufferQueue::~BLASTBufferQueue() { mBufferItemConsumer->setBlastBufferQueue(nullptr); if (mPendingTransactions.empty()) { return; } Loading Loading @@ -507,8 +500,7 @@ void BLASTBufferQueue::acquireNextBufferLocked( std::bind(releaseBufferCallbackThunk, wp<BLASTBufferQueue>(this) /* callbackContext */, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); sp<Fence> fence = bufferItem.mFence ? new Fence(bufferItem.mFence->dup()) : Fence::NO_FENCE; t->setBuffer(mSurfaceControl, buffer, fence, bufferItem.mFrameNumber, releaseCallbackId, releaseBufferCallback); t->setBuffer(mSurfaceControl, buffer, fence, bufferItem.mFrameNumber, releaseBufferCallback); t->setDataspace(mSurfaceControl, static_cast<ui::Dataspace>(bufferItem.mDataSpace)); t->setHdrMetadata(mSurfaceControl, bufferItem.mHdrMetadata); t->setSurfaceDamageRegion(mSurfaceControl, bufferItem.mSurfaceDamage); Loading Loading @@ -622,7 +614,7 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& item) { if (bufferData) { BQA_LOGD("Releasing previous buffer when syncing: framenumber=%" PRIu64, bufferData->frameNumber); releaseBuffer(bufferData->releaseCallbackId, bufferData->acquireFence); releaseBuffer(bufferData->generateReleaseCallbackId(), bufferData->acquireFence); // Because we just released a buffer, we know there's no need to wait for a free // buffer. mayNeedToWaitForBuffer = false; Loading Loading @@ -1025,7 +1017,6 @@ void BLASTBufferQueue::abandon() { mBufferItemConsumer->abandon(); mBufferItemConsumer->setFrameAvailableListener(nullptr); mBufferItemConsumer->setBufferFreedListener(nullptr); mBufferItemConsumer->setBlastBufferQueue(nullptr); } mBufferItemConsumer = nullptr; mConsumer = nullptr; Loading libs/gui/LayerState.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -677,6 +677,10 @@ status_t LayerCaptureArgs::read(const Parcel& input) { return NO_ERROR; } ReleaseCallbackId BufferData::generateReleaseCallbackId() const { return {buffer->getId(), frameNumber}; } status_t BufferData::write(Parcel& output) const { SAFE_PARCEL(output.writeInt32, flags.get()); Loading libs/gui/SurfaceComposerClient.cpp +7 −9 Original line number Diff line number Diff line Loading @@ -736,10 +736,10 @@ void SurfaceComposerClient::Transaction::releaseBufferIfOverwriting(const layer_ // if the callback is in process, run on a different thread to avoid any lock contigency // issues in the client. SurfaceComposerClient::getDefault() ->mReleaseCallbackThread.addReleaseCallback(state.bufferData.releaseCallbackId, fence); ->mReleaseCallbackThread .addReleaseCallback(state.bufferData.generateReleaseCallbackId(), fence); } else { listener->onReleaseBuffer(state.bufferData.releaseCallbackId, fence, UINT_MAX); listener->onReleaseBuffer(state.bufferData.generateReleaseCallbackId(), fence, UINT_MAX); } } Loading Loading @@ -1335,7 +1335,7 @@ std::optional<BufferData> SurfaceComposerClient::Transaction::getAndClearBuffer( BufferData bufferData = s->bufferData; TransactionCompletedListener::getInstance()->removeReleaseBufferCallback( bufferData.releaseCallbackId); bufferData.generateReleaseCallbackId()); BufferData emptyBufferData; s->what &= ~layer_state_t::eBufferChanged; s->bufferData = emptyBufferData; Loading @@ -1347,7 +1347,7 @@ std::optional<BufferData> SurfaceComposerClient::Transaction::getAndClearBuffer( SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer( const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer, const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& frameNumber, const ReleaseCallbackId& id, ReleaseBufferCallback callback) { ReleaseBufferCallback callback) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; Loading @@ -1371,7 +1371,7 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe if (mIsAutoTimestamp) { mDesiredPresentTime = systemTime(); } setReleaseBufferCallback(&bufferData, id, callback); setReleaseBufferCallback(&bufferData, callback); s->what |= layer_state_t::eBufferChanged; s->bufferData = bufferData; registerSurfaceControlForCallback(sc); Loading @@ -1381,7 +1381,6 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe } void SurfaceComposerClient::Transaction::setReleaseBufferCallback(BufferData* bufferData, const ReleaseCallbackId& id, ReleaseBufferCallback callback) { if (!callback) { return; Loading @@ -1394,9 +1393,8 @@ void SurfaceComposerClient::Transaction::setReleaseBufferCallback(BufferData* bu } bufferData->releaseBufferListener = TransactionCompletedListener::getIInstance(); bufferData->releaseCallbackId = id; auto listener = TransactionCompletedListener::getInstance(); listener->setReleaseBufferCallback(id, callback); listener->setReleaseBufferCallback(bufferData->generateReleaseCallbackId(), callback); } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setDataspace( Loading Loading
cmds/installd/InstalldNativeService.cpp +9 −10 Original line number Diff line number Diff line Loading @@ -1131,16 +1131,15 @@ binder::Status InstalldNativeService::fixupAppData(const std::optional<std::stri } static int32_t copy_directory_recursive(const char* from, const char* to) { char *argv[] = { (char*) kCpPath, char* argv[] = {(char*)kCpPath, (char*)"-F", /* delete any existing destination file first (--remove-destination) */ (char*) "-p", /* preserve timestamps, ownership, and permissions */ (char*)"--preserve=mode,ownership,timestamps,xattr", /* preserve properties */ (char*)"-R", /* recurse into subdirectories (DEST must be a directory) */ (char*)"-P", /* Do not follow symlinks [default] */ (char*)"-d", /* don't dereference symlinks */ (char*)from, (char*) to }; (char*)to}; LOG(DEBUG) << "Copying " << from << " to " << to; return logwrap_fork_execvp(ARRAY_SIZE(argv), argv, nullptr, false, LOG_ALOG, false, nullptr); Loading
include/input/KeyCharacterMap.h +14 −4 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public: const std::string getLoadFileName() const; /* Combines this key character map with an overlay. */ /* Combines this key character map with the provided overlay. */ void combine(const KeyCharacterMap& overlay); /* Gets the keyboard type. */ Loading Loading @@ -144,6 +144,8 @@ public: bool operator==(const KeyCharacterMap& other) const; bool operator!=(const KeyCharacterMap& other) const; KeyCharacterMap(const KeyCharacterMap& other); virtual ~KeyCharacterMap(); Loading Loading @@ -230,11 +232,12 @@ private: KeyedVector<int32_t, Key*> mKeys; KeyboardType mType; std::string mLoadFileName; bool mLayoutOverlayApplied; KeyedVector<int32_t, int32_t> mKeysByScanCode; KeyedVector<int32_t, int32_t> mKeysByUsageCode; KeyCharacterMap(); KeyCharacterMap(const std::string& filename); bool getKey(int32_t keyCode, const Key** outKey) const; bool getKeyBehavior(int32_t keyCode, int32_t metaState, Loading @@ -243,8 +246,6 @@ private: bool findKey(char16_t ch, int32_t* outKeyCode, int32_t* outMetaState) const; static base::Result<std::shared_ptr<KeyCharacterMap>> load(Tokenizer* tokenizer, Format format); static void addKey(Vector<KeyEvent>& outEvents, int32_t deviceId, int32_t keyCode, int32_t metaState, bool down, nsecs_t time); static void addMetaKeys(Vector<KeyEvent>& outEvents, Loading @@ -264,6 +265,15 @@ private: int32_t deviceId, int32_t metaState, nsecs_t time, int32_t keyCode, int32_t keyMetaState, int32_t* currentMetaState); /* Clears all data stored in this key character map */ void clear(); /* Loads the KeyCharacterMap provided by the tokenizer into this instance. */ status_t load(Tokenizer* tokenizer, Format format); /* Reloads the data from mLoadFileName and unapplies any overlay. */ status_t reloadBaseFromFile(); }; } // namespace android Loading
libs/gui/BLASTBufferQueue.cpp +6 −15 Original line number Diff line number Diff line Loading @@ -119,16 +119,11 @@ void BLASTBufferItemConsumer::getConnectionEvents(uint64_t frameNumber, bool* ne if (needsDisconnect != nullptr) *needsDisconnect = disconnect; } void BLASTBufferItemConsumer::setBlastBufferQueue(BLASTBufferQueue* blastbufferqueue) { std::scoped_lock lock(mBufferQueueMutex); mBLASTBufferQueue = blastbufferqueue; } void BLASTBufferItemConsumer::onSidebandStreamChanged() { std::scoped_lock lock(mBufferQueueMutex); if (mBLASTBufferQueue != nullptr) { sp<BLASTBufferQueue> bbq = mBLASTBufferQueue.promote(); if (bbq != nullptr) { sp<NativeHandle> stream = getSidebandStream(); mBLASTBufferQueue->setSidebandStream(stream); bbq->setSidebandStream(stream); } } Loading @@ -148,7 +143,7 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name) mBufferItemConsumer = new BLASTBufferItemConsumer(mConsumer, GraphicBuffer::USAGE_HW_COMPOSER | GraphicBuffer::USAGE_HW_TEXTURE, 1, false); 1, false, this); static int32_t id = 0; mName = name + "#" + std::to_string(id); auto consumerName = mName + "(BLAST Consumer)" + std::to_string(id); Loading @@ -157,7 +152,6 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name) mBufferItemConsumer->setName(String8(consumerName.c_str())); mBufferItemConsumer->setFrameAvailableListener(this); mBufferItemConsumer->setBufferFreedListener(this); mBufferItemConsumer->setBlastBufferQueue(this); ComposerService::getComposerService()->getMaxAcquiredBufferCount(&mMaxAcquiredBuffers); mBufferItemConsumer->setMaxAcquiredBufferCount(mMaxAcquiredBuffers); Loading @@ -174,7 +168,6 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, const sp<SurfaceCont } BLASTBufferQueue::~BLASTBufferQueue() { mBufferItemConsumer->setBlastBufferQueue(nullptr); if (mPendingTransactions.empty()) { return; } Loading Loading @@ -507,8 +500,7 @@ void BLASTBufferQueue::acquireNextBufferLocked( std::bind(releaseBufferCallbackThunk, wp<BLASTBufferQueue>(this) /* callbackContext */, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); sp<Fence> fence = bufferItem.mFence ? new Fence(bufferItem.mFence->dup()) : Fence::NO_FENCE; t->setBuffer(mSurfaceControl, buffer, fence, bufferItem.mFrameNumber, releaseCallbackId, releaseBufferCallback); t->setBuffer(mSurfaceControl, buffer, fence, bufferItem.mFrameNumber, releaseBufferCallback); t->setDataspace(mSurfaceControl, static_cast<ui::Dataspace>(bufferItem.mDataSpace)); t->setHdrMetadata(mSurfaceControl, bufferItem.mHdrMetadata); t->setSurfaceDamageRegion(mSurfaceControl, bufferItem.mSurfaceDamage); Loading Loading @@ -622,7 +614,7 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& item) { if (bufferData) { BQA_LOGD("Releasing previous buffer when syncing: framenumber=%" PRIu64, bufferData->frameNumber); releaseBuffer(bufferData->releaseCallbackId, bufferData->acquireFence); releaseBuffer(bufferData->generateReleaseCallbackId(), bufferData->acquireFence); // Because we just released a buffer, we know there's no need to wait for a free // buffer. mayNeedToWaitForBuffer = false; Loading Loading @@ -1025,7 +1017,6 @@ void BLASTBufferQueue::abandon() { mBufferItemConsumer->abandon(); mBufferItemConsumer->setFrameAvailableListener(nullptr); mBufferItemConsumer->setBufferFreedListener(nullptr); mBufferItemConsumer->setBlastBufferQueue(nullptr); } mBufferItemConsumer = nullptr; mConsumer = nullptr; Loading
libs/gui/LayerState.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -677,6 +677,10 @@ status_t LayerCaptureArgs::read(const Parcel& input) { return NO_ERROR; } ReleaseCallbackId BufferData::generateReleaseCallbackId() const { return {buffer->getId(), frameNumber}; } status_t BufferData::write(Parcel& output) const { SAFE_PARCEL(output.writeInt32, flags.get()); Loading
libs/gui/SurfaceComposerClient.cpp +7 −9 Original line number Diff line number Diff line Loading @@ -736,10 +736,10 @@ void SurfaceComposerClient::Transaction::releaseBufferIfOverwriting(const layer_ // if the callback is in process, run on a different thread to avoid any lock contigency // issues in the client. SurfaceComposerClient::getDefault() ->mReleaseCallbackThread.addReleaseCallback(state.bufferData.releaseCallbackId, fence); ->mReleaseCallbackThread .addReleaseCallback(state.bufferData.generateReleaseCallbackId(), fence); } else { listener->onReleaseBuffer(state.bufferData.releaseCallbackId, fence, UINT_MAX); listener->onReleaseBuffer(state.bufferData.generateReleaseCallbackId(), fence, UINT_MAX); } } Loading Loading @@ -1335,7 +1335,7 @@ std::optional<BufferData> SurfaceComposerClient::Transaction::getAndClearBuffer( BufferData bufferData = s->bufferData; TransactionCompletedListener::getInstance()->removeReleaseBufferCallback( bufferData.releaseCallbackId); bufferData.generateReleaseCallbackId()); BufferData emptyBufferData; s->what &= ~layer_state_t::eBufferChanged; s->bufferData = emptyBufferData; Loading @@ -1347,7 +1347,7 @@ std::optional<BufferData> SurfaceComposerClient::Transaction::getAndClearBuffer( SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer( const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer, const std::optional<sp<Fence>>& fence, const std::optional<uint64_t>& frameNumber, const ReleaseCallbackId& id, ReleaseBufferCallback callback) { ReleaseBufferCallback callback) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; Loading @@ -1371,7 +1371,7 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe if (mIsAutoTimestamp) { mDesiredPresentTime = systemTime(); } setReleaseBufferCallback(&bufferData, id, callback); setReleaseBufferCallback(&bufferData, callback); s->what |= layer_state_t::eBufferChanged; s->bufferData = bufferData; registerSurfaceControlForCallback(sc); Loading @@ -1381,7 +1381,6 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe } void SurfaceComposerClient::Transaction::setReleaseBufferCallback(BufferData* bufferData, const ReleaseCallbackId& id, ReleaseBufferCallback callback) { if (!callback) { return; Loading @@ -1394,9 +1393,8 @@ void SurfaceComposerClient::Transaction::setReleaseBufferCallback(BufferData* bu } bufferData->releaseBufferListener = TransactionCompletedListener::getIInstance(); bufferData->releaseCallbackId = id; auto listener = TransactionCompletedListener::getInstance(); listener->setReleaseBufferCallback(id, callback); listener->setReleaseBufferCallback(bufferData->generateReleaseCallbackId(), callback); } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setDataspace( Loading