Loading services/surfaceflinger/tests/fakehwc/Android.bp +5 −2 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ cc_test { ], shared_libs: [ "android.hardware.graphics.composer@2.1", "android.hardware.graphics.composer@2.2", "android.hardware.graphics.composer@2.3", "android.hardware.graphics.composer@2.4", "android.hardware.graphics.composer@2.1-resources", "android.hardware.graphics.mapper@2.0", "android.hardware.graphics.mapper@3.0", Loading Loading @@ -39,8 +42,8 @@ cc_test { "libtrace_proto", ], header_libs: [ "android.hardware.graphics.composer@2.1-command-buffer", "android.hardware.graphics.composer@2.1-hal", "android.hardware.graphics.composer@2.4-command-buffer", "android.hardware.graphics.composer@2.4-hal", "libsurfaceflinger_headers", ], } services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp +388 −125 File changed.Preview size limit exceeded, changes collapsed. Show changes services/surfaceflinger/tests/fakehwc/FakeComposerClient.h +186 −56 Original line number Diff line number Diff line Loading @@ -19,10 +19,15 @@ #define HWC2_USE_CPP11 #define HWC2_INCLUDE_STRINGIFICATION #include <composer-hal/2.1/ComposerClient.h> #include <composer-hal/2.2/ComposerClient.h> #include <composer-hal/2.3/ComposerClient.h> #include <composer-hal/2.4/ComposerClient.h> #undef HWC2_USE_CPP11 #undef HWC2_INCLUDE_STRINGIFICATION #include "RenderState.h" #include "MockComposerHal.h" // Needed for display type/ID enums #include <hardware/hwcomposer_defs.h> Loading @@ -30,8 +35,10 @@ #include <chrono> using namespace android::hardware::graphics::composer::V2_1; using namespace android::hardware::graphics::composer::V2_1::hal; using namespace android::hardware::graphics::common; using namespace android::hardware::graphics::composer; using namespace android::hardware::graphics::composer::V2_4; using namespace android::hardware::graphics::composer::V2_4::hal; using namespace android::hardware; using namespace std::chrono_literals; Loading @@ -46,7 +53,6 @@ class SurfaceComposerClient; } // namespace android namespace sftest { // NOTE: The ID's need to be exactly these. VR composer and parts of // the SurfaceFlinger assume the display IDs to have these values // despite the enum being documented as a display type. Loading @@ -59,6 +65,8 @@ public: FakeComposerClient(); virtual ~FakeComposerClient(); void setMockHal(MockComposerHal* mockHal) { mMockHal = mockHal; } bool hasCapability(hwc2_capability_t capability) override; std::string dumpDebugInfo() override; Loading @@ -66,59 +74,178 @@ public: void unregisterEventCallback() override; uint32_t getMaxVirtualDisplayCount() override; Error createVirtualDisplay(uint32_t width, uint32_t height, PixelFormat* format, V2_1::Error createVirtualDisplay(uint32_t width, uint32_t height, V1_0::PixelFormat* format, Display* outDisplay) override; Error destroyVirtualDisplay(Display display) override; Error createLayer(Display display, Layer* outLayer) override; Error destroyLayer(Display display, Layer layer) override; Error getActiveConfig(Display display, Config* outConfig) override; Error getClientTargetSupport(Display display, uint32_t width, uint32_t height, PixelFormat format, Dataspace dataspace) override; Error getColorModes(Display display, hidl_vec<ColorMode>* outModes) override; Error getDisplayAttribute(Display display, Config config, IComposerClient::Attribute attribute, V2_1::Error destroyVirtualDisplay(Display display) override; V2_1::Error createLayer(Display display, Layer* outLayer) override; V2_1::Error destroyLayer(Display display, Layer layer) override; V2_1::Error getActiveConfig(Display display, Config* outConfig) override; V2_1::Error getClientTargetSupport(Display display, uint32_t width, uint32_t height, V1_0::PixelFormat format, V1_0::Dataspace dataspace) override; V2_1::Error getColorModes(Display display, hidl_vec<V1_0::ColorMode>* outModes) override; V2_1::Error getDisplayAttribute(Display display, Config config, V2_1::IComposerClient::Attribute attribute, int32_t* outValue) override; Error getDisplayConfigs(Display display, hidl_vec<Config>* outConfigs) override; Error getDisplayName(Display display, hidl_string* outName) override; Error getDisplayType(Display display, IComposerClient::DisplayType* outType) override; Error getDozeSupport(Display display, bool* outSupport) override; Error getHdrCapabilities(Display display, hidl_vec<Hdr>* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) override; Error setActiveConfig(Display display, Config config) override; Error setColorMode(Display display, ColorMode mode) override; Error setPowerMode(Display display, IComposerClient::PowerMode mode) override; Error setVsyncEnabled(Display display, IComposerClient::Vsync enabled) override; Error setColorTransform(Display display, const float* matrix, int32_t hint) override; Error setClientTarget(Display display, buffer_handle_t target, int32_t acquireFence, V2_1::Error getDisplayConfigs(Display display, hidl_vec<Config>* outConfigs) override; V2_1::Error getDisplayName(Display display, hidl_string* outName) override; V2_1::Error getDisplayType(Display display, IComposerClient::DisplayType* outType) override; V2_1::Error getDozeSupport(Display display, bool* outSupport) override; V2_1::Error getHdrCapabilities(Display display, hidl_vec<V1_0::Hdr>* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) override; V2_1::Error setActiveConfig(Display display, Config config) override; V2_1::Error setColorMode(Display display, V1_0::ColorMode mode) override; V2_1::Error setPowerMode(Display display, V2_1::IComposerClient::PowerMode mode) override; V2_1::Error setVsyncEnabled(Display display, IComposerClient::Vsync enabled) override; V2_1::Error setColorTransform(Display display, const float* matrix, int32_t hint) override; V2_1::Error setClientTarget(Display display, buffer_handle_t target, int32_t acquireFence, int32_t dataspace, const std::vector<hwc_rect_t>& damage) override; Error setOutputBuffer(Display display, buffer_handle_t buffer, int32_t releaseFence) override; Error validateDisplay(Display display, std::vector<Layer>* outChangedLayers, V2_1::Error setOutputBuffer(Display display, buffer_handle_t buffer, int32_t releaseFence) override; V2_1::Error validateDisplay(Display display, std::vector<Layer>* outChangedLayers, std::vector<IComposerClient::Composition>* outCompositionTypes, uint32_t* outDisplayRequestMask, std::vector<Layer>* outRequestedLayers, uint32_t* outDisplayRequestMask, std::vector<Layer>* outRequestedLayers, std::vector<uint32_t>* outRequestMasks) override; Error acceptDisplayChanges(Display display) override; Error presentDisplay(Display display, int32_t* outPresentFence, std::vector<Layer>* outLayers, V2_1::Error acceptDisplayChanges(Display display) override; V2_1::Error presentDisplay(Display display, int32_t* outPresentFence, std::vector<Layer>* outLayers, std::vector<int32_t>* outReleaseFences) override; Error setLayerCursorPosition(Display display, Layer layer, int32_t x, int32_t y) override; Error setLayerBuffer(Display display, Layer layer, buffer_handle_t buffer, V2_1::Error setLayerCursorPosition(Display display, Layer layer, int32_t x, int32_t y) override; V2_1::Error setLayerBuffer(Display display, Layer layer, buffer_handle_t buffer, int32_t acquireFence) override; Error setLayerSurfaceDamage(Display display, Layer layer, V2_1::Error setLayerSurfaceDamage(Display display, Layer layer, const std::vector<hwc_rect_t>& damage) override; Error setLayerBlendMode(Display display, Layer layer, int32_t mode) override; Error setLayerColor(Display display, Layer layer, IComposerClient::Color color) override; Error setLayerCompositionType(Display display, Layer layer, int32_t type) override; Error setLayerDataspace(Display display, Layer layer, int32_t dataspace) override; Error setLayerDisplayFrame(Display display, Layer layer, const hwc_rect_t& frame) override; Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) override; Error setLayerSidebandStream(Display display, Layer layer, buffer_handle_t stream) override; Error setLayerSourceCrop(Display display, Layer layer, const hwc_frect_t& crop) override; Error setLayerTransform(Display display, Layer layer, int32_t transform) override; Error setLayerVisibleRegion(Display display, Layer layer, V2_1::Error setLayerBlendMode(Display display, Layer layer, int32_t mode) override; V2_1::Error setLayerColor(Display display, Layer layer, IComposerClient::Color color) override; V2_1::Error setLayerCompositionType(Display display, Layer layer, int32_t type) override; V2_1::Error setLayerDataspace(Display display, Layer layer, int32_t dataspace) override; V2_1::Error setLayerDisplayFrame(Display display, Layer layer, const hwc_rect_t& frame) override; V2_1::Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) override; V2_1::Error setLayerSidebandStream(Display display, Layer layer, buffer_handle_t stream) override; V2_1::Error setLayerSourceCrop(Display display, Layer layer, const hwc_frect_t& crop) override; V2_1::Error setLayerTransform(Display display, Layer layer, int32_t transform) override; V2_1::Error setLayerVisibleRegion(Display display, Layer layer, const std::vector<hwc_rect_t>& visible) override; Error setLayerZOrder(Display display, Layer layer, uint32_t z) override; V2_1::Error setLayerZOrder(Display display, Layer layer, uint32_t z) override; // Composer 2.2 V2_1::Error getPerFrameMetadataKeys( Display display, std::vector<V2_2::IComposerClient::PerFrameMetadataKey>* outKeys) override; V2_1::Error setLayerPerFrameMetadata( Display display, Layer layer, const std::vector<V2_2::IComposerClient::PerFrameMetadata>& metadata) override; V2_1::Error getReadbackBufferAttributes( Display display, graphics::common::V1_1::PixelFormat* outFormat, graphics::common::V1_1::Dataspace* outDataspace) override; V2_1::Error setReadbackBuffer(Display display, const native_handle_t* bufferHandle, android::base::unique_fd fenceFd) override; V2_1::Error getReadbackBufferFence(Display display, android::base::unique_fd* outFenceFd) override; V2_1::Error createVirtualDisplay_2_2(uint32_t width, uint32_t height, graphics::common::V1_1::PixelFormat* format, Display* outDisplay) override; V2_1::Error getClientTargetSupport_2_2(Display display, uint32_t width, uint32_t height, graphics::common::V1_1::PixelFormat format, graphics::common::V1_1::Dataspace dataspace) override; V2_1::Error setPowerMode_2_2(Display display, V2_2::IComposerClient::PowerMode mode) override; V2_1::Error setLayerFloatColor(Display display, Layer layer, V2_2::IComposerClient::FloatColor color) override; V2_1::Error getColorModes_2_2(Display display, hidl_vec<graphics::common::V1_1::ColorMode>* outModes) override; V2_1::Error getRenderIntents( Display display, graphics::common::V1_1::ColorMode mode, std::vector<graphics::common::V1_1::RenderIntent>* outIntents) override; V2_1::Error setColorMode_2_2(Display display, graphics::common::V1_1::ColorMode mode, graphics::common::V1_1::RenderIntent intent) override; std::array<float, 16> getDataspaceSaturationMatrix( graphics::common::V1_1::Dataspace dataspace) override; // Composer 2.3 V2_1::Error getPerFrameMetadataKeys_2_3( Display display, std::vector<V2_3::IComposerClient::PerFrameMetadataKey>* outKeys) override; V2_1::Error setColorMode_2_3(Display display, graphics::common::V1_2::ColorMode mode, graphics::common::V1_1::RenderIntent intent) override; V2_1::Error getRenderIntents_2_3( Display display, graphics::common::V1_2::ColorMode mode, std::vector<graphics::common::V1_1::RenderIntent>* outIntents) override; V2_1::Error getColorModes_2_3(Display display, hidl_vec<graphics::common::V1_2::ColorMode>* outModes) override; V2_1::Error getClientTargetSupport_2_3(Display display, uint32_t width, uint32_t height, graphics::common::V1_2::PixelFormat format, graphics::common::V1_2::Dataspace dataspace) override; V2_1::Error getReadbackBufferAttributes_2_3( Display display, graphics::common::V1_2::PixelFormat* outFormat, graphics::common::V1_2::Dataspace* outDataspace) override; V2_1::Error getHdrCapabilities_2_3(Display display, hidl_vec<graphics::common::V1_2::Hdr>* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) override; V2_1::Error setLayerPerFrameMetadata_2_3( Display display, Layer layer, const std::vector<V2_3::IComposerClient::PerFrameMetadata>& metadata) override; V2_1::Error getDisplayIdentificationData(Display display, uint8_t* outPort, std::vector<uint8_t>* outData) override; V2_1::Error setLayerColorTransform(Display display, Layer layer, const float* matrix) override; V2_1::Error getDisplayedContentSamplingAttributes( uint64_t display, graphics::common::V1_2::PixelFormat& format, graphics::common::V1_2::Dataspace& dataspace, hidl_bitfield<V2_3::IComposerClient::FormatColorComponent>& componentMask) override; V2_1::Error setDisplayedContentSamplingEnabled( uint64_t display, V2_3::IComposerClient::DisplayedContentSampling enable, hidl_bitfield<V2_3::IComposerClient::FormatColorComponent> componentMask, uint64_t maxFrames) override; V2_1::Error getDisplayedContentSample(uint64_t display, uint64_t maxFrames, uint64_t timestamp, uint64_t& frameCount, hidl_vec<uint64_t>& sampleComponent0, hidl_vec<uint64_t>& sampleComponent1, hidl_vec<uint64_t>& sampleComponent2, hidl_vec<uint64_t>& sampleComponent3) override; V2_1::Error getDisplayCapabilities( Display display, std::vector<V2_3::IComposerClient::DisplayCapability>* outCapabilities) override; V2_1::Error setLayerPerFrameMetadataBlobs( Display display, Layer layer, std::vector<V2_3::IComposerClient::PerFrameMetadataBlob>& blobs) override; V2_1::Error getDisplayBrightnessSupport(Display display, bool* outSupport) override; V2_1::Error setDisplayBrightness(Display display, float brightness) override; // Composer 2.4 void registerEventCallback_2_4(EventCallback_2_4* callback) override; void unregisterEventCallback_2_4() override; V2_4::Error getDisplayCapabilities_2_4( Display display, std::vector<V2_4::IComposerClient::DisplayCapability>* outCapabilities) override; V2_4::Error getDisplayConnectionType( Display display, V2_4::IComposerClient::DisplayConnectionType* outType) override; V2_4::Error getDisplayAttribute_2_4(Display display, Config config, IComposerClient::Attribute attribute, int32_t* outValue) override; V2_4::Error getDisplayVsyncPeriod(Display display, V2_4::VsyncPeriodNanos* outVsyncPeriod) override; V2_4::Error setActiveConfigWithConstraints( Display display, Config config, const V2_4::IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) override; void setClient(ComposerClient* client); Loading Loading @@ -150,6 +277,7 @@ private: LayerImpl& getLayerImpl(Layer handle); EventCallback* mEventCallback; EventCallback_2_4* mEventCallback_2_4; Config mCurrentConfig; bool mVsyncEnabled; std::vector<std::unique_ptr<LayerImpl>> mLayers; Loading @@ -159,6 +287,8 @@ private: android::sp<android::SurfaceComposerClient> mSurfaceComposer; // For VSync injections mutable android::Mutex mStateMutex; mutable android::Condition mFramesAvailable; MockComposerHal* mMockHal = nullptr; }; } // namespace sftest services/surfaceflinger/tests/fakehwc/FakeComposerService.cpp +122 −6 Original line number Diff line number Diff line Loading @@ -22,34 +22,150 @@ #include "FakeComposerService.h" using namespace android::hardware; using namespace android::hardware::graphics::composer; namespace sftest { FakeComposerService::FakeComposerService(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_1::FakeComposerService_2_1(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService::~FakeComposerService() { FakeComposerService_2_1::~FakeComposerService_2_1() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService::getCapabilities(getCapabilities_cb hidl_cb) { Return<void> FakeComposerService_2_1::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { Return<void> FakeComposerService_2_1::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService::createClient(createClient_cb hidl_cb) { Return<void> FakeComposerService_2_1::createClient(createClient_cb hidl_cb) { ALOGI("FakeComposerService::createClient %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(Error::NONE, mClient); hidl_cb(V2_1::Error::NONE, mClient); return Void(); } FakeComposerService_2_2::FakeComposerService_2_2(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_2::~FakeComposerService_2_2() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService_2_2::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService_2_2::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService_2_2::createClient(createClient_cb hidl_cb) { ALOGI("FakeComposerService::createClient %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::NONE, mClient); return Void(); } FakeComposerService_2_3::FakeComposerService_2_3(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_3::~FakeComposerService_2_3() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService_2_3::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService_2_3::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService_2_3::createClient(createClient_cb hidl_cb) { LOG_ALWAYS_FATAL("createClient called on FakeComposerService_2_3"); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::UNSUPPORTED, nullptr); return Void(); } Return<void> FakeComposerService_2_3::createClient_2_3(createClient_2_3_cb hidl_cb) { ALOGI("FakeComposerService_2_3::createClient_2_3 %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::NONE, mClient); return Void(); } FakeComposerService_2_4::FakeComposerService_2_4(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_4::~FakeComposerService_2_4() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService_2_4::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService_2_4::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService_2_4::createClient(createClient_cb hidl_cb) { LOG_ALWAYS_FATAL("createClient called on FakeComposerService_2_4"); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::UNSUPPORTED, nullptr); return Void(); } Return<void> FakeComposerService_2_4::createClient_2_3(createClient_2_3_cb hidl_cb) { LOG_ALWAYS_FATAL("createClient_2_3 called on FakeComposerService_2_4"); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::UNSUPPORTED, nullptr); return Void(); } Return<void> FakeComposerService_2_4::createClient_2_4(createClient_2_4_cb hidl_cb) { ALOGI("FakeComposerService_2_4::createClient_2_4 %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_4::Error::NONE, mClient); return Void(); } Loading services/surfaceflinger/tests/fakehwc/FakeComposerService.h +57 −5 Original line number Diff line number Diff line Loading @@ -16,22 +16,74 @@ #pragma once #include <android/hardware/graphics/composer/2.4/IComposer.h> #include <composer-hal/2.1/ComposerClient.h> #include <composer-hal/2.2/ComposerClient.h> #include <composer-hal/2.3/ComposerClient.h> #include <composer-hal/2.4/ComposerClient.h> using namespace android::hardware::graphics::composer::V2_1; using namespace android::hardware::graphics::composer::V2_1::hal; using android::hardware::Return; using ComposerClient = android::hardware::graphics::composer::V2_4::hal::ComposerClient; namespace sftest { class FakeComposerService : public IComposer { using IComposer_2_1 = android::hardware::graphics::composer::V2_1::IComposer; class FakeComposerService_2_1 : public IComposer_2_1 { public: explicit FakeComposerService_2_1(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_1(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; }; using IComposer_2_2 = android::hardware::graphics::composer::V2_2::IComposer; class FakeComposerService_2_2 : public IComposer_2_2 { public: explicit FakeComposerService_2_2(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_2(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; }; using IComposer_2_3 = android::hardware::graphics::composer::V2_3::IComposer; class FakeComposerService_2_3 : public IComposer_2_3 { public: explicit FakeComposerService_2_3(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_3(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; Return<void> createClient_2_3(createClient_2_3_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; }; using IComposer_2_4 = android::hardware::graphics::composer::V2_4::IComposer; class FakeComposerService_2_4 : public IComposer_2_4 { public: explicit FakeComposerService(android::sp<ComposerClient>& client); virtual ~FakeComposerService(); explicit FakeComposerService_2_4(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_4(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; Return<void> createClient_2_3(createClient_2_3_cb hidl_cb) override; Return<void> createClient_2_4(createClient_2_4_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; Loading Loading
services/surfaceflinger/tests/fakehwc/Android.bp +5 −2 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ cc_test { ], shared_libs: [ "android.hardware.graphics.composer@2.1", "android.hardware.graphics.composer@2.2", "android.hardware.graphics.composer@2.3", "android.hardware.graphics.composer@2.4", "android.hardware.graphics.composer@2.1-resources", "android.hardware.graphics.mapper@2.0", "android.hardware.graphics.mapper@3.0", Loading Loading @@ -39,8 +42,8 @@ cc_test { "libtrace_proto", ], header_libs: [ "android.hardware.graphics.composer@2.1-command-buffer", "android.hardware.graphics.composer@2.1-hal", "android.hardware.graphics.composer@2.4-command-buffer", "android.hardware.graphics.composer@2.4-hal", "libsurfaceflinger_headers", ], }
services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp +388 −125 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/surfaceflinger/tests/fakehwc/FakeComposerClient.h +186 −56 Original line number Diff line number Diff line Loading @@ -19,10 +19,15 @@ #define HWC2_USE_CPP11 #define HWC2_INCLUDE_STRINGIFICATION #include <composer-hal/2.1/ComposerClient.h> #include <composer-hal/2.2/ComposerClient.h> #include <composer-hal/2.3/ComposerClient.h> #include <composer-hal/2.4/ComposerClient.h> #undef HWC2_USE_CPP11 #undef HWC2_INCLUDE_STRINGIFICATION #include "RenderState.h" #include "MockComposerHal.h" // Needed for display type/ID enums #include <hardware/hwcomposer_defs.h> Loading @@ -30,8 +35,10 @@ #include <chrono> using namespace android::hardware::graphics::composer::V2_1; using namespace android::hardware::graphics::composer::V2_1::hal; using namespace android::hardware::graphics::common; using namespace android::hardware::graphics::composer; using namespace android::hardware::graphics::composer::V2_4; using namespace android::hardware::graphics::composer::V2_4::hal; using namespace android::hardware; using namespace std::chrono_literals; Loading @@ -46,7 +53,6 @@ class SurfaceComposerClient; } // namespace android namespace sftest { // NOTE: The ID's need to be exactly these. VR composer and parts of // the SurfaceFlinger assume the display IDs to have these values // despite the enum being documented as a display type. Loading @@ -59,6 +65,8 @@ public: FakeComposerClient(); virtual ~FakeComposerClient(); void setMockHal(MockComposerHal* mockHal) { mMockHal = mockHal; } bool hasCapability(hwc2_capability_t capability) override; std::string dumpDebugInfo() override; Loading @@ -66,59 +74,178 @@ public: void unregisterEventCallback() override; uint32_t getMaxVirtualDisplayCount() override; Error createVirtualDisplay(uint32_t width, uint32_t height, PixelFormat* format, V2_1::Error createVirtualDisplay(uint32_t width, uint32_t height, V1_0::PixelFormat* format, Display* outDisplay) override; Error destroyVirtualDisplay(Display display) override; Error createLayer(Display display, Layer* outLayer) override; Error destroyLayer(Display display, Layer layer) override; Error getActiveConfig(Display display, Config* outConfig) override; Error getClientTargetSupport(Display display, uint32_t width, uint32_t height, PixelFormat format, Dataspace dataspace) override; Error getColorModes(Display display, hidl_vec<ColorMode>* outModes) override; Error getDisplayAttribute(Display display, Config config, IComposerClient::Attribute attribute, V2_1::Error destroyVirtualDisplay(Display display) override; V2_1::Error createLayer(Display display, Layer* outLayer) override; V2_1::Error destroyLayer(Display display, Layer layer) override; V2_1::Error getActiveConfig(Display display, Config* outConfig) override; V2_1::Error getClientTargetSupport(Display display, uint32_t width, uint32_t height, V1_0::PixelFormat format, V1_0::Dataspace dataspace) override; V2_1::Error getColorModes(Display display, hidl_vec<V1_0::ColorMode>* outModes) override; V2_1::Error getDisplayAttribute(Display display, Config config, V2_1::IComposerClient::Attribute attribute, int32_t* outValue) override; Error getDisplayConfigs(Display display, hidl_vec<Config>* outConfigs) override; Error getDisplayName(Display display, hidl_string* outName) override; Error getDisplayType(Display display, IComposerClient::DisplayType* outType) override; Error getDozeSupport(Display display, bool* outSupport) override; Error getHdrCapabilities(Display display, hidl_vec<Hdr>* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) override; Error setActiveConfig(Display display, Config config) override; Error setColorMode(Display display, ColorMode mode) override; Error setPowerMode(Display display, IComposerClient::PowerMode mode) override; Error setVsyncEnabled(Display display, IComposerClient::Vsync enabled) override; Error setColorTransform(Display display, const float* matrix, int32_t hint) override; Error setClientTarget(Display display, buffer_handle_t target, int32_t acquireFence, V2_1::Error getDisplayConfigs(Display display, hidl_vec<Config>* outConfigs) override; V2_1::Error getDisplayName(Display display, hidl_string* outName) override; V2_1::Error getDisplayType(Display display, IComposerClient::DisplayType* outType) override; V2_1::Error getDozeSupport(Display display, bool* outSupport) override; V2_1::Error getHdrCapabilities(Display display, hidl_vec<V1_0::Hdr>* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) override; V2_1::Error setActiveConfig(Display display, Config config) override; V2_1::Error setColorMode(Display display, V1_0::ColorMode mode) override; V2_1::Error setPowerMode(Display display, V2_1::IComposerClient::PowerMode mode) override; V2_1::Error setVsyncEnabled(Display display, IComposerClient::Vsync enabled) override; V2_1::Error setColorTransform(Display display, const float* matrix, int32_t hint) override; V2_1::Error setClientTarget(Display display, buffer_handle_t target, int32_t acquireFence, int32_t dataspace, const std::vector<hwc_rect_t>& damage) override; Error setOutputBuffer(Display display, buffer_handle_t buffer, int32_t releaseFence) override; Error validateDisplay(Display display, std::vector<Layer>* outChangedLayers, V2_1::Error setOutputBuffer(Display display, buffer_handle_t buffer, int32_t releaseFence) override; V2_1::Error validateDisplay(Display display, std::vector<Layer>* outChangedLayers, std::vector<IComposerClient::Composition>* outCompositionTypes, uint32_t* outDisplayRequestMask, std::vector<Layer>* outRequestedLayers, uint32_t* outDisplayRequestMask, std::vector<Layer>* outRequestedLayers, std::vector<uint32_t>* outRequestMasks) override; Error acceptDisplayChanges(Display display) override; Error presentDisplay(Display display, int32_t* outPresentFence, std::vector<Layer>* outLayers, V2_1::Error acceptDisplayChanges(Display display) override; V2_1::Error presentDisplay(Display display, int32_t* outPresentFence, std::vector<Layer>* outLayers, std::vector<int32_t>* outReleaseFences) override; Error setLayerCursorPosition(Display display, Layer layer, int32_t x, int32_t y) override; Error setLayerBuffer(Display display, Layer layer, buffer_handle_t buffer, V2_1::Error setLayerCursorPosition(Display display, Layer layer, int32_t x, int32_t y) override; V2_1::Error setLayerBuffer(Display display, Layer layer, buffer_handle_t buffer, int32_t acquireFence) override; Error setLayerSurfaceDamage(Display display, Layer layer, V2_1::Error setLayerSurfaceDamage(Display display, Layer layer, const std::vector<hwc_rect_t>& damage) override; Error setLayerBlendMode(Display display, Layer layer, int32_t mode) override; Error setLayerColor(Display display, Layer layer, IComposerClient::Color color) override; Error setLayerCompositionType(Display display, Layer layer, int32_t type) override; Error setLayerDataspace(Display display, Layer layer, int32_t dataspace) override; Error setLayerDisplayFrame(Display display, Layer layer, const hwc_rect_t& frame) override; Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) override; Error setLayerSidebandStream(Display display, Layer layer, buffer_handle_t stream) override; Error setLayerSourceCrop(Display display, Layer layer, const hwc_frect_t& crop) override; Error setLayerTransform(Display display, Layer layer, int32_t transform) override; Error setLayerVisibleRegion(Display display, Layer layer, V2_1::Error setLayerBlendMode(Display display, Layer layer, int32_t mode) override; V2_1::Error setLayerColor(Display display, Layer layer, IComposerClient::Color color) override; V2_1::Error setLayerCompositionType(Display display, Layer layer, int32_t type) override; V2_1::Error setLayerDataspace(Display display, Layer layer, int32_t dataspace) override; V2_1::Error setLayerDisplayFrame(Display display, Layer layer, const hwc_rect_t& frame) override; V2_1::Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) override; V2_1::Error setLayerSidebandStream(Display display, Layer layer, buffer_handle_t stream) override; V2_1::Error setLayerSourceCrop(Display display, Layer layer, const hwc_frect_t& crop) override; V2_1::Error setLayerTransform(Display display, Layer layer, int32_t transform) override; V2_1::Error setLayerVisibleRegion(Display display, Layer layer, const std::vector<hwc_rect_t>& visible) override; Error setLayerZOrder(Display display, Layer layer, uint32_t z) override; V2_1::Error setLayerZOrder(Display display, Layer layer, uint32_t z) override; // Composer 2.2 V2_1::Error getPerFrameMetadataKeys( Display display, std::vector<V2_2::IComposerClient::PerFrameMetadataKey>* outKeys) override; V2_1::Error setLayerPerFrameMetadata( Display display, Layer layer, const std::vector<V2_2::IComposerClient::PerFrameMetadata>& metadata) override; V2_1::Error getReadbackBufferAttributes( Display display, graphics::common::V1_1::PixelFormat* outFormat, graphics::common::V1_1::Dataspace* outDataspace) override; V2_1::Error setReadbackBuffer(Display display, const native_handle_t* bufferHandle, android::base::unique_fd fenceFd) override; V2_1::Error getReadbackBufferFence(Display display, android::base::unique_fd* outFenceFd) override; V2_1::Error createVirtualDisplay_2_2(uint32_t width, uint32_t height, graphics::common::V1_1::PixelFormat* format, Display* outDisplay) override; V2_1::Error getClientTargetSupport_2_2(Display display, uint32_t width, uint32_t height, graphics::common::V1_1::PixelFormat format, graphics::common::V1_1::Dataspace dataspace) override; V2_1::Error setPowerMode_2_2(Display display, V2_2::IComposerClient::PowerMode mode) override; V2_1::Error setLayerFloatColor(Display display, Layer layer, V2_2::IComposerClient::FloatColor color) override; V2_1::Error getColorModes_2_2(Display display, hidl_vec<graphics::common::V1_1::ColorMode>* outModes) override; V2_1::Error getRenderIntents( Display display, graphics::common::V1_1::ColorMode mode, std::vector<graphics::common::V1_1::RenderIntent>* outIntents) override; V2_1::Error setColorMode_2_2(Display display, graphics::common::V1_1::ColorMode mode, graphics::common::V1_1::RenderIntent intent) override; std::array<float, 16> getDataspaceSaturationMatrix( graphics::common::V1_1::Dataspace dataspace) override; // Composer 2.3 V2_1::Error getPerFrameMetadataKeys_2_3( Display display, std::vector<V2_3::IComposerClient::PerFrameMetadataKey>* outKeys) override; V2_1::Error setColorMode_2_3(Display display, graphics::common::V1_2::ColorMode mode, graphics::common::V1_1::RenderIntent intent) override; V2_1::Error getRenderIntents_2_3( Display display, graphics::common::V1_2::ColorMode mode, std::vector<graphics::common::V1_1::RenderIntent>* outIntents) override; V2_1::Error getColorModes_2_3(Display display, hidl_vec<graphics::common::V1_2::ColorMode>* outModes) override; V2_1::Error getClientTargetSupport_2_3(Display display, uint32_t width, uint32_t height, graphics::common::V1_2::PixelFormat format, graphics::common::V1_2::Dataspace dataspace) override; V2_1::Error getReadbackBufferAttributes_2_3( Display display, graphics::common::V1_2::PixelFormat* outFormat, graphics::common::V1_2::Dataspace* outDataspace) override; V2_1::Error getHdrCapabilities_2_3(Display display, hidl_vec<graphics::common::V1_2::Hdr>* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) override; V2_1::Error setLayerPerFrameMetadata_2_3( Display display, Layer layer, const std::vector<V2_3::IComposerClient::PerFrameMetadata>& metadata) override; V2_1::Error getDisplayIdentificationData(Display display, uint8_t* outPort, std::vector<uint8_t>* outData) override; V2_1::Error setLayerColorTransform(Display display, Layer layer, const float* matrix) override; V2_1::Error getDisplayedContentSamplingAttributes( uint64_t display, graphics::common::V1_2::PixelFormat& format, graphics::common::V1_2::Dataspace& dataspace, hidl_bitfield<V2_3::IComposerClient::FormatColorComponent>& componentMask) override; V2_1::Error setDisplayedContentSamplingEnabled( uint64_t display, V2_3::IComposerClient::DisplayedContentSampling enable, hidl_bitfield<V2_3::IComposerClient::FormatColorComponent> componentMask, uint64_t maxFrames) override; V2_1::Error getDisplayedContentSample(uint64_t display, uint64_t maxFrames, uint64_t timestamp, uint64_t& frameCount, hidl_vec<uint64_t>& sampleComponent0, hidl_vec<uint64_t>& sampleComponent1, hidl_vec<uint64_t>& sampleComponent2, hidl_vec<uint64_t>& sampleComponent3) override; V2_1::Error getDisplayCapabilities( Display display, std::vector<V2_3::IComposerClient::DisplayCapability>* outCapabilities) override; V2_1::Error setLayerPerFrameMetadataBlobs( Display display, Layer layer, std::vector<V2_3::IComposerClient::PerFrameMetadataBlob>& blobs) override; V2_1::Error getDisplayBrightnessSupport(Display display, bool* outSupport) override; V2_1::Error setDisplayBrightness(Display display, float brightness) override; // Composer 2.4 void registerEventCallback_2_4(EventCallback_2_4* callback) override; void unregisterEventCallback_2_4() override; V2_4::Error getDisplayCapabilities_2_4( Display display, std::vector<V2_4::IComposerClient::DisplayCapability>* outCapabilities) override; V2_4::Error getDisplayConnectionType( Display display, V2_4::IComposerClient::DisplayConnectionType* outType) override; V2_4::Error getDisplayAttribute_2_4(Display display, Config config, IComposerClient::Attribute attribute, int32_t* outValue) override; V2_4::Error getDisplayVsyncPeriod(Display display, V2_4::VsyncPeriodNanos* outVsyncPeriod) override; V2_4::Error setActiveConfigWithConstraints( Display display, Config config, const V2_4::IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, VsyncPeriodChangeTimeline* outTimeline) override; void setClient(ComposerClient* client); Loading Loading @@ -150,6 +277,7 @@ private: LayerImpl& getLayerImpl(Layer handle); EventCallback* mEventCallback; EventCallback_2_4* mEventCallback_2_4; Config mCurrentConfig; bool mVsyncEnabled; std::vector<std::unique_ptr<LayerImpl>> mLayers; Loading @@ -159,6 +287,8 @@ private: android::sp<android::SurfaceComposerClient> mSurfaceComposer; // For VSync injections mutable android::Mutex mStateMutex; mutable android::Condition mFramesAvailable; MockComposerHal* mMockHal = nullptr; }; } // namespace sftest
services/surfaceflinger/tests/fakehwc/FakeComposerService.cpp +122 −6 Original line number Diff line number Diff line Loading @@ -22,34 +22,150 @@ #include "FakeComposerService.h" using namespace android::hardware; using namespace android::hardware::graphics::composer; namespace sftest { FakeComposerService::FakeComposerService(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_1::FakeComposerService_2_1(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService::~FakeComposerService() { FakeComposerService_2_1::~FakeComposerService_2_1() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService::getCapabilities(getCapabilities_cb hidl_cb) { Return<void> FakeComposerService_2_1::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { Return<void> FakeComposerService_2_1::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService::createClient(createClient_cb hidl_cb) { Return<void> FakeComposerService_2_1::createClient(createClient_cb hidl_cb) { ALOGI("FakeComposerService::createClient %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(Error::NONE, mClient); hidl_cb(V2_1::Error::NONE, mClient); return Void(); } FakeComposerService_2_2::FakeComposerService_2_2(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_2::~FakeComposerService_2_2() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService_2_2::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService_2_2::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService_2_2::createClient(createClient_cb hidl_cb) { ALOGI("FakeComposerService::createClient %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::NONE, mClient); return Void(); } FakeComposerService_2_3::FakeComposerService_2_3(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_3::~FakeComposerService_2_3() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService_2_3::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService_2_3::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService_2_3::createClient(createClient_cb hidl_cb) { LOG_ALWAYS_FATAL("createClient called on FakeComposerService_2_3"); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::UNSUPPORTED, nullptr); return Void(); } Return<void> FakeComposerService_2_3::createClient_2_3(createClient_2_3_cb hidl_cb) { ALOGI("FakeComposerService_2_3::createClient_2_3 %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::NONE, mClient); return Void(); } FakeComposerService_2_4::FakeComposerService_2_4(android::sp<ComposerClient>& client) : mClient(client) {} FakeComposerService_2_4::~FakeComposerService_2_4() { ALOGI("Maybe killing client %p", mClient.get()); // Rely on sp to kill the client. } Return<void> FakeComposerService_2_4::getCapabilities(getCapabilities_cb hidl_cb) { ALOGI("FakeComposerService::getCapabilities"); hidl_cb(hidl_vec<Capability>()); return Void(); } Return<void> FakeComposerService_2_4::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) { ALOGI("FakeComposerService::dumpDebugInfo"); hidl_cb(hidl_string()); return Void(); } Return<void> FakeComposerService_2_4::createClient(createClient_cb hidl_cb) { LOG_ALWAYS_FATAL("createClient called on FakeComposerService_2_4"); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::UNSUPPORTED, nullptr); return Void(); } Return<void> FakeComposerService_2_4::createClient_2_3(createClient_2_3_cb hidl_cb) { LOG_ALWAYS_FATAL("createClient_2_3 called on FakeComposerService_2_4"); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_1::Error::UNSUPPORTED, nullptr); return Void(); } Return<void> FakeComposerService_2_4::createClient_2_4(createClient_2_4_cb hidl_cb) { ALOGI("FakeComposerService_2_4::createClient_2_4 %p", mClient.get()); if (!mClient->init()) { LOG_ALWAYS_FATAL("failed to initialize ComposerClient"); } hidl_cb(V2_4::Error::NONE, mClient); return Void(); } Loading
services/surfaceflinger/tests/fakehwc/FakeComposerService.h +57 −5 Original line number Diff line number Diff line Loading @@ -16,22 +16,74 @@ #pragma once #include <android/hardware/graphics/composer/2.4/IComposer.h> #include <composer-hal/2.1/ComposerClient.h> #include <composer-hal/2.2/ComposerClient.h> #include <composer-hal/2.3/ComposerClient.h> #include <composer-hal/2.4/ComposerClient.h> using namespace android::hardware::graphics::composer::V2_1; using namespace android::hardware::graphics::composer::V2_1::hal; using android::hardware::Return; using ComposerClient = android::hardware::graphics::composer::V2_4::hal::ComposerClient; namespace sftest { class FakeComposerService : public IComposer { using IComposer_2_1 = android::hardware::graphics::composer::V2_1::IComposer; class FakeComposerService_2_1 : public IComposer_2_1 { public: explicit FakeComposerService_2_1(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_1(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; }; using IComposer_2_2 = android::hardware::graphics::composer::V2_2::IComposer; class FakeComposerService_2_2 : public IComposer_2_2 { public: explicit FakeComposerService_2_2(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_2(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; }; using IComposer_2_3 = android::hardware::graphics::composer::V2_3::IComposer; class FakeComposerService_2_3 : public IComposer_2_3 { public: explicit FakeComposerService_2_3(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_3(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; Return<void> createClient_2_3(createClient_2_3_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; }; using IComposer_2_4 = android::hardware::graphics::composer::V2_4::IComposer; class FakeComposerService_2_4 : public IComposer_2_4 { public: explicit FakeComposerService(android::sp<ComposerClient>& client); virtual ~FakeComposerService(); explicit FakeComposerService_2_4(android::sp<ComposerClient>& client); virtual ~FakeComposerService_2_4(); Return<void> getCapabilities(getCapabilities_cb hidl_cb) override; Return<void> dumpDebugInfo(dumpDebugInfo_cb hidl_cb) override; Return<void> createClient(createClient_cb hidl_cb) override; Return<void> createClient_2_3(createClient_2_3_cb hidl_cb) override; Return<void> createClient_2_4(createClient_2_4_cb hidl_cb) override; private: android::sp<ComposerClient> mClient; Loading