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 #ifndef __DEBUG_H__
     31 #define __DEBUG_H__
     32 
     33 #include <stdint.h>
     34 #include <core/sdm_types.h>
     35 #include <core/debug_interface.h>
     36 #include <core/display_interface.h>
     37 
     38 #define DLOG(tag, method, format, ...) Debug::Get()->method(tag, __CLASS__ "::%s: " format, \
     39                                                             __FUNCTION__, ##__VA_ARGS__)
     40 
     41 #define DLOGE_IF(tag, format, ...) DLOG(tag, Error, format, ##__VA_ARGS__)
     42 #define DLOGW_IF(tag, format, ...) DLOG(tag, Warning, format, ##__VA_ARGS__)
     43 #define DLOGI_IF(tag, format, ...) DLOG(tag, Info, format, ##__VA_ARGS__)
     44 #define DLOGD_IF(tag, format, ...) DLOG(tag, Debug, format, ##__VA_ARGS__)
     45 #define DLOGV_IF(tag, format, ...) DLOG(tag, Verbose, format, ##__VA_ARGS__)
     46 
     47 #define DLOGE(format, ...) DLOGE_IF(kTagNone, format, ##__VA_ARGS__)
     48 #define DLOGD(format, ...) DLOGD_IF(kTagNone, format, ##__VA_ARGS__)
     49 #define DLOGW(format, ...) DLOGW_IF(kTagNone, format, ##__VA_ARGS__)
     50 #define DLOGI(format, ...) DLOGI_IF(kTagNone, format, ##__VA_ARGS__)
     51 #define DLOGV(format, ...) DLOGV_IF(kTagNone, format, ##__VA_ARGS__)
     52 
     53 #define DTRACE_BEGIN(custom_string) Debug::Get()->BeginTrace(__CLASS__, __FUNCTION__, custom_string)
     54 #define DTRACE_END() Debug::Get()->EndTrace()
     55 #define DTRACE_SCOPED() ScopeTracer <Debug> scope_tracer(__CLASS__, __FUNCTION__)
     56 
     57 namespace sdm {
     58 
     59 class Debug {
     60  public:
     61   static inline void SetDebugHandler(DebugHandler *debug_handler) {
     62     debug_.debug_handler_ = debug_handler;
     63   }
     64   static inline DebugHandler* Get() { return debug_.debug_handler_; }
     65   static int GetSimulationFlag();
     66   static int GetHDMIResolution();
     67   static uint32_t GetIdleTimeoutMs();
     68   static int GetBootAnimLayerCount();
     69   static bool IsRotatorDownScaleDisabled();
     70   static bool IsDecimationDisabled();
     71   static int GetMaxPipesPerMixer(DisplayType display_type);
     72   static bool IsVideoModeEnabled();
     73   static bool IsRotatorUbwcDisabled();
     74   static bool IsRotatorSplitDisabled();
     75   static bool IsScalarDisabled();
     76   static bool IsUbwcTiledFrameBuffer();
     77   static bool GetProperty(const char *property_name, char *value);
     78   static bool SetProperty(const char *property_name, const char *value);
     79 
     80  private:
     81   Debug();
     82 
     83   // By default, drop any log messages/traces coming from Display manager. It will be overriden by
     84   // Display manager client when core is successfully initialized.
     85   class DefaultDebugHandler : public DebugHandler {
     86    public:
     87     virtual void Error(DebugTag /*tag*/, const char */*format*/, ...) { }
     88     virtual void Warning(DebugTag /*tag*/, const char */*format*/, ...) { }
     89     virtual void Info(DebugTag /*tag*/, const char */*format*/, ...) { }
     90     virtual void Debug(DebugTag /*tag*/, const char */*format*/, ...) { }
     91     virtual void Verbose(DebugTag /*tag*/, const char */*format*/, ...) { }
     92     virtual void BeginTrace(const char */*class_name*/, const char */*function_name*/,
     93                             const char */*custom_string*/) { }
     94     virtual void EndTrace() { }
     95     virtual DisplayError GetProperty(const char */*property_name*/, int */*value*/) {
     96       return kErrorNotSupported;
     97     }
     98     virtual DisplayError GetProperty(const char */*property_name*/, char */*value*/) {
     99       return kErrorNotSupported;
    100     }
    101     virtual DisplayError SetProperty(const char */*property_name*/, const char */*value*/) {
    102       return kErrorNotSupported;
    103     }
    104   };
    105 
    106   DefaultDebugHandler default_debug_handler_;
    107   DebugHandler *debug_handler_;
    108   static Debug debug_;
    109 };
    110 
    111 }  // namespace sdm
    112 
    113 #endif  // __DEBUG_H__
    114 
    115