1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 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 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 19 20 #ifndef OSCL_SOCKET_STATS_H_INCLUDED 21 #define OSCL_SOCKET_STATS_H_INCLUDED 22 23 /*! 24 ** Socket diagnostics. 25 */ 26 #include "oscl_base.h" 27 #include "oscl_vector.h" 28 #include "oscl_mem.h" 29 #include "oscl_mutex.h" 30 31 enum TOsclSocketStatEvent 32 { 33 //Request/Method AO events 34 EOsclSocket_RequestAO_Success 35 , EOsclSocket_RequestAO_Canceled 36 , EOsclSocket_RequestAO_Error 37 , EOsclSocket_RequestAO_Timeout 38 //Server events 39 , EOsclSocket_ServRequestIssued 40 , EOsclSocket_ServPoll 41 , EOsclSocket_OS 42 , EOsclSocket_Readable 43 , EOsclSocket_Writable 44 , EOsclSocket_Except 45 , EOsclSocket_DataRecv 46 , EOsclSocket_DataSent 47 , EOsclSocket_ServRequestComplete 48 , EOsclSocket_ServRequestCancelIssued 49 //loop socket events 50 , EOsclSocketServ_LoopsockOk 51 , EOsclSocketServ_LoopsockError 52 }; 53 static const char* const TPVSocketStatStr[] = 54 { 55 //Request/Method AO events 56 "AO_Success" 57 , "AO_Canceled" 58 , "AO_Error" 59 , "AO_Timeout" 60 //Server events 61 , "Serv_ReqIssued" 62 , "Serv_Poll" 63 , "Serv_OS_Op" 64 , "Serv_Readable" 65 , "Serv_Writeable" 66 , "Serv_Except!" 67 , "Serv_DataRecv'd" 68 , "Serv_DataSent" 69 , "Serv_ReqComplete" 70 , "Serv_ReqCancel" 71 //loop socket events 72 , "Loopsock_OK" 73 , "Loopsock_Err" 74 } ; 75 76 enum TOsclSocketServStatEvent 77 { 78 //select loop events 79 EOsclSocketServ_SelectNoActivity = 0 80 , EOsclSocketServ_SelectActivity 81 , EOsclSocketServ_SelectRescheduleAsap 82 , EOsclSocketServ_SelectReschedulePoll 83 , EOsclSocketServ_LastEvent 84 }; 85 static const char* const TPVSocketServStatStr[] = 86 { 87 "Select_No" 88 , "Select_Yes" 89 , "Select_Resched_Asap" 90 , "Select_Resched_Poll" 91 } ; 92 93 #include "oscl_socket_tuneables.h" 94 #if(PV_OSCL_SOCKET_STATS_LOGGING) 95 96 class PVLogger; 97 class OsclSocketStatEventEntry 98 { 99 public: OsclSocketStatEventEntry(TOsclSocketStatEvent aEvent,uint32 aTime,int32 aParam)100 OsclSocketStatEventEntry(TOsclSocketStatEvent aEvent, uint32 aTime, int32 aParam) 101 : iEvent(aEvent) 102 , iTicks(aTime) 103 , iParam(aParam) 104 {} 105 TOsclSocketStatEvent iEvent; 106 uint32 iTicks; 107 int32 iParam; 108 }; 109 110 #include "oscl_socket_types.h" 111 112 #define OsclSocketStats_NUM_ACTIVE_REQUESTS EPVSocket_Last 113 114 //Define the maximum number of polling events that will be logged. 115 //Additional poll events will be counted but not logged individually. 116 #define OsclSocketStats_MAX_POLL_EVENTS 100 117 118 class OsclSocketStats 119 { 120 public: 121 OsclSocketStats(); 122 ~OsclSocketStats(); 123 void ShowTuneables(); 124 void Add(TPVSocketFxn, TOsclSocketStatEvent, int32 aParam = (-1)); 125 void Log(TPVSocketFxn); 126 void Log(); 127 void Clear(TPVSocketFxn); 128 void Construct(OsclAny* aContainer, OsclAny*aServ); 129 void LogAndDump(); 130 private: 131 Oscl_Vector<OsclSocketStatEventEntry, OsclMemAllocator> iEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS]; 132 Oscl_Vector<OsclSocketStatEventEntry, OsclMemAllocator> iPollEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS]; 133 int32 iExcessPollEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS]; 134 int32 iLastCompletionTime[OsclSocketStats_NUM_ACTIVE_REQUESTS]; 135 OsclThreadLock iLock; 136 char* iLogStr; 137 PVLogger* iLogger; 138 OsclAny* iSock; 139 OsclAny* iServ; 140 }; 141 142 class OsclSocketServStats 143 { 144 public: 145 OsclSocketServStats(); 146 ~OsclSocketServStats(); 147 void Add(TOsclSocketServStatEvent); 148 void Construct(OsclAny*aServ); 149 void LogAndDump(); 150 private: 151 void Log(TOsclSocketServStatEvent); 152 void Clear(); 153 void ShowTuneables(); 154 uint32 iEvents[EOsclSocketServ_LastEvent]; 155 PVLogger* iLogger; 156 OsclAny* iServ; 157 }; 158 159 #endif 160 #endif 161 162 163 164