perflog.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // SPDX-License-Identifier: GPL-2.0
  2. //
  3. // Samsung's performance logging
  4. //
  5. // Copyright (c) 2014 Samsung Electronics Co., Ltd
  6. // http://www.samsung.com
  7. #ifndef PERFLOG_H_
  8. #define PERFLOG_H_
  9. #define PERFLOG_LOC __FILE__, __LINE__
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. #include "olog.pb.h"
  14. typedef unsigned char uint8;
  15. typedef unsigned short uint16;
  16. typedef unsigned int uint32;
  17. // extern FILE* perflog_fout;
  18. #define PERFLOG_PACKET_SIZE 256
  19. #define PERFLOG_HEADER_SIZE 24
  20. #define PERFLOG_BUFF_STR_MAX_SIZE (PERFLOG_PACKET_SIZE - PERFLOG_HEADER_SIZE)
  21. #define PERFLOG_BUFF_STR_MAX_SIZE_FOR_MULTILINE 4096
  22. #define PERFLOG_BUFF_STR_MAX_SIZE_FOR_EVTI PERFLOG_BUFF_STR_MAX_SIZE - PERFLOG_UINT16_SIZE
  23. #define PERFLOG_UINT16_SIZE 2
  24. #define PERFLOG_INT_SIZE 4
  25. /* PerfLog Phase 2 :: header format modification
  26. should be changed to protobuff type
  27. */
  28. typedef enum PerfLogAffectTag {
  29. AFFECT_K,
  30. AFFECT_F,
  31. AFFECT_A
  32. }PerfLogAffect;
  33. typedef enum EvtNamingTag {
  34. NAMING_LockC,
  35. NAMING_AppLaunch,
  36. }EvtNamingTag;
  37. typedef enum PerfLevelTag{
  38. LOW,
  39. MID,
  40. HIGH,
  41. CRITICAL
  42. }PerfLevelTag;
  43. // ###############################################################################
  44. #pragma pack(push, 1)
  45. struct Payload {
  46. int param1;
  47. int param2;
  48. char logbuffer[PERFLOG_BUFF_STR_MAX_SIZE + 1];
  49. };
  50. struct LogPacket {
  51. #if defined(KPERFMON_KERNEL)
  52. struct timespec64 logtime;
  53. #else
  54. struct timespec logtime;
  55. #endif
  56. uint16 logtype;
  57. uint16 logid;
  58. uint16 pid;
  59. uint16 tid;
  60. struct Payload payload;
  61. };
  62. struct _Timestamp {
  63. uint8 month;
  64. uint8 day;
  65. uint8 hour;
  66. uint8 minute;
  67. uint8 second;
  68. uint16 msecond;
  69. };
  70. struct _PLogPacket {
  71. struct _Timestamp timestamp;
  72. uint16 pid;
  73. uint16 tid;
  74. uint8 type;
  75. uint8 id;
  76. char pname[10];
  77. uint8 context_length;
  78. char context_buffer[PERFLOG_BUFF_STR_MAX_SIZE + 1];
  79. };
  80. union _uPLogPacket {
  81. struct _PLogPacket itemes;
  82. char stream[PERFLOG_HEADER_SIZE + PERFLOG_BUFF_STR_MAX_SIZE];
  83. };
  84. #pragma pack(pop)
  85. // Start API
  86. int perflog_sending_log_via_socket(uint16 type, uint16 logid, int param1, int param2, char const *str);
  87. int perflog_write(char const * fmt, ...);
  88. int perflog_write_log(uint16 type, uint16 logid, char const * fmt, ...);
  89. int perflog_write_evt(uint16 maintype, uint16 logid, uint16 param1, char const * fmt, ...);
  90. // int perflog_getlog(char **buff);
  91. // End API
  92. #ifdef __cplusplus
  93. }
  94. #endif /* #ifdef __cplusplus */
  95. #endif