FakeComposerClient.h revision 41b98d41f9f4e94a1a9a31960a317649cbec3b09
1a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita/* 2a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * Copyright 2017 The Android Open Source Project 3a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * 4a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * Licensed under the Apache License, Version 2.0 (the "License"); 5a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * you may not use this file except in compliance with the License. 6a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * You may obtain a copy of the License at 7a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * 8a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * http://www.apache.org/licenses/LICENSE-2.0 9a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * 10a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * Unless required by applicable law or agreed to in writing, software 11a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * distributed under the License is distributed on an "AS IS" BASIS, 12a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * See the License for the specific language governing permissions and 14a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita * limitations under the License. 15a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita */ 16a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 17a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita#pragma once 18a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 19a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita#include "ComposerClient.h" 20a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita#include "RenderState.h" 21a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 22a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita#include <utils/Condition.h> 23a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 24a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita#include <chrono> 25a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 26a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitausing namespace android::hardware::graphics::composer::V2_1; 27a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitausing namespace android::hardware::graphics::composer::V2_1::implementation; 28a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitausing namespace android::hardware; 29a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitausing namespace std::chrono_literals; 30a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 31a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitanamespace { 32a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitaclass LayerImpl; 33a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitaclass Frame; 34a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitaclass DelayedEventGenerator; 35a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita} // namespace 36a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 37a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitanamespace android { 38a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitaclass SurfaceComposerClient; 39a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita} // namespace android 40a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 41a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitanamespace sftest { 42a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 43a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitaclass FakeComposerClient : public ComposerBase { 44a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitapublic: 45a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita FakeComposerClient(); 46a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita virtual ~FakeComposerClient(); 47a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 4841b98d41f9f4e94a1a9a31960a317649cbec3b09Chia-I Wu bool hasCapability(hwc2_capability_t capability) override; 4941b98d41f9f4e94a1a9a31960a317649cbec3b09Chia-I Wu 50a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void removeClient() override; 51a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void enableCallback(bool enable) override; 52a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita uint32_t getMaxVirtualDisplayCount() override; 53a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error createVirtualDisplay(uint32_t width, uint32_t height, PixelFormat* format, 54a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Display* outDisplay) override; 55a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error destroyVirtualDisplay(Display display) override; 56a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error createLayer(Display display, Layer* outLayer) override; 57a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error destroyLayer(Display display, Layer layer) override; 58a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 59a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getActiveConfig(Display display, Config* outConfig) override; 60a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getClientTargetSupport(Display display, uint32_t width, uint32_t height, 61a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita PixelFormat format, Dataspace dataspace) override; 62a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getColorModes(Display display, hidl_vec<ColorMode>* outModes) override; 63a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getDisplayAttribute(Display display, Config config, IComposerClient::Attribute attribute, 64a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita int32_t* outValue) override; 65a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getDisplayConfigs(Display display, hidl_vec<Config>* outConfigs) override; 66a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getDisplayName(Display display, hidl_string* outName) override; 67a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getDisplayType(Display display, IComposerClient::DisplayType* outType) override; 68a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getDozeSupport(Display display, bool* outSupport) override; 69a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error getHdrCapabilities(Display display, hidl_vec<Hdr>* outTypes, float* outMaxLuminance, 70a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita float* outMaxAverageLuminance, float* outMinLuminance) override; 71a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 72a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setActiveConfig(Display display, Config config) override; 73a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setColorMode(Display display, ColorMode mode) override; 74a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setPowerMode(Display display, IComposerClient::PowerMode mode) override; 75a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setVsyncEnabled(Display display, IComposerClient::Vsync enabled) override; 76a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 77a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setColorTransform(Display display, const float* matrix, int32_t hint) override; 78a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setClientTarget(Display display, buffer_handle_t target, int32_t acquireFence, 79a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita int32_t dataspace, const std::vector<hwc_rect_t>& damage) override; 80a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setOutputBuffer(Display display, buffer_handle_t buffer, int32_t releaseFence) override; 81a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error validateDisplay(Display display, std::vector<Layer>* outChangedLayers, 82a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::vector<IComposerClient::Composition>* outCompositionTypes, 83a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita uint32_t* outDisplayRequestMask, std::vector<Layer>* outRequestedLayers, 84a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::vector<uint32_t>* outRequestMasks) override; 85a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error acceptDisplayChanges(Display display) override; 86a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error presentDisplay(Display display, int32_t* outPresentFence, std::vector<Layer>* outLayers, 87a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::vector<int32_t>* outReleaseFences) override; 88a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 89a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerCursorPosition(Display display, Layer layer, int32_t x, int32_t y) override; 90a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerBuffer(Display display, Layer layer, buffer_handle_t buffer, 91a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita int32_t acquireFence) override; 92a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerSurfaceDamage(Display display, Layer layer, 93a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita const std::vector<hwc_rect_t>& damage) override; 94a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerBlendMode(Display display, Layer layer, int32_t mode) override; 95a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerColor(Display display, Layer layer, IComposerClient::Color color) override; 96a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerCompositionType(Display display, Layer layer, int32_t type) override; 97a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerDataspace(Display display, Layer layer, int32_t dataspace) override; 98a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerDisplayFrame(Display display, Layer layer, const hwc_rect_t& frame) override; 99a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) override; 100a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerSidebandStream(Display display, Layer layer, buffer_handle_t stream) override; 101a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerSourceCrop(Display display, Layer layer, const hwc_frect_t& crop) override; 102a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerTransform(Display display, Layer layer, int32_t transform) override; 103a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerVisibleRegion(Display display, Layer layer, 104a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita const std::vector<hwc_rect_t>& visible) override; 105a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Error setLayerZOrder(Display display, Layer layer, uint32_t z) override; 106a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 107a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void setClient(ComposerClient* client); 108a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 109a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void requestVSync(uint64_t vsyncTime = 0); 110a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita // We don't want tests hanging, so always use a timeout. Remember 111a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita // to always check the number of frames with test ASSERT_! 112a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita // Wait until next frame is rendered after requesting vsync. 113a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void runVSyncAndWait(std::chrono::nanoseconds maxWait = 100ms); 114a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void runVSyncAfter(std::chrono::nanoseconds wait); 115a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 116a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita int getFrameCount() const; 117a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita // We don't want tests hanging, so always use a timeout. Remember 118a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita // to always check the number of frames with test ASSERT_! 119a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void waitUntilFrame(int targetFrame, std::chrono::nanoseconds maxWait = 100ms) const; 120a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::vector<RenderState> getFrameRects(int frame) const; 121a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::vector<RenderState> getLatestFrame() const; 122a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void clearFrames(); 123a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 124a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void onSurfaceFlingerStart(); 125a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void onSurfaceFlingerStop(); 126a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 127a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita int getLayerCount() const; 128a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Layer getLayer(size_t index) const; 129a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 130a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita void hotplugDisplay(Display display, IComposerCallback::Connection state); 131a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 132a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raitaprivate: 133a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita LayerImpl& getLayerImpl(Layer handle); 134a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 135a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita bool mCallbacksOn; 136a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita ComposerClient* mClient; 137a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita Config mCurrentConfig; 138a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita bool mVsyncEnabled; 139a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::vector<std::unique_ptr<LayerImpl>> mLayers; 140a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::vector<std::unique_ptr<Frame>> mFrames; 141a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita // Using a pointer to hide the implementation into the CPP file. 142a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita std::unique_ptr<DelayedEventGenerator> mDelayedEventGenerator; 143a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita android::sp<android::SurfaceComposerClient> mSurfaceComposer; // For VSync injections 144a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita mutable android::Mutex mStateMutex; 145a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita mutable android::Condition mFramesAvailable; 146a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita}; 147a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita 148a099a24c93bfa599fc5c36a647e946c26f68514fKalle Raita} // namespace sftest 149