diff options
Diffstat (limited to 'graphics/composer/2.1/utils/hwc2onfbadapter/HWC2OnFbAdapter.cpp')
-rw-r--r-- | graphics/composer/2.1/utils/hwc2onfbadapter/HWC2OnFbAdapter.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/graphics/composer/2.1/utils/hwc2onfbadapter/HWC2OnFbAdapter.cpp b/graphics/composer/2.1/utils/hwc2onfbadapter/HWC2OnFbAdapter.cpp index 7c9e6518b..0f5057756 100644 --- a/graphics/composer/2.1/utils/hwc2onfbadapter/HWC2OnFbAdapter.cpp +++ b/graphics/composer/2.1/utils/hwc2onfbadapter/HWC2OnFbAdapter.cpp @@ -32,6 +32,8 @@ #include <log/log.h> #include <sync/sync.h> +using namespace HWC2; + namespace android { namespace { @@ -629,9 +631,10 @@ hwc2_function_pointer_t getFunctionHook(hwc2_device_t* /*device*/, int32_t descr } } -void getCapabilitiesHook(hwc2_device_t* /*device*/, uint32_t* outCount, - int32_t* /*outCapabilities*/) { - *outCount = 0; +void getCapabilitiesHook(hwc2_device_t* device, uint32_t* outCount, + int32_t* outCapabilities) { + auto& adapter = HWC2OnFbAdapter::cast(device); + adapter.getCapabilities(outCount, outCapabilities); } int closeHook(hw_device_t* device) { @@ -656,6 +659,10 @@ HWC2OnFbAdapter::HWC2OnFbAdapter(framebuffer_device_t* fbDevice) mFbInfo.xdpi_scaled = int(mFbDevice->xdpi * 1000.0f); mFbInfo.ydpi_scaled = int(mFbDevice->ydpi * 1000.0f); + // Present fences aren't supported, always indicate PresentFenceIsNotReliable + // for FB devices + mCapabilities.insert(Capability::PresentFenceIsNotReliable); + mVsyncThread.start(0, mFbInfo.vsync_period_ns); } @@ -791,6 +798,23 @@ void HWC2OnFbAdapter::enableVsync(bool enable) { mVsyncThread.enableCallback(enable); } +void HWC2OnFbAdapter::getCapabilities(uint32_t* outCount, + int32_t* outCapabilities) { + if (outCapabilities == nullptr) { + *outCount = mCapabilities.size(); + return; + } + + auto capabilityIter = mCapabilities.cbegin(); + for (size_t written = 0; written < *outCount; ++written) { + if (capabilityIter == mCapabilities.cend()) { + return; + } + outCapabilities[written] = static_cast<int32_t>(*capabilityIter); + ++capabilityIter; + } +} + int64_t HWC2OnFbAdapter::VsyncThread::now() { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); |