1 /*
2  * Copyright (C) 2005 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 //
18 // C/C++ logging functions.  See the logging documentation for API details.
19 //
20 // We'd like these to be available from C code (in case we import some from
21 // somewhere), so this has a C interface.
22 //
23 // The output will be correct when the log file is shared between multiple
24 // threads and/or multiple processes so long as the operating system
25 // supports O_APPEND.  These calls have mutex-protected data structures
26 // and so are NOT reentrant.  Do not use LOG in a signal handler.
27 //
28 #ifndef _LIBS_UTILS_LOG_H
29 #define _LIBS_UTILS_LOG_H
30 
31 #include <cutils/log.h>
32 #include <sys/types.h>
33 
34 #ifdef __cplusplus
35 
36 namespace android {
37 
38 /*
39  * A very simple utility that yells in the log when an operation takes too long.
40  */
41 class LogIfSlow {
42 public:
43     LogIfSlow(const char* tag, android_LogPriority priority,
44             int timeoutMillis, const char* message);
45     ~LogIfSlow();
46 
47 private:
48     const char* const mTag;
49     const android_LogPriority mPriority;
50     const int mTimeoutMillis;
51     const char* const mMessage;
52     const int64_t mStart;
53 };
54 
55 /*
56  * Writes the specified debug log message if this block takes longer than the
57  * specified number of milliseconds to run.  Includes the time actually taken.
58  *
59  * {
60  *     ALOGD_IF_SLOW(50, "Excessive delay doing something.");
61  *     doSomething();
62  * }
63  */
64 #define ALOGD_IF_SLOW(timeoutMillis, message) \
65     android::LogIfSlow _logIfSlow(LOG_TAG, ANDROID_LOG_DEBUG, timeoutMillis, message);
66 
67 } // namespace android
68 
69 #endif // __cplusplus
70 
71 #endif // _LIBS_UTILS_LOG_H
72