blob: 2f372e351f5934f350f30844d468a0edb0023eab [file] [log] [blame]
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -08001/*
Ashish Kumar62030792019-01-28 22:41:19 +05302* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -08003*
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 <utils/constants.h>
Dileep Marchyae2a59082015-05-21 13:29:05 -070031#include <cutils/properties.h>
Uday Kiran Pichika5e656b22018-05-15 18:48:24 +053032#include <display_properties.h>
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080033
34#include "hwc_debugger.h"
35
Dileep Marchya73d002e2015-05-08 18:58:33 -070036namespace sdm {
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080037
38HWCDebugHandler HWCDebugHandler::debug_handler_;
Dileep Marchya2d586442018-03-09 16:42:40 +053039
40HWCDebugHandler::HWCDebugHandler() {
41 DebugHandler::Set(HWCDebugHandler::Get());
42}
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080043
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -070044void HWCDebugHandler::DebugAll(bool enable, int verbose_level) {
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080045 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +053046 debug_handler_.log_mask_ = 0x7FFFFFFF;
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +053047 if (verbose_level) {
Dileep Marchya2d586442018-03-09 16:42:40 +053048 // Enable verbose scalar logs only when explicitly enabled
49 debug_handler_.log_mask_[kTagScalar] = 0;
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +053050 }
Dileep Marchya2d586442018-03-09 16:42:40 +053051 debug_handler_.verbose_level_ = verbose_level;
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080052 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +053053 debug_handler_.log_mask_ = 0x1; // kTagNone should always be printed.
54 debug_handler_.verbose_level_ = 0;
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080055 }
Dileep Marchya2d586442018-03-09 16:42:40 +053056
57 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080058}
59
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -070060void HWCDebugHandler::DebugResources(bool enable, int verbose_level) {
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080061 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +053062 debug_handler_.log_mask_[kTagResources] = 1;
63 debug_handler_.verbose_level_ = verbose_level;
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080064 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +053065 debug_handler_.log_mask_[kTagResources] = 0;
66 debug_handler_.verbose_level_ = 0;
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080067 }
Dileep Marchya2d586442018-03-09 16:42:40 +053068
69 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080070}
71
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -070072void HWCDebugHandler::DebugStrategy(bool enable, int verbose_level) {
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080073 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +053074 debug_handler_.log_mask_[kTagStrategy] = 1;
75 debug_handler_.verbose_level_ = verbose_level;
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080076 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +053077 debug_handler_.log_mask_[kTagStrategy] = 0;
78 debug_handler_.verbose_level_ = 0;
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080079 }
Dileep Marchya2d586442018-03-09 16:42:40 +053080
81 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -080082}
83
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -070084void HWCDebugHandler::DebugCompManager(bool enable, int verbose_level) {
Ramkumar Radhakrishnan94c27a32014-12-26 13:32:54 -080085 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +053086 debug_handler_.log_mask_[kTagCompManager] = 1;
87 debug_handler_.verbose_level_ = verbose_level;
Ramkumar Radhakrishnan94c27a32014-12-26 13:32:54 -080088 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +053089 debug_handler_.log_mask_[kTagCompManager] = 0;
90 debug_handler_.verbose_level_ = 0;
Ramkumar Radhakrishnan94c27a32014-12-26 13:32:54 -080091 }
Dileep Marchya2d586442018-03-09 16:42:40 +053092
93 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Ramkumar Radhakrishnan94c27a32014-12-26 13:32:54 -080094}
95
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -070096void HWCDebugHandler::DebugDriverConfig(bool enable, int verbose_level) {
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -080097 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +053098 debug_handler_.log_mask_[kTagDriverConfig] = 1;
99 debug_handler_.verbose_level_ = verbose_level;
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -0800100 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +0530101 debug_handler_.log_mask_[kTagDriverConfig] = 0;
102 debug_handler_.verbose_level_ = 0;
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -0800103 }
Dileep Marchya2d586442018-03-09 16:42:40 +0530104
105 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -0800106}
107
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -0700108void HWCDebugHandler::DebugRotator(bool enable, int verbose_level) {
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -0800109 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +0530110 debug_handler_.log_mask_[kTagRotator] = 1;
111 debug_handler_.verbose_level_ = verbose_level;
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -0800112 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +0530113 debug_handler_.log_mask_[kTagRotator] = 0;
114 debug_handler_.verbose_level_ = 0;
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -0800115 }
Dileep Marchya2d586442018-03-09 16:42:40 +0530116
117 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Ramkumar Radhakrishnanbefbdbe2015-01-14 20:14:40 -0800118}
119
Rohit Kulkarniaa5111b2017-06-13 10:26:39 -0700120void HWCDebugHandler::DebugScalar(bool enable, int verbose_level) {
121 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +0530122 debug_handler_.log_mask_[kTagScalar] = 1;
123 debug_handler_.verbose_level_ = verbose_level;
Rohit Kulkarniaa5111b2017-06-13 10:26:39 -0700124 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +0530125 debug_handler_.log_mask_[kTagScalar] = 0;
126 debug_handler_.verbose_level_ = 0;
Rohit Kulkarniaa5111b2017-06-13 10:26:39 -0700127 }
Dileep Marchya2d586442018-03-09 16:42:40 +0530128
129 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Rohit Kulkarniaa5111b2017-06-13 10:26:39 -0700130}
131
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -0700132void HWCDebugHandler::DebugQdcm(bool enable, int verbose_level) {
Zohaib Alam29c43c32015-06-08 10:38:16 -0400133 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +0530134 debug_handler_.log_mask_[kTagQDCM] = 1;
135 debug_handler_.verbose_level_ = verbose_level;
Zohaib Alam29c43c32015-06-08 10:38:16 -0400136 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +0530137 debug_handler_.log_mask_[kTagQDCM] = 0;
138 debug_handler_.verbose_level_ = 0;
Zohaib Alam29c43c32015-06-08 10:38:16 -0400139 }
Dileep Marchya2d586442018-03-09 16:42:40 +0530140
141 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Zohaib Alam29c43c32015-06-08 10:38:16 -0400142}
143
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +0530144void HWCDebugHandler::DebugClient(bool enable, int verbose_level) {
145 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +0530146 debug_handler_.log_mask_[kTagClient] = 1;
147 debug_handler_.verbose_level_ = verbose_level;
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +0530148 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +0530149 debug_handler_.log_mask_[kTagClient] = 0;
150 debug_handler_.verbose_level_ = 0;
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +0530151 }
Dileep Marchya2d586442018-03-09 16:42:40 +0530152
153 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +0530154}
155
156void HWCDebugHandler::DebugDisplay(bool enable, int verbose_level) {
157 if (enable) {
Dileep Marchya2d586442018-03-09 16:42:40 +0530158 debug_handler_.log_mask_[kTagDisplay] = 1;
159 debug_handler_.verbose_level_ = verbose_level;
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +0530160 } else {
Dileep Marchya2d586442018-03-09 16:42:40 +0530161 debug_handler_.log_mask_[kTagDisplay] = 0;
162 debug_handler_.verbose_level_ = 0;
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +0530163 }
Dileep Marchya2d586442018-03-09 16:42:40 +0530164
165 DebugHandler::SetLogMask(debug_handler_.log_mask_);
Saurabh Dubeyd90a6a42017-10-24 16:28:01 +0530166}
167
Varun Aroracc301f12018-12-13 14:32:24 -0800168void HWCDebugHandler::DebugQos(bool enable, int verbose_level) {
169 if (enable) {
170 debug_handler_.log_mask_[kTagQOSClient] = 1;
Ashish Kumar62030792019-01-28 22:41:19 +0530171 debug_handler_.log_mask_[kTagQOSImpl] = 1;
Varun Aroracc301f12018-12-13 14:32:24 -0800172 debug_handler_.verbose_level_ = verbose_level;
173 } else {
174 debug_handler_.log_mask_[kTagQOSClient] = 0;
Ashish Kumar62030792019-01-28 22:41:19 +0530175 debug_handler_.log_mask_[kTagQOSImpl] = 0;
Varun Aroracc301f12018-12-13 14:32:24 -0800176 debug_handler_.verbose_level_ = 0;
177 }
178
179 DebugHandler::SetLogMask(debug_handler_.log_mask_);
180}
181
Dileep Marchya2d586442018-03-09 16:42:40 +0530182void HWCDebugHandler::Error(const char *format, ...) {
183 va_list list;
184 va_start(list, format);
185 __android_log_vprint(ANDROID_LOG_ERROR, LOG_TAG, format, list);
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -0800186}
187
Dileep Marchya2d586442018-03-09 16:42:40 +0530188void HWCDebugHandler::Warning(const char *format, ...) {
189 va_list list;
190 va_start(list, format);
191 __android_log_vprint(ANDROID_LOG_WARN, LOG_TAG, format, list);
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -0800192}
193
Dileep Marchya2d586442018-03-09 16:42:40 +0530194void HWCDebugHandler::Info(const char *format, ...) {
195 va_list list;
196 va_start(list, format);
197 __android_log_vprint(ANDROID_LOG_INFO, LOG_TAG, format, list);
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -0800198}
199
Dileep Marchya2d586442018-03-09 16:42:40 +0530200void HWCDebugHandler::Debug(const char *format, ...) {
201 va_list list;
202 va_start(list, format);
203 __android_log_vprint(ANDROID_LOG_DEBUG, LOG_TAG, format, list);
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -0700204}
205
Dileep Marchya2d586442018-03-09 16:42:40 +0530206void HWCDebugHandler::Verbose(const char *format, ...) {
207 if (debug_handler_.verbose_level_) {
Manoj Kumar AVM6379fa52015-06-11 16:39:58 -0700208 va_list list;
209 va_start(list, format);
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -0800210 __android_log_vprint(ANDROID_LOG_VERBOSE, LOG_TAG, format, list);
211 }
212}
213
214void HWCDebugHandler::BeginTrace(const char *class_name, const char *function_name,
215 const char *custom_string) {
Naseer Ahmedcae693b2017-05-08 11:38:14 -0400216 if (atrace_is_tag_enabled(ATRACE_TAG)) {
217 char name[PATH_MAX] = {0};
218 snprintf(name, sizeof(name), "%s::%s::%s", class_name, function_name, custom_string);
219 atrace_begin(ATRACE_TAG, name);
220 }
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -0800221}
222
223void HWCDebugHandler::EndTrace() {
224 atrace_end(ATRACE_TAG);
225}
226
Lei Zhou53f014b2015-06-24 16:15:28 -0400227int HWCDebugHandler::GetIdleTimeoutMs() {
228 int value = IDLE_TIMEOUT_DEFAULT_MS;
Uday Kiran Pichika5e656b22018-05-15 18:48:24 +0530229 debug_handler_.GetProperty(IDLE_TIME_PROP, &value);
Lei Zhou53f014b2015-06-24 16:15:28 -0400230
231 return value;
232}
233
Dileep Marchya2d586442018-03-09 16:42:40 +0530234int HWCDebugHandler::GetProperty(const char *property_name, int *value) {
Dileep Marchyae2a59082015-05-21 13:29:05 -0700235 char property[PROPERTY_VALUE_MAX];
236
237 if (property_get(property_name, property, NULL) > 0) {
238 *value = atoi(property);
239 return kErrorNone;
240 }
241
242 return kErrorNotSupported;
243}
244
Dileep Marchya2d586442018-03-09 16:42:40 +0530245int HWCDebugHandler::GetProperty(const char *property_name, char *value) {
Saurabh Shah909c9792015-07-06 15:59:01 -0700246 if (property_get(property_name, value, NULL) > 0) {
247 return kErrorNone;
248 }
249
250 return kErrorNotSupported;
251}
252
Dileep Marchya73d002e2015-05-08 18:58:33 -0700253} // namespace sdm
Ramkumar Radhakrishnan7ebf0342015-01-20 15:00:46 -0800254