1 /* 2 * Copyright (c) 2014 - 2016, The Linux Foundation. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 13 * * Neither the name of The Linux Foundation nor the names of its 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #include <stdlib.h> 31 #include <utils/debug.h> 32 #include <utils/constants.h> 33 #include <string> 34 #include <algorithm> 35 36 namespace sdm { 37 38 Debug Debug::debug_; 39 40 Debug::Debug() : debug_handler_(&default_debug_handler_) { 41 } 42 43 int Debug::GetSimulationFlag() { 44 int value = 0; 45 debug_.debug_handler_->GetProperty("sdm.composition_simulation", &value); 46 47 return value; 48 } 49 50 int Debug::GetHDMIResolution() { 51 int value = 0; 52 debug_.debug_handler_->GetProperty("hw.hdmi.resolution", &value); 53 54 return value; 55 } 56 57 void Debug::GetIdleTimeoutMs(uint32_t *active_ms, uint32_t *inactive_ms) { 58 int active_val = IDLE_TIMEOUT_ACTIVE_MS; 59 int inactive_val = IDLE_TIMEOUT_INACTIVE_MS; 60 61 debug_.debug_handler_->GetProperty("sdm.idle_time", &active_val); 62 debug_.debug_handler_->GetProperty("sdm.idle_time.inactive", &inactive_val); 63 64 *active_ms = UINT32(active_val); 65 *inactive_ms = UINT32(inactive_val); 66 } 67 68 int Debug::GetBootAnimLayerCount() { 69 int value = 0; 70 debug_.debug_handler_->GetProperty("sdm.boot_anim_layer_count", &value); 71 72 return value; 73 } 74 75 bool Debug::IsRotatorDownScaleDisabled() { 76 int value = 0; 77 debug_.debug_handler_->GetProperty("sdm.debug.rotator_downscale", &value); 78 79 return (value == 1); 80 } 81 82 bool Debug::IsDecimationDisabled() { 83 int value = 0; 84 debug_.debug_handler_->GetProperty("sdm.disable_decimation", &value); 85 86 return (value == 1); 87 } 88 89 int Debug::GetMaxPipesPerMixer(DisplayType display_type) { 90 int value = -1; 91 switch (display_type) { 92 case kPrimary: 93 debug_.debug_handler_->GetProperty("sdm.primary.mixer_stages", &value); 94 break; 95 case kHDMI: 96 debug_.debug_handler_->GetProperty("sdm.external.mixer_stages", &value); 97 break; 98 case kVirtual: 99 debug_.debug_handler_->GetProperty("sdm.virtual.mixer_stages", &value); 100 break; 101 default: 102 break; 103 } 104 105 return value; 106 } 107 108 int Debug::GetMaxUpscale() { 109 int value = 0; 110 debug_.debug_handler_->GetProperty("sdm.max_upscale", &value); 111 112 return value; 113 } 114 115 bool Debug::IsVideoModeEnabled() { 116 int value = 0; 117 debug_.debug_handler_->GetProperty("sdm.video_mode_panel", &value); 118 119 return (value == 1); 120 } 121 122 bool Debug::IsRotatorUbwcDisabled() { 123 int value = 0; 124 debug_.debug_handler_->GetProperty("sdm.debug.rotator_disable_ubwc", &value); 125 126 return (value == 1); 127 } 128 129 bool Debug::IsRotatorSplitDisabled() { 130 int value = 0; 131 debug_.debug_handler_->GetProperty("sdm.debug.disable_rotator_split", &value); 132 133 return (value == 1); 134 } 135 136 bool Debug::IsScalarDisabled() { 137 int value = 0; 138 debug_.debug_handler_->GetProperty("sdm.debug.disable_scalar", &value); 139 140 return (value == 1); 141 } 142 143 bool Debug::IsUbwcTiledFrameBuffer() { 144 int ubwc_disabled = 0; 145 int ubwc_framebuffer = 0; 146 147 debug_.debug_handler_->GetProperty("debug.gralloc.gfx_ubwc_disable", &ubwc_disabled); 148 149 if (!ubwc_disabled) { 150 debug_.debug_handler_->GetProperty("debug.gralloc.enable_fb_ubwc", &ubwc_framebuffer); 151 } 152 153 return (ubwc_framebuffer == 1); 154 } 155 156 bool Debug::IsAVRDisabled() { 157 int value = 0; 158 debug_.debug_handler_->GetProperty("sdm.debug.disable_avr", &value); 159 160 return (value == 1); 161 } 162 163 bool Debug::IsExtAnimDisabled() { 164 int value = 0; 165 debug_.debug_handler_->GetProperty("sys.disable_ext_animation", &value); 166 167 return (value == 1); 168 } 169 170 bool Debug::IsPartialSplitDisabled() { 171 int value = 0; 172 debug_.debug_handler_->GetProperty("sdm.debug.disable_partial_split", &value); 173 174 return (value == 1); 175 } 176 177 DisplayError Debug::GetMixerResolution(uint32_t *width, uint32_t *height) { 178 char value[64] = {}; 179 180 DisplayError error = debug_.debug_handler_->GetProperty("sdm.mixer_resolution", value); 181 if (error !=kErrorNone) { 182 return error; 183 } 184 185 std::string str(value); 186 187 *width = UINT32(stoi(str)); 188 *height = UINT32(stoi(str.substr(str.find('x') + 1))); 189 190 return kErrorNone; 191 } 192 193 int Debug::GetExtMaxlayers() { 194 int max_external_layers = 0; 195 debug_.debug_handler_->GetProperty("sdm.max_external_layers", &max_external_layers); 196 197 return std::max(max_external_layers, 2); 198 } 199 200 bool Debug::GetProperty(const char* property_name, char* value) { 201 if (debug_.debug_handler_->GetProperty(property_name, value) != kErrorNone) { 202 return false; 203 } 204 205 return true; 206 } 207 208 bool Debug::SetProperty(const char* property_name, const char* value) { 209 if (debug_.debug_handler_->SetProperty(property_name, value) != kErrorNone) { 210 return false; 211 } 212 213 return true; 214 } 215 216 } // namespace sdm 217 218