Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 1 | /* |
Gousemoodhin Nadaf | 087c310 | 2019-01-07 19:34:56 +0530 | [diff] [blame] | 2 | * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved. |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 3 | * Not a Contribution. |
| 4 | * |
| 5 | * Copyright 2015 The Android Open Source Project |
| 6 | * |
| 7 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | * you may not use this file except in compliance with the License. |
| 9 | * You may obtain a copy of the License at |
| 10 | * |
| 11 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 12 | * |
| 13 | * Unless required by applicable law or agreed to in writing, software |
| 14 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | * See the License for the specific language governing permissions and |
| 17 | * limitations under the License. |
| 18 | */ |
| 19 | |
| 20 | #ifndef __HWC_DISPLAY_H__ |
| 21 | #define __HWC_DISPLAY_H__ |
| 22 | |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 23 | #include <QService.h> |
Gousemoodhin Nadaf | 0e56687 | 2019-05-13 16:14:54 +0530 | [diff] [blame] | 24 | #include <android/hardware/graphics/common/1.2/types.h> |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 25 | #include <core/core_interface.h> |
| 26 | #include <hardware/hwcomposer.h> |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 27 | #include <private/color_params.h> |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 28 | #include <qdMetaData.h> |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 29 | #include <sys/stat.h> |
Lakshmi Narayana Kalavala | 25fe12c | 2019-12-11 20:44:55 -0800 | [diff] [blame] | 30 | #include <algorithm> |
| 31 | #include <bitset> |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 32 | #include <map> |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 33 | #include <queue> |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 34 | #include <set> |
Naseer Ahmed | 2a3c7d9 | 2016-05-17 18:38:54 -0400 | [diff] [blame] | 35 | #include <string> |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 36 | #include <utility> |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 37 | #include <vector> |
Lakshmi Narayana Kalavala | 25fe12c | 2019-12-11 20:44:55 -0800 | [diff] [blame] | 38 | #include "display_null.h" |
| 39 | #include "histogram_collector.h" |
Naseer Ahmed | 4275221 | 2017-01-27 17:32:21 -0500 | [diff] [blame] | 40 | #include "hwc_buffer_allocator.h" |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 41 | #include "hwc_callbacks.h" |
Varun Arora | 7c8ee54 | 2018-05-01 20:58:16 -0700 | [diff] [blame] | 42 | #include "hwc_display_event_handler.h" |
Lakshmi Narayana Kalavala | 25fe12c | 2019-12-11 20:44:55 -0800 | [diff] [blame] | 43 | #include "hwc_layers.h" |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 44 | |
Gousemoodhin Nadaf | 0e56687 | 2019-05-13 16:14:54 +0530 | [diff] [blame] | 45 | using android::hardware::graphics::common::V1_2::ColorMode; |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 46 | using android::hardware::graphics::common::V1_1::Dataspace; |
| 47 | using android::hardware::graphics::common::V1_1::RenderIntent; |
Gousemoodhin Nadaf | 4b096d0 | 2019-10-24 15:39:59 +0530 | [diff] [blame] | 48 | using android::hardware::graphics::common::V1_2::Hdr; |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 49 | |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 50 | namespace sdm { |
| 51 | |
Arun Kumar K.R | 51be3d1 | 2017-03-31 19:54:38 -0700 | [diff] [blame] | 52 | class HWCToneMapper; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 53 | |
Xu Yang | 47f4409 | 2019-02-13 14:09:53 +0800 | [diff] [blame] | 54 | /* max customer extended render intent */ |
| 55 | #define MAX_EXTENDED_RENDER_INTENT 0x1ff |
| 56 | |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 57 | // Subclasses set this to their type. This has to be different from DisplayType. |
| 58 | // This is to avoid RTTI and dynamic_cast |
| 59 | enum DisplayClass { |
Dileep Marchya | f3ce11f | 2018-04-30 23:35:46 +0530 | [diff] [blame] | 60 | DISPLAY_CLASS_BUILTIN, |
| 61 | DISPLAY_CLASS_PLUGGABLE, |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 62 | DISPLAY_CLASS_VIRTUAL, |
| 63 | DISPLAY_CLASS_NULL |
| 64 | }; |
| 65 | |
Sushil Chauhan | 0a1b15d | 2019-08-23 12:58:18 -0700 | [diff] [blame] | 66 | enum { |
| 67 | INPUT_LAYER_DUMP, |
| 68 | OUTPUT_LAYER_DUMP, |
| 69 | }; |
| 70 | |
Ramkumar Radhakrishnan | a38b760 | 2018-03-15 14:49:52 -0700 | [diff] [blame] | 71 | enum SecureSessionType { |
| 72 | kSecureDisplay, |
| 73 | kSecureCamera, |
| 74 | kSecureMax, |
| 75 | }; |
| 76 | |
Dileep Marchya | cb2a3a9 | 2019-06-21 17:30:50 +0530 | [diff] [blame] | 77 | // CWB client currently using the block |
| 78 | enum CWBClient { |
| 79 | kCWBClientNone, // No client connected |
| 80 | kCWBClientFrameDump, // Dump to file |
| 81 | kCWBClientColor, // Internal client i.e. Color Manager |
| 82 | kCWBClientExternal, // External client calling through private APIs |
| 83 | kCWBClientComposer, // Client to HWC i.e. SurfaceFlinger |
| 84 | }; |
| 85 | |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 86 | class HWCColorMode { |
| 87 | public: |
| 88 | explicit HWCColorMode(DisplayInterface *display_intf); |
| 89 | ~HWCColorMode() {} |
| 90 | HWC2::Error Init(); |
| 91 | HWC2::Error DeInit(); |
Naseer Ahmed | 913502b | 2017-04-18 16:05:05 -0400 | [diff] [blame] | 92 | void Dump(std::ostringstream* os); |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 93 | uint32_t GetColorModeCount(); |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 94 | uint32_t GetRenderIntentCount(ColorMode mode); |
| 95 | HWC2::Error GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes); |
| 96 | HWC2::Error GetRenderIntents(ColorMode mode, uint32_t *out_num_intents, RenderIntent *out_modes); |
| 97 | HWC2::Error SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent); |
Naseer Ahmed | 6776dae | 2017-05-09 11:49:41 -0400 | [diff] [blame] | 98 | HWC2::Error SetColorModeById(int32_t color_mode_id); |
Xu Yang | 84e6141 | 2018-12-06 14:52:16 +0800 | [diff] [blame] | 99 | HWC2::Error SetColorModeFromClientApi(std::string mode_string); |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 100 | HWC2::Error SetColorTransform(const float *matrix, android_color_transform_t hint); |
Ch Ganesh Kumar | 5d43ff6 | 2017-10-13 19:01:47 +0530 | [diff] [blame] | 101 | HWC2::Error RestoreColorTransform(); |
Gousemoodhin Nadaf | 839f29d | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 102 | ColorMode GetCurrentColorMode() { return current_color_mode_; } |
Xu Yang | 84e6141 | 2018-12-06 14:52:16 +0800 | [diff] [blame] | 103 | HWC2::Error ApplyCurrentColorModeWithRenderIntent(bool hdr_present); |
Sushil Chauhan | 8008d60 | 2018-09-04 14:43:27 -0700 | [diff] [blame] | 104 | HWC2::Error CacheColorModeWithRenderIntent(ColorMode mode, RenderIntent intent); |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 105 | |
| 106 | private: |
| 107 | static const uint32_t kColorTransformMatrixCount = 16; |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 108 | void PopulateColorModes(); |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 109 | template <class T> |
| 110 | void CopyColorTransformMatrix(const T *input_matrix, double *output_matrix) { |
| 111 | for (uint32_t i = 0; i < kColorTransformMatrixCount; i++) { |
| 112 | output_matrix[i] = static_cast<double>(input_matrix[i]); |
| 113 | } |
| 114 | } |
Sushil Chauhan | 8008d60 | 2018-09-04 14:43:27 -0700 | [diff] [blame] | 115 | HWC2::Error ValidateColorModeWithRenderIntent(ColorMode mode, RenderIntent intent); |
Xu Yang | 84e6141 | 2018-12-06 14:52:16 +0800 | [diff] [blame] | 116 | HWC2::Error SetPreferredColorModeInternal(const std::string &mode_string, bool from_client, |
| 117 | ColorMode *color_mode, DynamicRangeType *dynamic_range); |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 118 | |
| 119 | DisplayInterface *display_intf_ = NULL; |
Sushil Chauhan | 7cd110d | 2018-08-24 17:17:55 -0700 | [diff] [blame] | 120 | bool apply_mode_ = false; |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 121 | ColorMode current_color_mode_ = ColorMode::NATIVE; |
| 122 | RenderIntent current_render_intent_ = RenderIntent::COLORIMETRIC; |
Xu Yang | 84e6141 | 2018-12-06 14:52:16 +0800 | [diff] [blame] | 123 | DynamicRangeType curr_dynamic_range_ = kSdrType; |
| 124 | typedef std::map<DynamicRangeType, std::string> DynamicRangeMap; |
| 125 | typedef std::map<RenderIntent, DynamicRangeMap> RenderIntentMap; |
| 126 | // Initialize supported mode/render intent/dynamic range combination |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 127 | std::map<ColorMode, RenderIntentMap> color_mode_map_ = {}; |
Naseer Ahmed | 7dcd137 | 2017-05-19 18:06:51 -0400 | [diff] [blame] | 128 | double color_matrix_[kColorTransformMatrixCount] = { 1.0, 0.0, 0.0, 0.0, \ |
| 129 | 0.0, 1.0, 0.0, 0.0, \ |
| 130 | 0.0, 0.0, 1.0, 0.0, \ |
| 131 | 0.0, 0.0, 0.0, 1.0 }; |
Xu Yang | 84e6141 | 2018-12-06 14:52:16 +0800 | [diff] [blame] | 132 | std::map<ColorMode, DynamicRangeMap> preferred_mode_ = {}; |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 133 | }; |
| 134 | |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 135 | class HWCDisplay : public DisplayEventHandler { |
| 136 | public: |
Dileep Marchya | 6860b2b | 2017-04-07 15:56:47 +0530 | [diff] [blame] | 137 | enum DisplayStatus { |
| 138 | kDisplayStatusInvalid = -1, |
| 139 | kDisplayStatusOffline, |
| 140 | kDisplayStatusOnline, |
| 141 | kDisplayStatusPause, |
| 142 | kDisplayStatusResume, |
| 143 | }; |
| 144 | |
Sushil Chauhan | e3a9fd0 | 2017-10-12 18:00:05 -0700 | [diff] [blame] | 145 | enum DisplayValidateState { |
| 146 | kNormalValidate, |
| 147 | kInternalValidate, |
| 148 | kSkipValidate, |
| 149 | }; |
| 150 | |
Srinivas Pullakavi | 3c4337f | 2019-07-03 11:24:31 +0530 | [diff] [blame] | 151 | struct HWCLayerStack { |
| 152 | HWCLayer *client_target = nullptr; // Also known as framebuffer target |
| 153 | std::map<hwc2_layer_t, HWCLayer *> layer_map; // Look up by Id - TODO |
| 154 | std::multiset<HWCLayer *, SortLayersByZ> layer_set; // Maintain a set sorted by Z |
| 155 | }; |
| 156 | |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 157 | virtual ~HWCDisplay() {} |
| 158 | virtual int Init(); |
| 159 | virtual int Deinit(); |
| 160 | |
| 161 | // Framebuffer configurations |
| 162 | virtual void SetIdleTimeoutMs(uint32_t timeout_ms); |
Sushil Chauhan | 267a619 | 2018-06-06 18:41:47 -0700 | [diff] [blame] | 163 | virtual HWC2::Error SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type, |
| 164 | int32_t format, bool post_processed); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 165 | virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages); |
Arun Kumar K.R | 17bbd04 | 2016-06-07 17:38:02 -0700 | [diff] [blame] | 166 | virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) { |
| 167 | return kErrorNotSupported; |
| 168 | } |
Varun Arora | f027a22 | 2018-11-14 17:38:16 -0800 | [diff] [blame] | 169 | virtual HWC2::PowerMode GetCurrentPowerMode(); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 170 | virtual int SetFrameBufferResolution(uint32_t x_pixels, uint32_t y_pixels); |
| 171 | virtual void GetFrameBufferResolution(uint32_t *x_pixels, uint32_t *y_pixels); |
Dileep Marchya | 6860b2b | 2017-04-07 15:56:47 +0530 | [diff] [blame] | 172 | virtual int SetDisplayStatus(DisplayStatus display_status); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 173 | virtual int OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level); |
| 174 | virtual int Perform(uint32_t operation, ...); |
Ramkumar Radhakrishnan | a38b760 | 2018-03-15 14:49:52 -0700 | [diff] [blame] | 175 | virtual int HandleSecureSession(const std::bitset<kSecureMax> &secure_sessions, |
| 176 | bool *power_on_pending); |
| 177 | virtual int GetActiveSecureSession(std::bitset<kSecureMax> *secure_sessions); |
Arun Kumar K.R | 8da7f50 | 2016-06-07 17:45:50 -0700 | [diff] [blame] | 178 | virtual DisplayError SetMixerResolution(uint32_t width, uint32_t height); |
| 179 | virtual DisplayError GetMixerResolution(uint32_t *width, uint32_t *height); |
| 180 | virtual void GetPanelResolution(uint32_t *width, uint32_t *height); |
Saurabh Shah | 9c224a3 | 2017-11-09 12:17:44 -0800 | [diff] [blame] | 181 | virtual std::string Dump(); |
Gurpreet Singh Dhami | 1207e46 | 2018-12-27 20:02:02 -0500 | [diff] [blame] | 182 | virtual DisplayError TeardownConcurrentWriteback(void) { |
| 183 | return kErrorNotSupported; |
| 184 | } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 185 | |
| 186 | // Captures frame output in the buffer specified by output_buffer_info. The API is |
| 187 | // non-blocking and the client is expected to check operation status later on. |
| 188 | // Returns -1 if the input is invalid. |
| 189 | virtual int FrameCaptureAsync(const BufferInfo &output_buffer_info, bool post_processed) { |
| 190 | return -1; |
| 191 | } |
Sushil Chauhan | 1d3b90c | 2018-12-11 16:52:35 -0800 | [diff] [blame] | 192 | // Returns the status of frame capture operation requested with FrameCaptureAsync(). |
| 193 | // -EAGAIN : No status obtain yet, call API again after another frame. |
| 194 | // < 0 : Operation happened but failed. |
| 195 | // 0 : Success. |
| 196 | virtual int GetFrameCaptureStatus() { return -EAGAIN; } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 197 | |
Alan Kwong | 2e13633 | 2016-08-16 07:50:16 -0400 | [diff] [blame] | 198 | virtual DisplayError SetDetailEnhancerConfig(const DisplayDetailEnhancerData &de_data) { |
| 199 | return kErrorNotSupported; |
| 200 | } |
Sushil Chauhan | 0652158 | 2018-03-19 14:00:23 -0700 | [diff] [blame] | 201 | virtual HWC2::Error SetReadbackBuffer(const native_handle_t *buffer, int32_t acquire_fence, |
Dileep Marchya | cb2a3a9 | 2019-06-21 17:30:50 +0530 | [diff] [blame] | 202 | bool post_processed_output, CWBClient client) { |
Sushil Chauhan | 0652158 | 2018-03-19 14:00:23 -0700 | [diff] [blame] | 203 | return HWC2::Error::Unsupported; |
| 204 | } |
| 205 | virtual HWC2::Error GetReadbackBufferFence(int32_t *release_fence) { |
| 206 | return HWC2::Error::Unsupported; |
| 207 | } |
Alan Kwong | 2e13633 | 2016-08-16 07:50:16 -0400 | [diff] [blame] | 208 | |
Yuchao Ma | 577f0f7 | 2018-07-09 11:20:00 +0800 | [diff] [blame] | 209 | virtual HWC2::Error SetDisplayDppsAdROI(uint32_t h_start, uint32_t h_end, |
| 210 | uint32_t v_start, uint32_t v_end, |
| 211 | uint32_t factor_in, uint32_t factor_out) { |
| 212 | return HWC2::Error::Unsupported; |
| 213 | } |
Xu Yang | 9dacc87 | 2018-12-25 11:04:28 +0800 | [diff] [blame] | 214 | virtual HWC2::Error SetFrameTriggerMode(uint32_t mode) { |
| 215 | return HWC2::Error::Unsupported; |
| 216 | } |
Yuchao Ma | 577f0f7 | 2018-07-09 11:20:00 +0800 | [diff] [blame] | 217 | |
Sushil Chauhan | 1566a13 | 2019-10-02 11:59:28 -0700 | [diff] [blame] | 218 | virtual bool IsSmartPanelConfig(uint32_t config_id) { |
| 219 | return false; |
| 220 | } |
| 221 | |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 222 | // Display Configurations |
Mahesh Aia | f3a1f99 | 2019-01-16 13:07:42 -0800 | [diff] [blame] | 223 | static uint32_t GetThrottlingRefreshRate() { return HWCDisplay::throttling_refresh_rate_; } |
| 224 | static void SetThrottlingRefreshRate(uint32_t newRefreshRate) |
| 225 | { HWCDisplay::throttling_refresh_rate_ = newRefreshRate; } |
Dileep Marchya | 6860b2b | 2017-04-07 15:56:47 +0530 | [diff] [blame] | 226 | virtual int SetActiveDisplayConfig(uint32_t config); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 227 | virtual int GetActiveDisplayConfig(uint32_t *config); |
| 228 | virtual int GetDisplayConfigCount(uint32_t *count); |
Arun Kumar K.R | 8da7f50 | 2016-06-07 17:45:50 -0700 | [diff] [blame] | 229 | virtual int GetDisplayAttributesForConfig(int config, |
| 230 | DisplayConfigVariableInfo *display_attributes); |
Dileep Marchya | d16da3e | 2017-05-20 01:56:21 +0530 | [diff] [blame] | 231 | virtual int SetState(bool connected) { |
| 232 | return kErrorNotSupported; |
| 233 | } |
Rajavenu Kyatham | 0987b0e | 2018-02-14 18:59:26 +0530 | [diff] [blame] | 234 | virtual DisplayError Flush() { |
| 235 | return kErrorNotSupported; |
| 236 | } |
| 237 | |
Mahesh Aia | f3a1f99 | 2019-01-16 13:07:42 -0800 | [diff] [blame] | 238 | uint32_t GetMaxRefreshRate() { return max_refresh_rate_; } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 239 | int ToggleScreenUpdates(bool enable); |
| 240 | int ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload, PPDisplayAPIPayload *out_payload, |
| 241 | PPPendingParams *pending_action); |
Arun Kumar K.R | 536c7d6 | 2016-06-14 18:47:39 -0700 | [diff] [blame] | 242 | void SolidFillPrepare(); |
| 243 | void SolidFillCommit(); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 244 | DisplayClass GetDisplayClass(); |
| 245 | int GetVisibleDisplayRect(hwc_rect_t *rect); |
| 246 | void BuildLayerStack(void); |
Arun Kumar K.R | 536c7d6 | 2016-06-14 18:47:39 -0700 | [diff] [blame] | 247 | void BuildSolidFillStack(void); |
Varun Arora | 2c23e58 | 2017-10-10 15:07:13 -0700 | [diff] [blame] | 248 | HWCLayer *GetHWCLayer(hwc2_layer_t layer_id); |
Saurabh Shah | a307e8c | 2017-09-28 18:05:40 -0700 | [diff] [blame] | 249 | void ResetValidation() { validated_ = false; } |
Sushil Chauhan | 409e844 | 2017-06-12 17:43:25 -0700 | [diff] [blame] | 250 | uint32_t GetGeometryChanges() { return geometry_changes_; } |
Sushil Chauhan | e3a9fd0 | 2017-10-12 18:00:05 -0700 | [diff] [blame] | 251 | bool CanSkipValidate(); |
Sushil Chauhan | e3a9fd0 | 2017-10-12 18:00:05 -0700 | [diff] [blame] | 252 | bool IsSkipValidateState() { return (validate_state_ == kSkipValidate); } |
| 253 | bool IsInternalValidateState() { return (validated_ && (validate_state_ == kInternalValidate)); } |
| 254 | void SetValidationState(DisplayValidateState state) { validate_state_ = state; } |
Sushil Chauhan | fea3e90 | 2018-07-31 15:34:48 -0700 | [diff] [blame] | 255 | ColorMode GetCurrentColorMode() { |
| 256 | return (color_mode_ ? color_mode_->GetCurrentColorMode() : ColorMode::SRGB); |
| 257 | } |
Sushil Chauhan | 181d950 | 2018-12-13 16:40:58 -0800 | [diff] [blame] | 258 | bool HWCClientNeedsValidate() { |
| 259 | return (has_client_composition_ || layer_stack_.flags.single_buffered_layer_present); |
| 260 | } |
Padmanabhan Komanduru | f5b7f99 | 2019-07-08 13:33:44 +0530 | [diff] [blame] | 261 | bool CheckResourceState(); |
Sushil Chauhan | 9c07ad0 | 2019-02-28 12:07:35 -0800 | [diff] [blame] | 262 | virtual void SetFastPathComposition(bool enable) { fast_path_composition_ = enable; } |
Xu Yang | 84e6141 | 2018-12-06 14:52:16 +0800 | [diff] [blame] | 263 | virtual HWC2::Error SetColorModeFromClientApi(int32_t color_mode_id) { |
| 264 | return HWC2::Error::Unsupported; |
| 265 | } |
Mathew Joseph Karimpanal | abe3b3d | 2018-11-27 17:25:40 +0530 | [diff] [blame] | 266 | bool IsFirstCommitDone() { return !first_cycle_; } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 267 | |
| 268 | // HWC2 APIs |
| 269 | virtual HWC2::Error AcceptDisplayChanges(void); |
| 270 | virtual HWC2::Error GetActiveConfig(hwc2_config_t *out_config); |
| 271 | virtual HWC2::Error SetActiveConfig(hwc2_config_t config); |
Archit Srivastava | a59c4ff | 2019-05-20 10:54:22 +0530 | [diff] [blame] | 272 | virtual HWC2::Error SetPanelLuminanceAttributes(float min_lum, float max_lum) { |
| 273 | return HWC2::Error::Unsupported; |
| 274 | } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 275 | virtual HWC2::Error SetClientTarget(buffer_handle_t target, int32_t acquire_fence, |
Naseer Ahmed | a20c4c0 | 2016-06-03 17:48:28 -0400 | [diff] [blame] | 276 | int32_t dataspace, hwc_region_t damage); |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 277 | virtual HWC2::Error SetColorMode(ColorMode mode) { return HWC2::Error::Unsupported; } |
| 278 | virtual HWC2::Error SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) { |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 279 | return HWC2::Error::Unsupported; |
| 280 | } |
Naseer Ahmed | 6776dae | 2017-05-09 11:49:41 -0400 | [diff] [blame] | 281 | virtual HWC2::Error SetColorModeById(int32_t color_mode_id) { |
| 282 | return HWC2::Error::Unsupported; |
| 283 | } |
Ch Ganesh Kumar | 5d43ff6 | 2017-10-13 19:01:47 +0530 | [diff] [blame] | 284 | virtual HWC2::Error RestoreColorTransform() { |
| 285 | return HWC2::Error::Unsupported; |
| 286 | } |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 287 | virtual HWC2::Error SetColorTransform(const float *matrix, android_color_transform_t hint) { |
| 288 | return HWC2::Error::Unsupported; |
| 289 | } |
Naseer Ahmed | eae2812 | 2016-06-27 15:47:05 -0400 | [diff] [blame] | 290 | virtual HWC2::Error HandleColorModeTransform(android_color_mode_t mode, |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 291 | android_color_transform_t hint, |
| 292 | const double *matrix) { |
| 293 | return HWC2::Error::Unsupported; |
| 294 | } |
Pullakavi Srinivas | 9189e60 | 2018-12-19 16:58:07 +0530 | [diff] [blame] | 295 | virtual DisplayError SetDynamicDSIClock(uint64_t bitclk) { |
| 296 | return kErrorNotSupported; |
| 297 | } |
| 298 | virtual DisplayError GetDynamicDSIClock(uint64_t *bitclk) { |
| 299 | return kErrorNotSupported; |
| 300 | } |
| 301 | virtual DisplayError GetSupportedDSIClock(std::vector<uint64_t> *bitclk) { |
| 302 | return kErrorNotSupported; |
| 303 | } |
Padmanabhan Komanduru | e74cf4f | 2019-04-25 17:38:43 -0700 | [diff] [blame] | 304 | virtual HWC2::Error UpdateDisplayId(hwc2_display_t id) { |
| 305 | return HWC2::Error::Unsupported; |
| 306 | } |
| 307 | virtual HWC2::Error SetPendingRefresh() { |
| 308 | return HWC2::Error::Unsupported; |
| 309 | } |
Varun Arora | 75c05f0 | 2019-05-14 14:53:37 -0700 | [diff] [blame] | 310 | virtual HWC2::Error SetPanelBrightness(float brightness) { |
| 311 | return HWC2::Error::Unsupported; |
| 312 | } |
| 313 | virtual HWC2::Error GetPanelBrightness(float *brightness) { |
| 314 | return HWC2::Error::Unsupported; |
| 315 | } |
Yuchao Ma | ada1c40 | 2019-11-12 14:47:11 +0800 | [diff] [blame] | 316 | virtual HWC2::Error GetPanelMaxBrightness(uint32_t *max_brightness_level) { |
| 317 | return HWC2::Error::Unsupported; |
| 318 | } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 319 | virtual HWC2::Error GetDisplayConfigs(uint32_t *out_num_configs, hwc2_config_t *out_configs); |
| 320 | virtual HWC2::Error GetDisplayAttribute(hwc2_config_t config, HWC2::Attribute attribute, |
| 321 | int32_t *out_value); |
| 322 | virtual HWC2::Error GetClientTargetSupport(uint32_t width, uint32_t height, int32_t format, |
| 323 | int32_t dataspace); |
Naseer Ahmed | e7a7798 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 324 | virtual HWC2::Error GetColorModes(uint32_t *outNumModes, ColorMode *outModes); |
| 325 | virtual HWC2::Error GetRenderIntents(ColorMode mode, uint32_t *out_num_intents, |
| 326 | RenderIntent *out_intents); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 327 | virtual HWC2::Error GetChangedCompositionTypes(uint32_t *out_num_elements, |
| 328 | hwc2_layer_t *out_layers, int32_t *out_types); |
| 329 | virtual HWC2::Error GetDisplayRequests(int32_t *out_display_requests, uint32_t *out_num_elements, |
| 330 | hwc2_layer_t *out_layers, int32_t *out_layer_requests); |
| 331 | virtual HWC2::Error GetDisplayName(uint32_t *out_size, char *out_name); |
| 332 | virtual HWC2::Error GetDisplayType(int32_t *out_type); |
| 333 | virtual HWC2::Error SetCursorPosition(hwc2_layer_t layer, int x, int y); |
| 334 | virtual HWC2::Error SetVsyncEnabled(HWC2::Vsync enabled); |
Varun Arora | 78580b8 | 2018-09-10 13:59:57 -0700 | [diff] [blame] | 335 | virtual HWC2::Error SetPowerMode(HWC2::PowerMode mode, bool teardown); |
Srinivas Pullakavi | 3c4337f | 2019-07-03 11:24:31 +0530 | [diff] [blame] | 336 | virtual HWC2::Error UpdatePowerMode(HWC2::PowerMode mode) { |
| 337 | return HWC2::Error::None; |
| 338 | } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 339 | virtual HWC2::Error CreateLayer(hwc2_layer_t *out_layer_id); |
| 340 | virtual HWC2::Error DestroyLayer(hwc2_layer_t layer_id); |
| 341 | virtual HWC2::Error SetLayerZOrder(hwc2_layer_t layer_id, uint32_t z); |
Ray Zhang | 2ee8247 | 2019-09-05 02:53:29 +0800 | [diff] [blame] | 342 | virtual HWC2::Error SetLayerType(hwc2_layer_t layer_id, IQtiComposerClient::LayerType type); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 343 | virtual HWC2::Error Validate(uint32_t *out_num_types, uint32_t *out_num_requests) = 0; |
| 344 | virtual HWC2::Error GetReleaseFences(uint32_t *out_num_elements, hwc2_layer_t *out_layers, |
| 345 | int32_t *out_fences); |
| 346 | virtual HWC2::Error Present(int32_t *out_retire_fence) = 0; |
Arun Kumar K.R | f28957a | 2017-01-10 17:36:52 -0800 | [diff] [blame] | 347 | virtual HWC2::Error GetHdrCapabilities(uint32_t *out_num_types, int32_t* out_types, |
| 348 | float* out_max_luminance, |
| 349 | float* out_max_average_luminance, |
| 350 | float* out_min_luminance); |
Naseer Ahmed | a6782e4 | 2018-06-04 10:56:04 -0400 | [diff] [blame] | 351 | virtual HWC2::Error GetPerFrameMetadataKeys(uint32_t *out_num_keys, |
| 352 | PerFrameMetadataKey *out_keys); |
Naseer Ahmed | a699e79 | 2017-11-09 15:08:31 -0500 | [diff] [blame] | 353 | virtual HWC2::Error SetDisplayAnimating(bool animating) { |
| 354 | animating_ = animating; |
Ramkumar Radhakrishnan | ae338ae | 2017-11-27 21:27:25 -0800 | [diff] [blame] | 355 | validated_ = false; |
Naseer Ahmed | a699e79 | 2017-11-09 15:08:31 -0500 | [diff] [blame] | 356 | return HWC2::Error::None; |
| 357 | } |
Sushil Chauhan | e3a9fd0 | 2017-10-12 18:00:05 -0700 | [diff] [blame] | 358 | virtual HWC2::Error GetValidateDisplayOutput(uint32_t *out_num_types, uint32_t *out_num_requests); |
Ramkumar Radhakrishnan | a38b760 | 2018-03-15 14:49:52 -0700 | [diff] [blame] | 359 | virtual bool IsDisplayCommandMode(); |
Sushil Chauhan | 380a59d | 2018-03-19 15:47:50 -0700 | [diff] [blame] | 360 | virtual HWC2::Error SetQSyncMode(QSyncMode qsync_mode) { |
| 361 | return HWC2::Error::Unsupported; |
| 362 | } |
Ramkumar Radhakrishnan | 4faf8a6 | 2018-11-15 17:15:37 -0800 | [diff] [blame] | 363 | virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous) { |
| 364 | return kErrorNone; |
Ramkumar Radhakrishnan | f985d48 | 2018-07-23 18:10:41 -0700 | [diff] [blame] | 365 | } |
Varun Arora | 6ba9eda | 2019-02-07 17:59:32 -0800 | [diff] [blame] | 366 | virtual HWC2::Error GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size, |
| 367 | uint8_t *out_data); |
Xu Yang | 45d0abf | 2019-07-05 11:34:06 +0800 | [diff] [blame] | 368 | virtual HWC2::Error SetBLScale(uint32_t level) { |
| 369 | return HWC2::Error::Unsupported; |
| 370 | } |
Srinivas Pullakavi | 3c4337f | 2019-07-03 11:24:31 +0530 | [diff] [blame] | 371 | virtual void GetLayerStack(HWCLayerStack *stack); |
| 372 | virtual void SetLayerStack(HWCLayerStack *stack); |
| 373 | virtual void PostPowerMode(); |
Mathew Joseph Karimpanal | b1c1586 | 2019-07-04 11:14:24 +0530 | [diff] [blame] | 374 | virtual HWC2::PowerMode GetPendingPowerMode() { |
| 375 | return pending_power_mode_; |
Rajavenu Kyatham | 2e24edc | 2019-10-10 19:26:30 +0530 | [diff] [blame] | 376 | } |
Mathew Joseph Karimpanal | b1c1586 | 2019-07-04 11:14:24 +0530 | [diff] [blame] | 377 | virtual void ClearPendingPowerMode() { |
| 378 | pending_power_mode_ = current_power_mode_; |
Rajavenu Kyatham | 2e24edc | 2019-10-10 19:26:30 +0530 | [diff] [blame] | 379 | } |
Pullakavi Srinivas | 2d55f3a | 2019-07-16 14:49:06 +0530 | [diff] [blame] | 380 | virtual void NotifyClientStatus(bool connected) { client_connected_ = connected; } |
Padmanabhan Komanduru | 6693fcb | 2019-11-22 21:06:52 +0530 | [diff] [blame] | 381 | virtual bool IsQsyncCallbackNeeded(bool *qsync_enabled, int32_t *refresh_rate, |
| 382 | int32_t *qsync_refresh_rate) { |
| 383 | return false; |
| 384 | } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 385 | |
Lakshmi Narayana Kalavala | 25fe12c | 2019-12-11 20:44:55 -0800 | [diff] [blame] | 386 | virtual HWC2::Error SetDisplayedContentSamplingEnabledVndService(bool enabled); |
| 387 | virtual HWC2::Error SetDisplayedContentSamplingEnabled(int32_t enabled, uint8_t component_mask, |
| 388 | uint64_t max_frames); |
| 389 | virtual HWC2::Error GetDisplayedContentSamplingAttributes(int32_t *format, int32_t *dataspace, |
| 390 | uint8_t *supported_components); |
| 391 | virtual HWC2::Error GetDisplayedContentSample( |
| 392 | uint64_t max_frames, uint64_t timestamp, uint64_t *numFrames, |
| 393 | int32_t samples_size[NUM_HISTOGRAM_COLOR_COMPONENTS], |
| 394 | uint64_t *samples[NUM_HISTOGRAM_COLOR_COMPONENTS]); |
| 395 | |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 396 | protected: |
Mahesh Aia | f3a1f99 | 2019-01-16 13:07:42 -0800 | [diff] [blame] | 397 | static uint32_t throttling_refresh_rate_; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 398 | // Maximum number of layers supported by display manager. |
| 399 | static const uint32_t kMaxLayerCount = 32; |
Dileep Marchya | f3ce11f | 2018-04-30 23:35:46 +0530 | [diff] [blame] | 400 | HWCDisplay(CoreInterface *core_intf, BufferAllocator *buffer_allocator, HWCCallbacks *callbacks, |
| 401 | HWCDisplayEventHandler *event_handler, qService::QService *qservice, DisplayType type, |
Gousemoodhin Nadaf | 087c310 | 2019-01-07 19:34:56 +0530 | [diff] [blame] | 402 | hwc2_display_t id, int32_t sdm_id, DisplayClass display_class); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 403 | |
| 404 | // DisplayEventHandler methods |
| 405 | virtual DisplayError VSync(const DisplayEventVSync &vsync); |
| 406 | virtual DisplayError Refresh(); |
| 407 | virtual DisplayError CECMessage(char *message); |
Lakshmi Narayana Kalavala | e0127eb | 2019-12-03 11:07:26 -0800 | [diff] [blame] | 408 | virtual DisplayError HistogramEvent(int source_fd, uint32_t blob_id); |
Sushil Chauhan | 409e844 | 2017-06-12 17:43:25 -0700 | [diff] [blame] | 409 | virtual DisplayError HandleEvent(DisplayEvent event); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 410 | virtual void DumpOutputBuffer(const BufferInfo &buffer_info, void *base, int fence); |
| 411 | virtual HWC2::Error PrepareLayerStack(uint32_t *out_num_types, uint32_t *out_num_requests); |
| 412 | virtual HWC2::Error CommitLayerStack(void); |
| 413 | virtual HWC2::Error PostCommitLayerStack(int32_t *out_retire_fence); |
Arun Kumar K.R | 17bbd04 | 2016-06-07 17:38:02 -0700 | [diff] [blame] | 414 | virtual DisplayError DisablePartialUpdateOneFrame() { |
| 415 | return kErrorNotSupported; |
| 416 | } |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 417 | const char *GetDisplayString(); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 418 | void MarkLayersForGPUBypass(void); |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 419 | void MarkLayersForClientComposition(void); |
Pullakavi Srinivas | 9189e60 | 2018-12-19 16:58:07 +0530 | [diff] [blame] | 420 | void UpdateConfigs(); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 421 | virtual void ApplyScanAdjustment(hwc_rect_t *display_frame); |
Ramakant Singh | 5db0dfb | 2017-08-23 12:34:57 +0530 | [diff] [blame] | 422 | uint32_t GetUpdatingLayersCount(void); |
Sushil Chauhan | 9735cf8 | 2018-07-10 12:06:01 -0700 | [diff] [blame] | 423 | bool IsLayerUpdating(HWCLayer *layer); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 424 | uint32_t SanitizeRefreshRate(uint32_t req_refresh_rate); |
Sushil Chauhan | 409e844 | 2017-06-12 17:43:25 -0700 | [diff] [blame] | 425 | virtual void GetUnderScanConfig() { } |
Arun Kumar K.R | 5b82155 | 2018-12-07 08:00:15 +0530 | [diff] [blame] | 426 | int32_t SetClientTargetDataSpace(int32_t dataspace); |
Padmanabhan Komanduru | a4bf606 | 2019-10-13 09:04:49 +0530 | [diff] [blame] | 427 | int SetFrameBufferConfig(uint32_t x_pixels, uint32_t y_pixels); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 428 | |
Saurabh Shah | a307e8c | 2017-09-28 18:05:40 -0700 | [diff] [blame] | 429 | bool validated_ = false; |
Saurabh Shah | dccc0f4 | 2018-01-15 15:59:56 -0800 | [diff] [blame] | 430 | bool layer_stack_invalid_ = true; |
Naseer Ahmed | 72dea24 | 2016-05-03 19:13:07 -0400 | [diff] [blame] | 431 | CoreInterface *core_intf_ = nullptr; |
Dileep Marchya | f3ce11f | 2018-04-30 23:35:46 +0530 | [diff] [blame] | 432 | HWCBufferAllocator *buffer_allocator_ = NULL; |
Naseer Ahmed | 72dea24 | 2016-05-03 19:13:07 -0400 | [diff] [blame] | 433 | HWCCallbacks *callbacks_ = nullptr; |
Varun Arora | 7c8ee54 | 2018-05-01 20:58:16 -0700 | [diff] [blame] | 434 | HWCDisplayEventHandler *event_handler_ = nullptr; |
Dileep Marchya | f3ce11f | 2018-04-30 23:35:46 +0530 | [diff] [blame] | 435 | DisplayType type_ = kDisplayTypeMax; |
| 436 | hwc2_display_t id_ = UINT64_MAX; |
| 437 | int32_t sdm_id_ = -1; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 438 | DisplayInterface *display_intf_ = NULL; |
| 439 | LayerStack layer_stack_; |
Naseer Ahmed | 72dea24 | 2016-05-03 19:13:07 -0400 | [diff] [blame] | 440 | HWCLayer *client_target_ = nullptr; // Also known as framebuffer target |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 441 | std::map<hwc2_layer_t, HWCLayer *> layer_map_; // Look up by Id - TODO |
| 442 | std::multiset<HWCLayer *, SortLayersByZ> layer_set_; // Maintain a set sorted by Z |
| 443 | std::map<hwc2_layer_t, HWC2::Composition> layer_changes_; |
| 444 | std::map<hwc2_layer_t, HWC2::LayerRequest> layer_requests_; |
| 445 | bool flush_on_error_ = false; |
| 446 | bool flush_ = false; |
| 447 | uint32_t dump_frame_count_ = 0; |
| 448 | uint32_t dump_frame_index_ = 0; |
| 449 | bool dump_input_layers_ = false; |
Varun Arora | f027a22 | 2018-11-14 17:38:16 -0800 | [diff] [blame] | 450 | HWC2::PowerMode current_power_mode_ = HWC2::PowerMode::Off; |
Mathew Joseph Karimpanal | b1c1586 | 2019-07-04 11:14:24 +0530 | [diff] [blame] | 451 | HWC2::PowerMode pending_power_mode_ = HWC2::PowerMode::Off; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 452 | bool swap_interval_zero_ = false; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 453 | bool display_paused_ = false; |
| 454 | uint32_t min_refresh_rate_ = 0; |
| 455 | uint32_t max_refresh_rate_ = 0; |
| 456 | uint32_t current_refresh_rate_ = 0; |
| 457 | bool use_metadata_refresh_rate_ = false; |
| 458 | uint32_t metadata_refresh_rate_ = 0; |
| 459 | uint32_t force_refresh_rate_ = 0; |
| 460 | bool boot_animation_completed_ = false; |
| 461 | bool shutdown_pending_ = false; |
Ramkumar Radhakrishnan | a38b760 | 2018-03-15 14:49:52 -0700 | [diff] [blame] | 462 | std::bitset<kSecureMax> active_secure_sessions_ = 0; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 463 | bool solid_fill_enable_ = false; |
Arun Kumar K.R | 536c7d6 | 2016-06-14 18:47:39 -0700 | [diff] [blame] | 464 | Layer *solid_fill_layer_ = NULL; |
| 465 | LayerRect solid_fill_rect_ = {}; |
Gopikrishnaiah Anandan | cc12306 | 2017-07-31 17:21:03 -0700 | [diff] [blame] | 466 | LayerSolidFill solid_fill_color_ = {}; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 467 | LayerRect display_rect_; |
Arun Kumar K.R | 29cd658 | 2016-05-10 19:12:45 -0700 | [diff] [blame] | 468 | bool color_tranform_failed_ = false; |
| 469 | HWCColorMode *color_mode_ = NULL; |
Arun Kumar K.R | 51be3d1 | 2017-03-31 19:54:38 -0700 | [diff] [blame] | 470 | HWCToneMapper *tone_mapper_ = nullptr; |
Rajavenu Kyatham | 40fc538 | 2017-07-12 18:36:55 +0530 | [diff] [blame] | 471 | uint32_t num_configs_ = 0; |
Arun Kumar K.R | 2be0bf8 | 2017-05-24 15:14:41 +0530 | [diff] [blame] | 472 | int disable_hdr_handling_ = 0; // disables HDR handling. |
Namit Solanki | 5b428dc | 2018-02-27 11:39:05 +0530 | [diff] [blame] | 473 | bool pending_commit_ = false; |
Tharaga Balachandran | 04192a6 | 2018-08-29 16:23:25 -0400 | [diff] [blame] | 474 | bool is_cmd_mode_ = false; |
| 475 | bool partial_update_enabled_ = false; |
Sushil Chauhan | 7bd2066 | 2018-08-20 17:51:32 -0700 | [diff] [blame] | 476 | bool fast_path_composition_ = false; |
Padmanabhan Komanduru | e74cf4f | 2019-04-25 17:38:43 -0700 | [diff] [blame] | 477 | bool skip_commit_ = false; |
Pullakavi Srinivas | 9189e60 | 2018-12-19 16:58:07 +0530 | [diff] [blame] | 478 | std::map<uint32_t, DisplayConfigVariableInfo> variable_config_map_; |
| 479 | std::vector<uint32_t> hwc_config_map_; |
Pullakavi Srinivas | 2d55f3a | 2019-07-16 14:49:06 +0530 | [diff] [blame] | 480 | bool client_connected_ = true; |
Pullakavi Srinivas | 2457414 | 2019-08-14 12:18:12 +0530 | [diff] [blame] | 481 | bool pending_config_ = false; |
Pullakavi Srinivas | 17495f1 | 2019-09-16 20:25:20 +0530 | [diff] [blame] | 482 | bool has_client_composition_ = false; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 483 | |
| 484 | private: |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 485 | void DumpInputBuffers(void); |
Sushil Chauhan | 36c059a | 2018-06-28 11:39:01 -0700 | [diff] [blame] | 486 | bool CanSkipSdmPrepare(uint32_t *num_types, uint32_t *num_requests); |
Pullakavi Srinivas | 3dbb0d9 | 2018-03-07 15:15:14 +0530 | [diff] [blame] | 487 | void UpdateRefreshRate(); |
Rajavenu Kyatham | af26f40 | 2019-02-13 15:04:03 +0530 | [diff] [blame] | 488 | void WaitOnPreviousFence(); |
Pullakavi Srinivas | 81fee96 | 2019-07-26 15:49:32 +0530 | [diff] [blame] | 489 | void UpdateActiveConfig(); |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 490 | qService::QService *qservice_ = NULL; |
| 491 | DisplayClass display_class_; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 492 | uint32_t geometry_changes_ = GeometryChanges::kNone; |
Rajavenu Kyatham | ef47418 | 2019-07-03 15:26:08 +0530 | [diff] [blame] | 493 | uint32_t geometry_changes_on_doze_suspend_ = GeometryChanges::kNone; |
Naseer Ahmed | a699e79 | 2017-11-09 15:08:31 -0500 | [diff] [blame] | 494 | bool animating_ = false; |
Varun Arora | 465c1f7 | 2018-02-08 16:18:50 -0800 | [diff] [blame] | 495 | int null_display_mode_ = 0; |
Sushil Chauhan | e3a9fd0 | 2017-10-12 18:00:05 -0700 | [diff] [blame] | 496 | DisplayValidateState validate_state_ = kNormalValidate; |
Sushil Chauhan | 7bd2066 | 2018-08-20 17:51:32 -0700 | [diff] [blame] | 497 | bool fast_path_enabled_ = true; |
Mathew Joseph Karimpanal | abe3b3d | 2018-11-27 17:25:40 +0530 | [diff] [blame] | 498 | bool first_cycle_ = true; // false if a display commit has succeeded on the device. |
Rajavenu Kyatham | 9d50958 | 2019-02-13 15:29:55 +0530 | [diff] [blame] | 499 | int fbt_release_fence_ = -1; |
Srinivas Pullakavi | 3c4337f | 2019-07-03 11:24:31 +0530 | [diff] [blame] | 500 | int release_fence_ = -1; |
Pullakavi Srinivas | 81fee96 | 2019-07-26 15:49:32 +0530 | [diff] [blame] | 501 | hwc2_config_t pending_config_index_ = 0; |
Xu Yang | 7469c4f | 2019-11-27 10:25:59 +0800 | [diff] [blame] | 502 | bool game_supported_ = false; |
Naseer Ahmed | b92e73f | 2016-03-12 02:03:48 -0500 | [diff] [blame] | 503 | }; |
| 504 | |
| 505 | inline int HWCDisplay::Perform(uint32_t operation, ...) { |
| 506 | return 0; |
| 507 | } |
| 508 | |
| 509 | } // namespace sdm |
| 510 | |
| 511 | #endif // __HWC_DISPLAY_H__ |