mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge "[Graphics] Only validate display in PresentOrValidateDisplay."
This commit is contained in:
@@ -102,6 +102,7 @@ class ComposerClientImpl : public Interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onRefresh(Display display) {
|
void onRefresh(Display display) {
|
||||||
|
mResources->setDisplayMustValidateState(display, true);
|
||||||
auto ret = mCallback->onRefresh(display);
|
auto ret = mCallback->onRefresh(display);
|
||||||
ALOGE_IF(!ret.isOk(), "failed to send onRefresh: %s", ret.description().c_str());
|
ALOGE_IF(!ret.isOk(), "failed to send onRefresh: %s", ret.description().c_str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,6 +258,7 @@ class ComposerCommandEngine : protected CommandReaderBase {
|
|||||||
|
|
||||||
auto err = mHal->validateDisplay(mCurrentDisplay, &changedLayers, &compositionTypes,
|
auto err = mHal->validateDisplay(mCurrentDisplay, &changedLayers, &compositionTypes,
|
||||||
&displayRequestMask, &requestedLayers, &requestMasks);
|
&displayRequestMask, &requestedLayers, &requestMasks);
|
||||||
|
mResources->setDisplayMustValidateState(mCurrentDisplay, false);
|
||||||
if (err == Error::NONE) {
|
if (err == Error::NONE) {
|
||||||
mWriter.setChangedCompositionTypes(changedLayers, compositionTypes);
|
mWriter.setChangedCompositionTypes(changedLayers, compositionTypes);
|
||||||
mWriter.setDisplayRequests(displayRequestMask, requestedLayers, requestMasks);
|
mWriter.setDisplayRequests(displayRequestMask, requestedLayers, requestMasks);
|
||||||
@@ -278,7 +279,9 @@ class ComposerCommandEngine : protected CommandReaderBase {
|
|||||||
int presentFence = -1;
|
int presentFence = -1;
|
||||||
std::vector<Layer> layers;
|
std::vector<Layer> layers;
|
||||||
std::vector<int> fences;
|
std::vector<int> fences;
|
||||||
auto err = mHal->presentDisplay(mCurrentDisplay, &presentFence, &layers, &fences);
|
auto err = mResources->mustValidateDisplay(mCurrentDisplay)
|
||||||
|
? Error::NOT_VALIDATED
|
||||||
|
: mHal->presentDisplay(mCurrentDisplay, &presentFence, &layers, &fences);
|
||||||
if (err == Error::NONE) {
|
if (err == Error::NONE) {
|
||||||
mWriter.setPresentOrValidateResult(1);
|
mWriter.setPresentOrValidateResult(1);
|
||||||
mWriter.setPresentFence(presentFence);
|
mWriter.setPresentFence(presentFence);
|
||||||
@@ -296,6 +299,7 @@ class ComposerCommandEngine : protected CommandReaderBase {
|
|||||||
|
|
||||||
auto err = mHal->validateDisplay(mCurrentDisplay, &changedLayers, &compositionTypes,
|
auto err = mHal->validateDisplay(mCurrentDisplay, &changedLayers, &compositionTypes,
|
||||||
&displayRequestMask, &requestedLayers, &requestMasks);
|
&displayRequestMask, &requestedLayers, &requestMasks);
|
||||||
|
mResources->setDisplayMustValidateState(mCurrentDisplay, false);
|
||||||
if (err == Error::NONE) {
|
if (err == Error::NONE) {
|
||||||
mWriter.setPresentOrValidateResult(0);
|
mWriter.setPresentOrValidateResult(0);
|
||||||
mWriter.setChangedCompositionTypes(changedLayers, compositionTypes);
|
mWriter.setChangedCompositionTypes(changedLayers, compositionTypes);
|
||||||
|
|||||||
@@ -216,7 +216,8 @@ class ComposerDisplayResource {
|
|||||||
: mType(type),
|
: mType(type),
|
||||||
mClientTargetCache(importer),
|
mClientTargetCache(importer),
|
||||||
mOutputBufferCache(importer, ComposerHandleCache::HandleType::BUFFER,
|
mOutputBufferCache(importer, ComposerHandleCache::HandleType::BUFFER,
|
||||||
outputBufferCacheSize) {}
|
outputBufferCacheSize),
|
||||||
|
mMustValidate(true) {}
|
||||||
|
|
||||||
bool initClientTargetCache(uint32_t cacheSize) {
|
bool initClientTargetCache(uint32_t cacheSize) {
|
||||||
return mClientTargetCache.initCache(ComposerHandleCache::HandleType::BUFFER, cacheSize);
|
return mClientTargetCache.initCache(ComposerHandleCache::HandleType::BUFFER, cacheSize);
|
||||||
@@ -263,10 +264,15 @@ class ComposerDisplayResource {
|
|||||||
return layers;
|
return layers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMustValidateState(bool mustValidate) { mMustValidate = mustValidate; }
|
||||||
|
|
||||||
|
bool mustValidate() const { return mMustValidate; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const DisplayType mType;
|
const DisplayType mType;
|
||||||
ComposerHandleCache mClientTargetCache;
|
ComposerHandleCache mClientTargetCache;
|
||||||
ComposerHandleCache mOutputBufferCache;
|
ComposerHandleCache mOutputBufferCache;
|
||||||
|
bool mMustValidate;
|
||||||
|
|
||||||
std::unordered_map<Layer, std::unique_ptr<ComposerLayerResource>> mLayerResources;
|
std::unordered_map<Layer, std::unique_ptr<ComposerLayerResource>> mLayerResources;
|
||||||
};
|
};
|
||||||
@@ -389,6 +395,23 @@ class ComposerResources {
|
|||||||
outStreamHandle, outReplacedStream);
|
outStreamHandle, outReplacedStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setDisplayMustValidateState(Display display, bool mustValidate) {
|
||||||
|
std::lock_guard<std::mutex> lock(mDisplayResourcesMutex);
|
||||||
|
auto* displayResource = findDisplayResourceLocked(display);
|
||||||
|
if (displayResource) {
|
||||||
|
displayResource->setMustValidateState(mustValidate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mustValidateDisplay(Display display) {
|
||||||
|
std::lock_guard<std::mutex> lock(mDisplayResourcesMutex);
|
||||||
|
auto* displayResource = findDisplayResourceLocked(display);
|
||||||
|
if (displayResource) {
|
||||||
|
return displayResource->mustValidate();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual std::unique_ptr<ComposerDisplayResource> createDisplayResource(
|
virtual std::unique_ptr<ComposerDisplayResource> createDisplayResource(
|
||||||
ComposerDisplayResource::DisplayType type, uint32_t outputBufferCacheSize) {
|
ComposerDisplayResource::DisplayType type, uint32_t outputBufferCacheSize) {
|
||||||
|
|||||||
@@ -111,7 +111,6 @@ class HwcHalImpl : public Hal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void registerEventCallback(hal::ComposerHal::EventCallback* callback) override {
|
void registerEventCallback(hal::ComposerHal::EventCallback* callback) override {
|
||||||
mMustValidateDisplay = true;
|
|
||||||
mEventCallback = callback;
|
mEventCallback = callback;
|
||||||
|
|
||||||
mDispatch.registerCallback(mDevice, HWC2_CALLBACK_HOTPLUG, this,
|
mDispatch.registerCallback(mDevice, HWC2_CALLBACK_HOTPLUG, this,
|
||||||
@@ -331,7 +330,6 @@ class HwcHalImpl : public Hal {
|
|||||||
uint32_t typesCount = 0;
|
uint32_t typesCount = 0;
|
||||||
uint32_t reqsCount = 0;
|
uint32_t reqsCount = 0;
|
||||||
int32_t err = mDispatch.validateDisplay(mDevice, display, &typesCount, &reqsCount);
|
int32_t err = mDispatch.validateDisplay(mDevice, display, &typesCount, &reqsCount);
|
||||||
mMustValidateDisplay = false;
|
|
||||||
|
|
||||||
if (err != HWC2_ERROR_NONE && err != HWC2_ERROR_HAS_CHANGES) {
|
if (err != HWC2_ERROR_NONE && err != HWC2_ERROR_HAS_CHANGES) {
|
||||||
return static_cast<Error>(err);
|
return static_cast<Error>(err);
|
||||||
@@ -384,10 +382,6 @@ class HwcHalImpl : public Hal {
|
|||||||
|
|
||||||
Error presentDisplay(Display display, int32_t* outPresentFence, std::vector<Layer>* outLayers,
|
Error presentDisplay(Display display, int32_t* outPresentFence, std::vector<Layer>* outLayers,
|
||||||
std::vector<int32_t>* outReleaseFences) override {
|
std::vector<int32_t>* outReleaseFences) override {
|
||||||
if (mMustValidateDisplay) {
|
|
||||||
return Error::NOT_VALIDATED;
|
|
||||||
}
|
|
||||||
|
|
||||||
*outPresentFence = -1;
|
*outPresentFence = -1;
|
||||||
int32_t err = mDispatch.presentDisplay(mDevice, display, outPresentFence);
|
int32_t err = mDispatch.presentDisplay(mDevice, display, outPresentFence);
|
||||||
if (err != HWC2_ERROR_NONE) {
|
if (err != HWC2_ERROR_NONE) {
|
||||||
@@ -593,7 +587,6 @@ class HwcHalImpl : public Hal {
|
|||||||
|
|
||||||
static void refreshHook(hwc2_callback_data_t callbackData, hwc2_display_t display) {
|
static void refreshHook(hwc2_callback_data_t callbackData, hwc2_display_t display) {
|
||||||
auto hal = static_cast<HwcHalImpl*>(callbackData);
|
auto hal = static_cast<HwcHalImpl*>(callbackData);
|
||||||
hal->mMustValidateDisplay = true;
|
|
||||||
hal->mEventCallback->onRefresh(display);
|
hal->mEventCallback->onRefresh(display);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -654,8 +647,6 @@ class HwcHalImpl : public Hal {
|
|||||||
} mDispatch = {};
|
} mDispatch = {};
|
||||||
|
|
||||||
hal::ComposerHal::EventCallback* mEventCallback = nullptr;
|
hal::ComposerHal::EventCallback* mEventCallback = nullptr;
|
||||||
|
|
||||||
std::atomic<bool> mMustValidateDisplay{true};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|||||||
Reference in New Issue
Block a user