Home | History | Annotate | Download | only in utils
      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