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